열심히 끝까지
디바이스 융합 자바(Java) day72 - Spring MVC 관련 코드 정리(CRUD) 본문
디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)
디바이스 융합 자바(Java) day72 - Spring MVC 관련 코드 정리(CRUD)
노유림 2022. 9. 23. 12:07-- 기본 세팅
>> JDBCUtil.java ------------------------------------------------
package com.ryo.biz.common;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBCUtil {
static final String driverName = "사용하는 Driver 이름";
static final String url = "oracleUrl";
static final String user = "user 이름";
static final String passwd = "비밀번호";
// conn 객체 반환
public static Connection connect() { // Connection 확보 로직
Connection conn = null;
try {
Class.forName(driverName);
conn = DriverManager.getConnection(url, user, passwd);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
// conn 객체 받아서 연결해제
public static void disconnect(PreparedStatement pstmt, Connection conn) {
try {
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
>> DispatcherServlet-servlet.xml ---------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
<!-- 싱글톤 패턴!! -->
<!-- HM 등록 + DI를 해야 함 -->
<context:component-scan base-package="com.ryo.biz" />
<aop:aspectj-autoproxy/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
<property name="username" value="ryo"></property>
<property name="password" value="1234"></property>
</bean>
<!-- Spring에서 사용하는 JDBC 방법(테이블 제작) -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
>> web.xml --------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<!-- 사용하는 디스패쳐 서블릿 관련 작성 -->
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 인코딩 필터 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- 언어 적용되는 곳 필터 -->
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
</web-app>
>> pom.xml(추가한 부분만 기입) --------------------------
<properties>
<java-version>11</java-version>
<org.springframework-version>4.2.4.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependencies>
<!-- DBCP 설정 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AOP 설정 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.8</version>
</dependency>
--------------------------------------------------------- [ Model ] ---------------------------------------------------------
-- MemberTable
>> MEMBER.sql --------------------------------------------------
CREATE TABLE MEMBER(
MID VARCHAR(20) PRIMARY KEY,
MPW VARCHAR(20) NOT NULL,
NAME VARCHAR(20) NOT NULL,
ROLE VARCHAR(10) NOT NULL
);
SELECT * FROM MEMBER;
--기본 세팅
INSERT INTO MEMBER VALUES('admin','1234','관리자','ADMIN');
>> MemberVO.java ----------------------------------------------
package com.ryo.biz.member;
public class MemberVO {
private String mid;
private String mpw;
private String name;
private String role;
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getMpw() {
return mpw;
}
public void setMpw(String mpw) {
this.mpw = mpw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
@Override
public String toString() {
return "MemberVO [mid=" + mid + ", mpw=" + mpw + ", name=" + name + ", role=" + role + "]";
}
}
>> MemberDAO.java --------------------------------------------
package com.ryo.biz.member.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.ryo.biz.common.JDBCUtil;
import com.ryo.biz.member.MemberVO;
public class MemberDAO {
private Connection conn;
private PreparedStatement pstmt;
final String sql_selectAll="SELECT * FROM MEMBER";
final String sql_selectOne="SELECT * FROM MEMBER WHERE MID=? AND MPW=?";
final String sql_insert="INSERT INTO MEMBER(MID,MPW,NAME,ROLE) VALUES(?,?,?,?)";
final String sql_update="UPDATE MEMBER SET MPW=?, NAME=? WHERE MID=?";
final String sql_delete="DELETE MEMBER WHERE MID=?";
// 회원 로그인
public MemberVO selectOneMember(MemberVO vo) {
conn=JDBCUtil.connect();
try {
pstmt=conn.prepareStatement(sql_selectOne);
pstmt.setString(1, vo.getMid());
pstmt.setString(2, vo.getMpw());
ResultSet rs=pstmt.executeQuery();
System.out.println("시작!");
if(rs.next()) {
MemberVO data=new MemberVO();
data.setMid(rs.getString("MID"));
data.setMpw(rs.getString("MPW"));
data.setName(rs.getString("NAME"));
data.setRole(rs.getString("ROLE"));
System.out.println("로그 : 로그인 완료 " + vo);
System.out.println("끝!");
return data;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
return null;
}
// 회원 추가
public void insertMember(MemberVO vo) {
conn=JDBCUtil.connect();
try {
pstmt=conn.prepareStatement(sql_insert);
pstmt.setString(1, vo.getMid());
pstmt.setString(2, vo.getMpw());
pstmt.setString(3, vo.getName());
pstmt.setString(4, vo.getRole());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
}
// 회원 업데이트
public void updateMember(MemberVO vo) {
conn=JDBCUtil.connect();
try {
pstmt=conn.prepareStatement(sql_update);
pstmt.setString(1, vo.getMpw());
pstmt.setString(2, vo.getName());
pstmt.setString(3,vo.getMid());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
}
// 회원 삭제
public void deleteMember(MemberVO vo) {
conn=JDBCUtil.connect();
try {
pstmt=conn.prepareStatement(sql_delete);
pstmt.setString(1,vo.getMid());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
}
}
>> MemberDAO2.java(Jdbc Template 사용) ------------
package com.ryo.biz.member.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.ryo.biz.member.MemberVO;
@Repository("memberDAO")
public class MemberDAO2 {
@Autowired
private JdbcTemplate jdbcTemplate;
final String sql_selectAll="SELECT * FROM MEMBER";
final String sql_selectOne="SELECT * FROM MEMBER WHERE MID=? AND MPW=?";
final String sql_insert="INSERT INTO MEMBER(MID,MPW,NAME,ROLE) VALUES(?,?,?,?)";
final String sql_update="UPDATE BOARD SET MPW=?, NAME=? WHERE MID=?";
final String sql_delete="DELETE BOARD WHERE MID=?";
// 로그인
public MemberVO selectOneMember(MemberVO vo) {
Object[] args= {vo.getMid(),vo.getMpw()};
System.out.println("★");
System.out.println("로그인 시작");
return jdbcTemplate.queryForObject(sql_selectOne, args,new MemberRowMapper());
}
// 회원가입
public void insertMember(MemberVO vo) {
Object[] args= {vo.getMid(),vo.getMpw(),vo.getName(),vo.getRole()};
jdbcTemplate.update(sql_insert,args);
}
// 회원 업데이트
public void updateMember(MemberVO vo) {
Object[] args= {vo.getMpw(),vo.getName(),vo.getMid()};
jdbcTemplate.update(sql_update,args);
}
// 회원 삭제
public void deleteMember(MemberVO vo) {
jdbcTemplate.update(sql_delete,vo.getMid());
}
}
// 로그인 후, 필요한 값 저장
class MemberRowMapper implements RowMapper<MemberVO>{
@Override
public MemberVO mapRow(ResultSet rs, int rowNum) throws SQLException {
MemberVO data=new MemberVO();
data.setMid(rs.getString("MID"));
data.setMpw(rs.getString("MPW"));
data.setName(rs.getString("NAME"));
data.setRole(rs.getString("ROLE"));
System.out.println("로그 : 로그인 완료 " + data);
return data;
}
}
-- BoardTable
>> BOARD.sql -----------------------------------------------------
CREATE TABLE BOARD(
BID INT PRIMARY KEY,
TITLE VARCHAR(20) NOT NULL,
WRITER VARCHAR(20) NOT NULL,
CONTENT VARCHAR(100) NOT NULL,
CNT INT DEFAULT 0,
REGDATE DATE DEFAULT SYSDATE
);
SELECT * FROM BOARD;
--기본세팅
INSERT INTO BOARD(BID,TITLE,WRITER,CONTENT) VALUES(1,'제목','관리자','내용');
>> BoardVO.java --------------------------------------------------
package com.ryo.biz.board;
public class BoardVO {
private int bid;
private String title;
private String writer;
private String content;
private int cnt;
private String regdate;
// 테이블에서는 사용하지 않는 항목
private String searchCondition; // 검색에 TITLE/WRITER 받아오는 항목
private String searchContent; // 검색한 내용을 받아오는 항목
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getCnt() {
return cnt;
}
public void setCnt(int cnt) {
this.cnt = cnt;
}
public String getRegdate() {
return regdate;
}
public void setRegdate(String regdate) {
this.regdate = regdate;
}
public String getSearchCondition() {
return searchCondition;
}
public void setSearchCondition(String searchCondition) {
this.searchCondition = searchCondition;
}
public String getSearchContent() {
return searchContent;
}
public void setSearchContent(String searchContent) {
this.searchContent = searchContent;
}
@Override
public String toString() {
return "BoardVO [bid=" + bid + ", title=" + title + ", writer=" + writer + ", content=" + content + ", cnt="
+ cnt + ", regdate=" + regdate + "]";
}
}
>> BoardDAO.java ------------------------------------------------
package com.ryo.biz.board.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
//import org.springframework.stereotype.Repository;
import com.ryo.biz.board.BoardVO;
import com.ryo.biz.common.JDBCUtil;
public class BoardDAO {
private Connection conn;
private PreparedStatement pstmt;
final String sql_selectOne="SELECT * FROM BOARD WHERE BID=?";
final String sql_selectAll="SELECT * FROM BOARD ORDER BY BID DESC";
final String sql_selectAll_T="SELECT * FROM BOARD WHERE TITLE LIKE '%'||?||'%' ORDER BY BID DESC";
final String sql_selectAll_W="SELECT * FROM BOARD WHERE WRITER LIKE '%'||?||'%' ORDER BY BID DESC";
final String sql_insert="INSERT INTO BOARD(BID,TITLE,WRITER,CONTENT) VALUES((SELECT NVL(MAX(BID),0)+1 FROM BOARD),?,?,?)";
final String sql_update="UPDATE BOARD SET TITLE=?, CONTENT=? WHERE BID=?";
final String sql_delete="DELETE BOARD WHERE BID=?";
// 하나의 글 보기
public BoardVO selectOneBoard(BoardVO vo) {
conn=JDBCUtil.connect();
try {
pstmt=conn.prepareStatement(sql_selectOne);
pstmt.setInt(1, vo.getBid());
ResultSet rs=pstmt.executeQuery();
if(rs.next()) {
BoardVO data=new BoardVO();
data.setBid(rs.getInt("BID"));
data.setContent(rs.getString("CONTENT"));
data.setTitle(rs.getString("TITLE"));
data.setWriter(rs.getString("WRITER"));
data.setCnt(rs.getInt("CNT"));
data.setRegdate(rs.getString("REGDATE"));
return data;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
return null;
}
// 모든 글 보기
public List<BoardVO> selectAllBoard(BoardVO vo) {
List<BoardVO> datas=new ArrayList<BoardVO>();
conn=JDBCUtil.connect();
try {
System.out.println("vo.getSearchCondition() : " + vo.getSearchCondition());
if(vo.getSearchCondition()==null) {
vo.setSearchCondition("TITLE");
}
if(vo.getSearchContent()==null) {
vo.setSearchContent("");
}
String sql_selcetAll=sql_selectAll_T;
if(vo.getSearchCondition().equals("WRITER")){
sql_selcetAll=sql_selectAll_W;
}
//System.out.println("로그 : "+ sql_selcetAll);
pstmt=conn.prepareStatement(sql_selcetAll);
//System.out.println("로그 : "+ vo.getSearchContent());
pstmt.setString(1, vo.getSearchContent());
//pstmt=conn.prepareStatement(sql_selectAll);
ResultSet rs=pstmt.executeQuery();
while(rs.next()) {
BoardVO data=new BoardVO();
data.setBid(rs.getInt("BID"));
data.setContent(rs.getString("CONTENT"));
data.setTitle(rs.getString("TITLE"));
data.setWriter(rs.getString("WRITER"));
data.setCnt(rs.getInt("CNT"));
data.setRegdate(rs.getString("REGDATE"));
datas.add(data);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
return datas;
}
// 글 추가
public void insertBoard(BoardVO vo) {
conn=JDBCUtil.connect();
try {
pstmt=conn.prepareStatement(sql_insert);
pstmt.setString(1, vo.getTitle());
pstmt.setString(3, vo.getContent());
pstmt.setString(2, vo.getWriter());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
}
// 글 업데이트
public void updateBoard(BoardVO vo) {
conn=JDBCUtil.connect();
try {
pstmt=conn.prepareStatement(sql_update);
pstmt.setString(1, vo.getTitle());
pstmt.setString(2, vo.getContent());
pstmt.setInt(3,vo.getBid());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
}
// 글 삭제
public void deleteBoard(BoardVO vo) {
conn=JDBCUtil.connect();
try {
pstmt=conn.prepareStatement(sql_delete);
pstmt.setInt(1,vo.getBid());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.disconnect(pstmt, conn);
}
}
}
>> BoardDAO2.java(Jdbc Template 사용) -----------------
package com.ryo.biz.board.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.ryo.biz.board.BoardVO;
@Repository("boardDAO")
public class BoardDAO2 {
// 의존 관계 + 의존성 주입 필요
@Autowired
private JdbcTemplate jdbcTemplate;
final String sql_selectOne="SELECT * FROM BOARD WHERE BID=?";
final String sql_selectAll="SELECT * FROM BOARD ORDER BY BID DESC";
final String sql_insert="INSERT INTO BOARD(BID,TITLE,WRITER,CONTENT) VALUES((SELECT NVL(MAX(BID),0)+1 FROM BOARD),?,?,?)";
final String sql_update="UPDATE BOARD SET TITLE=?, CONTENT=? WHERE BID=?";
final String sql_delete="DELETE BOARD WHERE BID=?";
// 글 하나 보기
BoardVO selectOneBoard(BoardVO vo) {
Object[] args= {vo.getBid()};
return jdbcTemplate.queryForObject(sql_selectOne,args,new BoardRowMapper());
}
// 글 모두 보기
List<BoardVO> selectAllBoard(BoardVO vo) {
return jdbcTemplate.query(sql_selectAll,new BoardRowMapper());
}
// 글 추가
void insertBoard(BoardVO vo) {
System.out.println("★");
jdbcTemplate.update(sql_insert,vo.getTitle(),vo.getWriter(),vo.getContent());
}
// 글 업데이트
void updateBoard(BoardVO vo) {
jdbcTemplate.update(sql_update,vo.getTitle(),vo.getContent(),vo.getBid());
}
// 글 삭제
void deleteBoard(BoardVO vo) {
jdbcTemplate.update(sql_update,vo.getBid());
}
}
// 글의 값들을 저장하는 Mapper
class BoardRowMapper implements RowMapper<BoardVO>{
@Override
public BoardVO mapRow(ResultSet rs, int rowNum) throws SQLException {
// 알아서 rowNum을 판단하기 때문에 걱정하지 말 것
BoardVO data=new BoardVO();
data.setBid(rs.getInt("BID"));
data.setContent(rs.getString("CONTENT"));
data.setTitle(rs.getString("TITLE"));
data.setWriter(rs.getString("WRITER"));
data.setCnt(rs.getInt("CNT"));
data.setRegdate(rs.getString("REGDATE"));
return data;
}
}
------------------------------------------------------- [ Controller ] ------------------------------------------------------
>> BoardController.java ------------------------------------------
package com.ryo.biz.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
//import org.springframework.web.servlet.ModelAndView;
import com.ryo.biz.board.BoardVO;
import com.ryo.biz.board.impl.BoardDAO;
@Controller
@SessionAttributes("data") // "data"라는 이름의 데이터가 Model 객체에 세팅이 된다면, 그 것을 session에 기억시키겠다.
public class BoardController{
// main에 넣을 구분값
@ModelAttribute("scMap")
public Map<String,String> searchConditionMap(){
// 인자 없고 맵 반환 예정
// 검색 조건에 들어가야 할 맵
Map<String,String> scMap = new HashMap<String,String>();
// 옵션에 들어갈 내용 관리 : View에 어떻게 보여야 할지 Model이 어떤 값을 받아야 할지
scMap.put("제목", "TITLE");
scMap.put("작성자", "WRITER");
// modeladdattribute 된 상태
return scMap;
}
// main
// API 분석 때 필요할 것, VO에 넣는 것이 좋음
@RequestMapping("/main.do")
public String main(@RequestParam(value="searchCondition", defaultValue="TITLE", required=false)String searchCondition, @RequestParam(value="searchContent", defaultValue="", required=false)String searchContent,BoardVO bVO, BoardDAO bDAO,Model model){
// 검색하는 것의 값을 자동매핑 불가(커맨드 객체에는 없기 때문에 불가)
// java에서만 사용할 목적으로 BoardVO에 추가
// >> 하지만 전체에서 딱 한번 쓰는 등의 너무 비효율적일 때, 사용하는 @
// ==> @RequestParam
// : 커맨드 객체에는 없는 파라미터를 Controller 클래스에 전달해주기 위해 사용
System.out.println("검색조건: "+searchCondition);
System.out.println("검색어: "+searchContent);
List<BoardVO> datas = bDAO.selectAllBoard(bVO);
model.addAttribute("datas", datas);
// mVO = mDAO.selectOneMember(mVO);
// model.addAttribute("userName", mVO.getName());
return "main.jsp";
}
// 글 하나 선택
@RequestMapping("/board.do")
public String board(BoardVO bVO, BoardDAO bDAO,Model model){
bVO=bDAO.selectOneBoard(bVO);
// mav.addObject("data", bVO);
model.addAttribute("data", bVO);
return "board.jsp";
}
/*
@RequestMapping("/board.do") // mav로 정의한 글 하나 보기
public ModelAndView board(BoardVO bVO, BoardDAO bDAO,ModelAndView mav){
bVO=bDAO.selectOneBoard(bVO);
mav.addObject("data", bVO);
mav.setViewName("board.jsp");
return mav;
}
*/
// 글 추가.jsp로 이동
@RequestMapping(value="/binsert.do", method=RequestMethod.GET)
public String binsertin() {
return "insertBoard.jsp";
}
// 글 추가
// get과 post일 때로 나눌 것 get은 이동 post일 때는
@RequestMapping(value="/binsert.do", method=RequestMethod.POST)
public String binsert(BoardVO bVO, BoardDAO bDAO) {
bDAO.insertBoard(bVO);
return "redirect:main.do";
}
// 글 삭제
@RequestMapping("/bdelete.do")
public String bdelete(BoardVO bVO, BoardDAO bDAO) {
bDAO.deleteBoard(bVO);
return "redirect:main.do";
}
// 글 업데이트
@RequestMapping("/bupdate.do")
public String bupdate(@ModelAttribute("data")BoardVO bVO, BoardDAO bDAO) {
bDAO.updateBoard(bVO);
return "redirect:main.do";
}
/*
@Override // 글 하나 고를 때 사용하던 handlerRequest - 2
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
BoardVO bVO = new BoardVO();
bVO.setBid(Integer.parseInt(request.getParameter("bid")));
BoardDAO bDAO = new BoardDAO();
bVO=bDAO.selectOneBoard(bVO);
HttpSession session = request.getSession();
session.setAttribute("data", bVO);
ModelAndView mav = new ModelAndView();
mav.addObject("data", bVO);
mav.setViewName("board.jsp");
return mav;
}
*/
// @Override // 글 하나 고를 때 사용하던 handlerRequest - 1
// public String handleRequest(HttpServletRequest request, HttpServletResponse response) {
// BoardVO bVO = new BoardVO();
// bVO.setBid(Integer.parseInt(request.getParameter("bid")));
//
// BoardDAO bDAO = new BoardDAO();
// bVO=bDAO.selectOneBoard(bVO);
//
// HttpSession session = request.getSession();
// session.setAttribute("data", bVO);
//
// return "board";
// }
}
>> MemberController.java ---------------------------------------
package com.ryo.biz.controller;
import javax.servlet.http.HttpServletRequest;
// import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.SessionAttributes;
//import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.SessionAttributes;
import com.ryo.biz.member.MemberVO;
import com.ryo.biz.member.impl.MemberDAO;
@Controller
@SessionAttributes("member")
public class MemberController {
// 로그인으로 들어가는 index
@RequestMapping(value="/login.do", method=RequestMethod.GET)
public String index() {
// 로그인 화면을 보여줘!
// 기본이 포워드 방식
// 데이터를 넣어서 보낼 때는 그냥 쓰면 됨
return "login.jsp";
}
// POST 요청에서만 할 수 있게 가능
// 로그인 및 세션에 정보 저장
@RequestMapping(value="/login.do", method=RequestMethod.POST)
public String selectOneMember(MemberVO mVO, MemberDAO mDAO, HttpSession session) {
System.out.println("로그 : 로그인컨트롤러 들어옴");
//ModelAndView mav = new ModelAndView();
mVO = mDAO.selectOneMember(mVO);
if(mVO == null){
return "login.jsp";
}
else {
// mav.addObject("member", mVO);
// mav.setViewName("main.do");
session.setAttribute("user", mVO);
return "redirect:main.do";
}
}
// 데이터를 넣으려면 ModelAndView 사용해야 함
/*
@RequestMapping(value="/login.do", method=RequestMethod.POST)
public ModelAndView selectOneMember(MemberVO mVO, MemberDAO mDAO, ModelAndView mav) {
System.out.println("로그 : 로그인컨트롤러 들어옴");
mVO = mDAO.selectOneMember(mVO);
return "login.jsp";
}
*/
// 로그아웃
@RequestMapping("/logout.do")
public String logout(HttpServletRequest request) {
HttpSession session = request.getSession();
session.invalidate();
//view Resolver는 기본이 forward 방식이구나!
return "redirect:login.do";
}
// 회원가입
@RequestMapping("/signin.do")
public String signin(MemberVO mVO, MemberDAO mDAO) {
mDAO.insertMember(mVO);
return "redirect:login.do";
}
// 멤버 삭제
@RequestMapping("/mdelete.do")
public String mdelete(HttpServletRequest request,MemberVO mVO, MemberDAO mDAO) {
System.out.println(mVO.getMid());
System.out.println("삭제하려는 mVO의 값 : " + mVO.getMid());
mDAO.deleteMember(mVO);
HttpSession session = request.getSession();
session.invalidate();
return "redirect:login.do";
}
// 멤버 업데이트
@RequestMapping("/mupdate.do")
public String mupdate(@ModelAttribute("member")MemberVO mVO, MemberDAO mDAO) { // MemberVO mVO, MemberDAO mDAO,HttpSession session
System.out.println("데이터 확인 : " + mVO);
mDAO.updateMember(mVO);
// session.setAttribute("user", mVO);
return "redirect:main.do";
}
// 마이페이지
@RequestMapping("/mypage.do")
public String mypage(HttpSession session, Model model) { // (MemberVO mVO, MemberDAO mDAO)
// mVO = mDAO.selectOneMember(mVO);
model.addAttribute("member",session.getAttribute("user"));
return "mypage.jsp";
}
// public ModelAndView mypage(MemberVO mVO, MemberDAO mDAO, ModelAndView mav) {
//
// mVO = mDAO.selectOneMember(mVO);
// mav.addObject("member", mVO);
// mav.setViewName("mypage.jsp");
// return mav;
// }
}
---------------------------------------------------------- [ View ] ----------------------------------------------------------
>> index.jsp ----------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
/* 광고 혹은 뭔가를 넘겨주어야 할 때는 .jsp가 아니라 .do로 작용 */
response.sendRedirect("login.do");
%>
>> login.jsp -----------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE HTML>
<!--
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>login</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Header -->
<header id="header" class="alt">
<span class="logo"><img src="images/logo.svg" alt="" /></span>
<h1>Spring Project</h1>
<p>spring project by <a href="https://programming-studyroom.tistory.com/">카펠라(노유림)</a></p>
</header>
<!-- Nav -->
<nav id="nav">
<ul>
<li><a href="#intro" class="active">Introduction</a></li>
<li><a href="#first">First Section</a></li>
<li><a href="#second">Second Section</a></li>
<li><a href="#cta">Get Started</a></li>
</ul>
</nav>
<!-- Main -->
<div id="main">
<!-- Introduction -->
<section id="intro" class="main">
<div class="spotlight">
<div class="content">
<header class="major">
<h2>login</h2>
</header>
<form action="login.do" method="post">
<table class="alt">
<tbody>
<tr>
<td>ID</td>
<td colspan="2"><input type="text" name="mid" required></td>
</tr>
<tr>
<td>PASSWORD</td>
<td colspan="2"><input type="password" name="mpw" required></td>
</tr>
<tr>
<td colspan="3" align="right"><input type="submit" class="button primary" value="LOGIN"> <a href="signin.jsp" class="button primary">SIGN IN</a> </td>
</tr>
</tbody>
</table>
</form>
</div>
<span class="image"><img src="images/pic01.jpg" alt="" /></span>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section>
<h2>Aliquam sed mauris</h2>
<p>Sed lorem ipsum dolor sit amet et nullam consequat feugiat consequat magna adipiscing tempus etiam dolore veroeros. eget dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula erat egestas velit, vitae tincidunt odio.</p>
<ul class="actions">
<li><a href="generic.html" class="button">Learn More</a></li>
</ul>
</section>
<section>
<h2>Etiam feugiat</h2>
<dl class="alt">
<dt>Address</dt>
<dd>1234 Somewhere Road • Nashville, TN 00000 • USA</dd>
<dt>Phone</dt>
<dd>(000) 000-0000 x 0000</dd>
<dt>Email</dt>
<dd><a href="#">information@untitled.tld</a></dd>
</dl>
<ul class="icons">
<li><a href="#" class="icon brands fa-twitter alt"><span class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f alt"><span class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-instagram alt"><span class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-github alt"><span class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands fa-dribbble alt"><span class="label">Dribbble</span></a></li>
</ul>
</section>
<p class="copyright">© Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>.</p>
</footer>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>
>> signin.jsp ----------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE HTML>
<!--
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>sign in</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Main -->
<div id="main">
<!-- Introduction -->
<section id="intro" class="main">
<div class="spotlight">
<div class="content">
<header class="major">
<h2>sign in</h2>
</header>
<form action="signin.do" method="post">
<table class="alt">
<tbody>
<tr>
<td>ID</td>
<td colspan="2"><input type="text" name="mid" required></td>
</tr>
<tr>
<td>PASSWORD</td>
<td colspan="2"><input type="password" name="mpw" required></td>
</tr>
<tr>
<td>NAME</td>
<td colspan="2"><input type="text" name="name" required></td>
</tr>
<tr>
<td>ROLE</td>
<td colspan="2"><select name="role">
<option selected>MEMBER</option>
<option>ADMIN</option>
</select></td>
</tr>
<tr>
<td colspan="3" align="right"><input type="submit" class="button primary" value="SIGN IN"> </td>
</tr>
</tbody>
</table>
</form>
<a href="login.do">go to login</a>
</div>
<span class="image"><img src="images/pic01.jpg" alt="" /></span>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section>
<h2>Aliquam sed mauris</h2>
<p>Sed lorem ipsum dolor sit amet et nullam consequat feugiat consequat magna adipiscing tempus etiam dolore veroeros. eget dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula erat egestas velit, vitae tincidunt odio.</p>
<ul class="actions">
<li><a href="generic.html" class="button">Learn More</a></li>
</ul>
</section>
<section>
<h2>Etiam feugiat</h2>
<dl class="alt">
<dt>Address</dt>
<dd>1234 Somewhere Road • Nashville, TN 00000 • USA</dd>
<dt>Phone</dt>
<dd>(000) 000-0000 x 0000</dd>
<dt>Email</dt>
<dd><a href="#">information@untitled.tld</a></dd>
</dl>
<ul class="icons">
<li><a href="#" class="icon brands fa-twitter alt"><span class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f alt"><span class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-instagram alt"><span class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-github alt"><span class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands fa-dribbble alt"><span class="label">Dribbble</span></a></li>
</ul>
</section>
<p class="copyright">© Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>.</p>
</footer>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>
>> main.jsp -----------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML>
<!--
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>main</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Main -->
<div id="main">
<!-- Introduction -->
<section id="intro" class="main">
<div class="spotlight">
<div class="content">
<header class="major">
<h2>main</h2>
</header>
<h2>HELLO , <a href="mypage.do">${user.name}</a> ! :D <a href="logout.do">로그아웃</a></h2>
<table>
<thead>
<tr>
<th> <a href="binsert.do"><input type="button" class="button small" style="float: right;" value="글쓰기"></a></th>
</tr>
</thead>
</table>
<!-- 검색 -->
<!-- main.do를 하는 이유는 메인 페이지를 보기 위해서 -->
<form action="main.do" method="post">
<table>
<thead>
<tr>
<th>
<select name="searchCondition">
<c:forEach var="v" items="${scMap}">
<!-- 키 값과 VALUE값 볼수 있게 작업 -->
<option value="${v.value}">${v.key}</option>
</c:forEach>
<!--
<option value="TITLE">제목</option>
<option value="WRITER">작성자</option>
-->
</select>
</th>
<th><input type="text" name="searchContent" placeholder="검색어를 입력하세요..."></th>
<th><input type="submit" class="button" value="search"></th>
</tr>
</thead>
</table>
</form>
<div class="table-wrapper">
<!--
<form action="binsert.do" method="post">
<table>
<tr>
<td><input type="text" name="title" value="제목" required></td>
<td><input type="text" name="writer" value="${name}" required readonly></td>
<td><input type="text" name="content" value="글쓰기" required></td>
<td><input type="submit" class="button primary" value="글쓰기"></td>
</tr>
</table>
</form>
-->
<table>
<thead>
<tr>
<th>num</th>
<th>title</th>
<th>writer</th>
<th>content</th>
<th>cnt</th>
<th>regdate</th>
</tr>
</thead>
<tbody>
<c:forEach var="b" items="${datas}">
<tr>
<td><a href="board.do?bid=${b.bid}">${b.bid}</a></td>
<td>${b.title}</td>
<td>${b.writer}</td>
<td>${b.content}</td>
<td>${b.cnt}</td>
<th>${b.regdate}</th>
</tr>
</c:forEach>
</tbody>
<tfoot>
<tr>
<td colspan="5"></td>
<td align="right"><a href="logout.do">logout</a></td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section>
<h2>Aliquam sed mauris</h2>
<p>Sed lorem ipsum dolor sit amet et nullam consequat feugiat consequat magna adipiscing tempus etiam dolore veroeros. eget dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula erat egestas velit, vitae tincidunt odio.</p>
<ul class="actions">
<li><a href="generic.html" class="button">Learn More</a></li>
</ul>
</section>
<section>
<h2>Etiam feugiat</h2>
<dl class="alt">
<dt>Address</dt>
<dd>1234 Somewhere Road • Nashville, TN 00000 • USA</dd>
<dt>Phone</dt>
<dd>(000) 000-0000 x 0000</dd>
<dt>Email</dt>
<dd><a href="#">information@untitled.tld</a></dd>
</dl>
<ul class="icons">
<li><a href="#" class="icon brands fa-twitter alt"><span class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f alt"><span class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-instagram alt"><span class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-github alt"><span class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands fa-dribbble alt"><span class="label">Dribbble</span></a></li>
</ul>
</section>
<p class="copyright">© Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>.</p>
</footer>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>
>> board.jsp ----------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML>
<!--
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>board</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Main -->
<div id="main">
<!-- Introduction -->
<section id="intro" class="main">
<div class="spotlight">
<div class="content">
<header class="major">
<h2>board</h2>
</header>
<div class="table-wrapper">
<form action="bupdate.do" method="post">
<table>
<thead>
<tr>
<th>title</th>
<th>content</th>
<th>writer</th>
<th>regdate</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text" name="title" value="${data.title}" required></td>
<td><input type="text" name="content" value="${data.content}" required></td>
<td>${data.writer}</td>
<td><input type="datetime-local" name="regdate" value="${data.regdate}"></td>
</tr>
</tbody>
<tfoot>
<c:if test="${data.writer==member.name || member.role == 'ADMIN'}">
<tr>
<td colspan="4" align="right"><input type="submit" class="button primary" value="글 변경"> <a href="bdelete.do?bid=${data.bid}"><input type="button" class="button primary" value="글 삭제"></a> </td>
</tr>
</c:if>
<tr>
<td colspan="3"></td>
<td><a href="main.do">main</a></td>
</tr>
</tfoot>
</table>
</form>
</div>
</div>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section>
<h2>Aliquam sed mauris</h2>
<p>Sed lorem ipsum dolor sit amet et nullam consequat feugiat consequat magna adipiscing tempus etiam dolore veroeros. eget dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula erat egestas velit, vitae tincidunt odio.</p>
<ul class="actions">
<li><a href="generic.html" class="button">Learn More</a></li>
</ul>
</section>
<section>
<h2>Etiam feugiat</h2>
<dl class="alt">
<dt>Address</dt>
<dd>1234 Somewhere Road • Nashville, TN 00000 • USA</dd>
<dt>Phone</dt>
<dd>(000) 000-0000 x 0000</dd>
<dt>Email</dt>
<dd><a href="#">information@untitled.tld</a></dd>
</dl>
<ul class="icons">
<li><a href="#" class="icon brands fa-twitter alt"><span class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f alt"><span class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-instagram alt"><span class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-github alt"><span class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands fa-dribbble alt"><span class="label">Dribbble</span></a></li>
</ul>
</section>
<p class="copyright">© Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>.</p>
</footer>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>
>> mypage.jsp -------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE HTML>
<!--
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>mypage</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Main -->
<div id="main">
<!-- Introduction -->
<section id="intro" class="main">
<div class="spotlight">
<div class="content">
<header class="major">
<h2>mypage</h2>
</header>
<form action="mupdate.do" method="post">
<table class="alt">
<tbody>
<tr>
<td>ID</td>
<td colspan="2">${member.mid}</td>
</tr>
<tr>
<td>PASSWORD</td>
<td colspan="2"><input type="password" name="mpw" value="${member.mpw}" required></td>
</tr>
<tr>
<td>NAME</td>
<td colspan="2"><input type="text" name="name" value="${member.name}" required></td>
</tr>
<tr>
<td>ROLE</td>
<td colspan="2">${member.role}</td>
</tr>
<tr>
<td colspan="3" align="right"><input type="submit" class="button primary" value="UPDATE"> </td>
</tr>
</tbody>
</table>
</form>
<a href="main.do">go to main</a> | <a href="mdelete.do?mid=${member.mid}">회원탈퇴</a>
</div>
<span class="image"><img src="images/pic01.jpg" alt="" /></span>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section>
<h2>Aliquam sed mauris</h2>
<p>Sed lorem ipsum dolor sit amet et nullam consequat feugiat consequat magna adipiscing tempus etiam dolore veroeros. eget dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula erat egestas velit, vitae tincidunt odio.</p>
<ul class="actions">
<li><a href="generic.html" class="button">Learn More</a></li>
</ul>
</section>
<section>
<h2>Etiam feugiat</h2>
<dl class="alt">
<dt>Address</dt>
<dd>1234 Somewhere Road • Nashville, TN 00000 • USA</dd>
<dt>Phone</dt>
<dd>(000) 000-0000 x 0000</dd>
<dt>Email</dt>
<dd><a href="#">information@untitled.tld</a></dd>
</dl>
<ul class="icons">
<li><a href="#" class="icon brands fa-twitter alt"><span class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f alt"><span class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-instagram alt"><span class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-github alt"><span class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands fa-dribbble alt"><span class="label">Dribbble</span></a></li>
</ul>
</section>
<p class="copyright">© Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>.</p>
</footer>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>
>> insertBoard.jsp --------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<!--
Stellar by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
<head>
<title>insertBoard</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" />
<noscript><link rel="stylesheet" href="assets/css/noscript.css" /></noscript>
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Main -->
<div id="main">
<!-- Introduction -->
<section id="intro" class="main">
<div class="spotlight">
<div class="content">
<header class="major">
<h2>write</h2>
</header>
<form action="binsert.do" method="post">
<table class="alt">
<tbody>
<tr>
<td>제목</td>
<td colspan="2"><input type="text" name="title" value="제목" required></td>
</tr>
<tr>
<td>작성자</td>
<td colspan="2"><input type="text" name="writer" value="${member.name}" required readonly></td>
</tr>
<tr>
<td>내용</td>
<td colspan="2"><input type="text" name="content" value="글쓰기" required></td>
</tr>
<tr>
<td colspan="3" align="right"><input type="submit" class="button primary" value="글쓰기"> </td>
</tr>
</tbody>
</table>
</form>
<a href="main.do">메인으로</a>
</div>
<span class="image"><img src="images/pic01.jpg" alt="" /></span>
</div>
</section>
</div>
<!-- Footer -->
<footer id="footer">
<section>
<h2>Aliquam sed mauris</h2>
<p>Sed lorem ipsum dolor sit amet et nullam consequat feugiat consequat magna adipiscing tempus etiam dolore veroeros. eget dapibus mauris. Cras aliquet, nisl ut viverra sollicitudin, ligula erat egestas velit, vitae tincidunt odio.</p>
<ul class="actions">
<li><a href="generic.html" class="button">Learn More</a></li>
</ul>
</section>
<section>
<h2>Etiam feugiat</h2>
<dl class="alt">
<dt>Address</dt>
<dd>1234 Somewhere Road • Nashville, TN 00000 • USA</dd>
<dt>Phone</dt>
<dd>(000) 000-0000 x 0000</dd>
<dt>Email</dt>
<dd><a href="#">information@untitled.tld</a></dd>
</dl>
<ul class="icons">
<li><a href="#" class="icon brands fa-twitter alt"><span class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f alt"><span class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-instagram alt"><span class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-github alt"><span class="label">GitHub</span></a></li>
<li><a href="#" class="icon brands fa-dribbble alt"><span class="label">Dribbble</span></a></li>
</ul>
</section>
<p class="copyright">© Untitled. Design: <a href="https://html5up.net">HTML5 UP</a>.</p>
</footer>
</div>
<!-- Scripts -->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/jquery.scrollex.min.js"></script>
<script src="assets/js/jquery.scrolly.min.js"></script>
<script src="assets/js/browser.min.js"></script>
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
</body>
</html>
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)' 카테고리의 다른 글
디바이스 융합 자바(Java) day74 - 파일 업로드 및 파일 미리보기 추가 (0) | 2022.09.27 |
---|---|
디바이스 융합 자바(Java) day73 - 2-Layered 아키텍쳐 (0) | 2022.09.26 |
디바이스 융합 자바(Java) day71 - @RequestParam, @ModelAttribute, @SessionAttributes (1) | 2022.09.22 |
디바이스 융합 자바(Java) day70 - Spring에 @(어노테이션) 걸기 (0) | 2022.09.21 |
디바이스 융합 자바(Java) - Spring 관련 암기할 내용 정리 (0) | 2022.09.20 |