본문 바로가기
JSP/JSP & Servlet

MVC패턴 게시판 만들기 - 답글달기

by avvin 2019. 5. 26.

MVC패턴 게시판 만들기 - 답글달기



BoardInfo.jsp에서 수정하기 버튼을 누르면 실행되는 서블릿 클래스 ReWriteCon.java

BoardInfo에서 글그룹, 글스텝, 글레벨을 파라미터로 넘겨줌

넘겨받은 글그룹, 글스텝, 글레벨 정보를 폼.jsp 페이지로 그대로 넘겨줌


ReWriteCon.java (Controller)

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
38
39
40
41
42
43
44
45
46
47
48
package control;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import model.BoardBean;
import model.BoardDAO;
 
@WebServlet("/BoardReWriteCon.do")
public class BoardReWriteCon extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        reqPro(request, response);
    }
 
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        reqPro(request, response);
    }
 
    
    protected void reqPro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        request.setCharacterEncoding("UTF-8");
 
        //게시글 읽기에서 답변글쓰기를 클릭하면 넘겨주는 데아터들을 받아줌
        //int num = Integer.parseInt(request.getParameter("num"));
        int ref = Integer.parseInt(request.getParameter("ref"));
        int re_step = Integer.parseInt(request.getParameter("re_step"));
        int re_level = Integer.parseInt(request.getParameter("re_level"));
        
        request.setAttribute("ref", ref);
        request.setAttribute("re_step", re_step);
        request.setAttribute("re_level", re_level);
 
        RequestDispatcher rd = request.getRequestDispatcher("BoardReWriteForm.jsp");
        rd.forward(request, response);
        
    }
 
}
 
cs



ReWriteForm.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
 
<div style="text_align: center">
    <h2>답변글 입력하기</h2>
 
<form action="BoardReWriteProcCon.do" method="post">
<table width="600" border="1" boardcolort="gray" bgcolor="skyblue">
    <tr height="40">
        <td width="150" align="center">작성자</td>
        <td width="450">
        <input type="text" name="writer" size="60">
        </td>
    </tr>
    <tr height="40">
        <td width="150" align="center">제목</td>
        <td width="450">
        <input type="text" name="subject" value="[답변]"
            size="60"></td>
    </tr>
    <tr height="40">
        <td width="150" align="center">이메일</td>
        <td width="450">
        <input type="email" name="email" size="60">
        </td>
    </tr>
    <tr height="40">
        <td width="150" align="center">비밀번호</td>
        <td width="450">
        <input type="password" name="password"
            size="60"></td>
    </tr>
    <tr height="40">
        <td width="150" align="center">글내용</td>
        <td width="450">
        <textarea rows="10" cols="60" name="content"></textarea>
        </td>
    </tr>
    <!-- form에서 사용자로부터 입력받지 않고 데이터를 넘김 -->
    <tr>
        <td align="center" colspan="2"><input type="hidden" name="ref"
            value="${ref }">
             <input type="hidden" name="re_step"
            value="${re_step }"
            <input type="hidden" name="re_level"
            value="${re_level }"
            <input type="submit" value="답글 등록">
            &nbsp; &nbsp; 
            <input type="reset" value="다시 입력"> <input
            type="button" onclick="location.href='BoardListCon.do'"
            value="전체글보기"></td>
    </tr>
</table>
</form>
</div>
</body>
</html>
cs




BoardDAO.java(Model)  ReWriteBoard 메서드

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
38
39
40
41
42
43
44
45
46
47
48
    
    public BoardBean reWriteBoard(BoardBean bean) {
        
        // 부모글 그룹, 글레벨 글스텝 읽어들이기
        int ref = bean.getRef();
        int re_step = bean.getRe_step();
        int re_level = bean.getRe_level();
 
        getCon();
        try {
            // ★핵심코드
            // 답변형 게시판의 특징
            // 글을 그룹으로 만들어야하기때문에 re_step과 re_level을 먼저 수정해줘야한다.
            // 부모 글보다 큰 re_level값을 전부 1씩 증가시켜줌
            //들어온 글 그룹값이 같고 들어온 글 레벨보다 글 레벨이 클 경우 글 레벨에 +1
            //(같은 그룹에 최신 답글이 하나 더 들어오면 보여주는 순서가 하나 더 밀림)
            String levelsql = "update board set re_level = re_level+1 where ref=? and re_level> ?";
            pstmt = con.prepareCall(levelsql);
            pstmt.setInt(1, ref);
            pstmt.setInt(2, re_level);
            pstmt.executeUpdate();
            // 답변 글 데이터를 저장
 
            String sql = "insert into board values(board_seq.NEXTVAL, ?,?,?,?,sysdate,?,?,?,0,?)";
            pstmt = con.prepareStatement(sql);
            // ?에 값을 맵핑
            pstmt.setString(1, bean.getWriter());
            pstmt.setString(2, bean.getEmail());
            pstmt.setString(3, bean.getSubject());
            pstmt.setString(4, bean.getPassword());
            pstmt.setInt(5, ref); // 부모의 ref 값을 넣어줌
            pstmt.setInt(6, re_step + 1); // 답글이니까 부모 글 re_step에 1을 더해줌
            pstmt.setInt(7, re_level); // 답글이니까 부모글 re_level에 1을 더해줌
            pstmt.setString(8, bean.getContent());
            // 쿼리 실행
            // 쿼리 실행 후 결과 리턴은 executeQuery(),
            // 데이터 업데이트는 executeUpdate()
            pstmt.executeUpdate();
            // 자원 반납
            con.close();
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return bean;
        }
        
cs