Servlet게시판7: 답글하기

BoardFrontController.java의 doProcess()의 주소비교 후 처리부분에 코드 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
	//답글쓰기
}else if(command.equals("/BoardReWrite.bo")){
System.out.println("C : /BoardReWrite.bo 호출");
//DB이동 X -> 페이지이동
forward = new ActionForward();
forward.setPath("./board/reWriteForm.jsp");
forward.setRedirect(false);
}else if(command.equals("/BoardReWriteAction.bo")){
System.out.println("C : /BoardReWriteAction.bo 호출");
action = new BoardReWriteAction();
try{ forward = action.execute(request, response);
}catch(Exception e){e.printStackTrace(); }
}




BoardReWriteAction.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
28
29
30
31
public class BoardReWriteAction implements Action {
@Override
public ActionForward execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
System.out.println("모델: BoardReWriteAction안의 execute() 실행됨");
//1. 한글처리
req.setCharacterEncoding("UTF-8");

//2.전달되는 파라미터 정보저장 ->MemberDTO생성
BoardDTO bdto = new BoardDTO();
//hidden으로 가져온 거 저장
bdto.setBno(Integer.parseInt(req.getParameter("bno")));
bdto.setRe_ref(Integer.parseInt(req.getParameter("re_ref")));
bdto.setRe_lev(Integer.parseInt(req.getParameter("re_lev")));
bdto.setRe_seq(Integer.parseInt(req.getParameter("re_seq")));
//입력값 저장
bdto.setName(req.getParameter("name"));
bdto.setPw(req.getParameter("pw"));
bdto.setSubject(req.getParameter("subject"));
bdto.setContent(req.getParameter("content"));

//3.BoardDAO객체생성
BoardDAO bdao = new BoardDAO();
bdao.reInsertBoard(bdto);

//4.페이지 이동
ActionForward forward = new ActionForward();
forward.setPath("./BoardList.bo");
forward.setRedirect(true);
return forward;
}
}




BoardDAO.java에 reInsertBoard()메서드 작성

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
//답글쓰기

public void reInsertBoard(BoardDTO bdto) {
int result =-1;
//1.지역변수생성
int num = 0;
//2. 디비연결
try {
getCon();
//sql(게시판의 글번호 중 최댓값 계산) & pstmt
//3. 답글번호 계산
sql = "select max(bno) from itwill_board";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next()){
num = rs.getInt(1)+1;
}
System.out.println("답글 번호 : "+num);

//4. 답글 순서 재배치
//re_ref(같은 그룹기준)으로 re_seq값이 기존의 값보다 큰 값이 있을경우 re_seq값을 1증가시켜서 순서재배치
sql = "update itwill_board set re_seq=re_seq+1 "
+ "where re_ref=? and re_seq>?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, bdto.getRe_ref());
pstmt.setInt(2, bdto.getRe_seq());
pstmt.executeUpdate();

//5. 답글 정보 저장
sql="insert into itwill_board "
+ "values(?,?,?,?,?"
+ ",?,?,?,?,now()"
+ ",?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, num);//bno는 가지고있는게 아니라 계산해서 만든것이므로 num사용
pstmt.setString(2, bdto.getName());
pstmt.setString(3, bdto.getPw());
pstmt.setString(4, bdto.getSubject());
pstmt.setString(5, bdto.getContent());
pstmt.setInt(6, bdto.getReadcount());
pstmt.setInt(7, bdto.getRe_ref()); //기존 원글의 그룹번호와 동일
pstmt.setInt(8, bdto.getRe_lev()+1); // 기존의 값 + 1
pstmt.setInt(9, bdto.getRe_seq()+1); // 기존의 값 + 1
pstmt.setString(10, bdto.getFile());
pstmt.setString(11, bdto.getIp());
pstmt.executeUpdate();
System.out.println("답글쓰기 성공");
result = 1;
} catch (Exception e) {
e.printStackTrace();
} finally {
closeDB();
}
}//end of reInsertBoard()




reWriteForm.jsp 생성

  • get방식으로 전달받은 파라미터들을 hidden타입 input태그를 이용하여 Action페이지에 post방식으로 전달해야한다.
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
<%
System.out.println("뷰: .jsp페이지로 이동완료");
String id = (String) session.getAttribute("id");

//전달된 파라미터 저장
int bno = Integer.parseInt(request.getParameter("bno"));
int re_ref = Integer.parseInt(request.getParameter("re_ref"));
int re_lev = Integer.parseInt(request.getParameter("re_lev"));
int re_seq = Integer.parseInt(request.getParameter("re_seq"));
%>
<fieldset>
<legend>게시판 답글쓰기</legend>
<form action="./BoardReWriteAction.bo" method="post" name="fr">
<input type="hidden" name="bno" value="<%=bno %>">
<input type="hidden" name="re_ref" value="<%=re_ref %>">
<input type="hidden" name="re_lev" value="<%=re_lev %>">
<input type="hidden" name="re_seq" value="<%=re_seq %>">
글쓴이 : <input type="text" name="name" required><br>
비밀번호 : <input type="password" name="pw" required><br>
제목 : <input type="text" name="subject" maxlength="15" value="[답글]" ><br>
내용 : <br>
<textarea rows="10" cols="35" name="content" placeholder="여기에 작성해주세요" ></textarea><br>
<input type="submit" value="답글등록" class="btn">
<button type="reset" class="btn">초기화</button>
<input type="button" value="목록으로" class="btn" onclick="location.href='./BoardList.bo'">
</form>
</fieldset>