SpringMVC 게시판
SpringMVC 프레임워크로 만드는 게시판
1. SpringMVCFramework 구조와 설계
=> 프로젝트를 생성하는 것은 이전과 같고, Board.command, Board.controller, Board.dao, Boadrd.dto
패키지에 각각 Command, Controller, DAO, DTO 를 생성하였다.
클라이언트의 요청과 알맞은 URL 을 Controller 에서 확인 후 그에 맞는 Command 를 수행,
DAO, DTO 를 통해 DB 와 연동하여 로직을 실행 후에 다시 Controller 로 돌아온 값들을 가지고
View 페이지를 보여주게 된다.
2. 데이터 베이스
bId NUMBER(4) PRIMARY KEY => 고유번호
bName VARCHAR2(20) => 작성자명
bTitle VARCHAR2(100) => 글 제목
bContent VARCHAR2(300) => 글 내용
bDate DATE DEFAULT SYSDATE => 글 작성일
bHit NUMBER(4) DEFAULT 0 => 조회수
bGroup NUMBER(4) => 그룹(원글과 답변의 묶음)번호
bStep NUMBER(4) => 답글의 번호(기본 글들은 글을 쓴 순서에 따라 정렬이 되지만 답글은 글들의
중간에도 위치할 수 있기 때문에, 중간에 쓴 답글을 기준으로하여 게시글의 번호를 +1 씩 함)
bIndent NUMBER(4) => 들여쓰기(원글의 대한 답글인지, 답글에 대한 답글인지 여부)
=> list.jsp(뷰페이지) 를 실행하였다.
list.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <table width="500" cellpadding="0" cellspacing="0" border="1"> <tr> <td>번호</td> <td>이름</td> <td>제목</td> <td>날짜</td> <td>히트</td> </tr> <c:forEach items="${list}" var="dto"> <tr> <td>${dto.bId}</td> <td>${dto.bName}</td> <td> <c:forEach begin="1" end="${dto.bIndent}">-</c:forEach> <a href="content_view?bId=${dto.bId}">${dto.bTitle}</a></td> <td>${dto.bDate}</td> <td>${dto.bHit}</td> </tr> </c:forEach> <tr> <td colspan="5"> <a href="write_view">글작성</a> </td> </tr> </table> </body> </html> | cs |
글작성 을 눌렀을 때 보이는 페이지 이다.
list.jsp 의 <a href="write_view">글작성</a> 에 따라 Controller 을 거친 클라이언트의 요청에 맞게
write_view.jsp 를 불러오게 된다. (write_view.jsp 의 실행 모습은 위와 같음)
BController.java 의 write_view 메핑 부분
1 2 3 4 5 6 | @RequestMapping("/write_view") public String write_view(Model model) { System.out.println("write_view()"); return "write_view"; } | cs |
위의 테이블에 이름과 제목 그리고 내용을 적고 '입력' 버튼을 누르게 되면 '입력' 버튼에
<form> 태그로 연결된 write 가 불려지게 되며 이 write 는 BController.java 에 매핑된
1 2 3 4 5 6 7 8 9 10 | @RequestMapping("/write") public String write(HttpServletRequest request, Model model) { System.out.println("write()"); model.addAttribute("request", request); command = new BWriteCommand(); command.execute(model); return "redirect:list"; } | cs |
에 따라 BWriteCommand() 을 실행하게 된다. BWriteCommand() 는 다음과 같다.
BWriteCommand.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package com.javalec.springMVCBoard.command; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.ui.Model; import com.javalec.springMVCBoard.dao.BDao; public class BWriteCommand implements BCommand { @Override public void execute(Model model) { // TODO Auto-generated method stub Map<String, Object> map = model.asMap(); HttpServletRequest request = (HttpServletRequest) map.get("request"); String bName = request.getParameter("bName"); String bTitle = request.getParameter("bTitle"); String bContent = request.getParameter("bContent"); BDao dao = new BDao(); dao.write(bName, bTitle, bContent); } } | cs |
입력된 작성자명과 글제목 그리고 글내용을 가지고와서 dao.write(bName, bTitle, bContent)
를 실행시킨다.(DB와 연동)
BDao.java 의 dao.write() 부분
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public void write(String bName, String bTitle, String bContent) { // TODO Auto-generated method stub Connection connection = null; PreparedStatement preparedStatement = null; try { connection = dataSource.getConnection(); String query = "insert into mvc_board (bId, bName, bTitle, bContent, bHit, bGroup, bStep, bIndent) values (mvc_board_seq.nextval, ?, ?, ?, 0, mvc_board_seq.currval, 0, 0 )"; preparedStatement = connection.prepareStatement(query); preparedStatement.setString(1, bName); preparedStatement.setString(2, bTitle); preparedStatement.setString(3, bContent); int rn = preparedStatement.executeUpdate(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } finally { try { if(preparedStatement != null) preparedStatement.close(); if(connection != null) connection.close(); } catch (Exception e2) { // TODO: handle exception e2.printStackTrace(); } } } | cs |
데이터 베이스와 연동하여 쿼리문을 실행, 입력된 작성자명과 글 제목 그리고 글 내용을 DB에 저장한다.
(preparedStatement 를 사용, 1 - 작성자명 / 2 - 글 제목 3 - 글 내용 을 저장하였다.)
위에서 만들었던 create sequence mvc_board seq 에 의해서 bId 의 부분은 mvc_board_seq.nextval
로써 첫번째 게시글은 글 번호가 1이 된다. 입력 버튼을 누르게 되면 BController.java 에 매핑된
return "redirect:list"; 에 따라서 작성한 글 리스트를 가지고 글 목록으로 돌아가게 된다.
*실행결과
'입력' 클릭 시
-계속-