Servlet게시판4: 글 내용보기

content.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
<%
//전달받은 정보를 저장
BoardDTO bdto = (BoardDTO) request.getAttribute("bdto"); //object -다운캐스팅-> BoardDTO
String pageNum = (String) request.getAttribute("pageNum"); //object -다운캐스팅-> String
%>

<fieldset>
<legend>글 내용 보기</legend>
<table border="solid,1px">
<tr>
<th>글번호</th>
<td><%=bdto.getBno()%></td>
<th>조회수</th>
<td><%=bdto.getReadcount()%></td>
</tr>
<tr>
<th>작성자</th>
<td><%=bdto.getName()%></td>
<th>작성일</th>
<td><%=bdto.getDate()%></td>
</tr>
<tr>
<th>제목</th>
<td colspan="3"><%=bdto.getSubject()%></td>
</tr>
<tr>
<th>첨부파일</th>
<td colspan="3"><a href="D:\upfile\<%=bdto.getFile()%>"><%=bdto.getFile() %></a></td>
</tr>
<tr>
<th>내용</th>
<td colspan="3" height="300px"><%=bdto.getContent()%></td>
</tr>
<tr>
<td colspan="4" style="text-align:center">

<% //현재페이지에 로그인 정보가 없거나 글쓴이 이름과 아이디가 다를 경우 수정,삭제버튼을 숨긴다
//1.세션값 가져오기
//String id = (String) session.getAttribute("id");//object를 string으로 다운캐스팅
//2. 아이디가 존재하면서 이름과 아이디가 같은 경우
//if( id != null && id.equals(bdto.getName())){
%>
<input type="button" value="글수정" class="btn" onclick="location.href='./BoardUpdate.bo?bno=<%=bdto.getBno()%>&pageNum=<%=pageNum%>'">
<input type="button" value="글삭제" class="btn" onclick="location.href='./BoardDelete.bo?bno=<%=bdto.getBno()%>&pageNum=<%=pageNum%>'">
<input type="button" value="답글쓰기" class="btn" onclick="location.href='./BoardReWrite.bo?bno=<%=bdto.getBno()%>&re_ref=<%=bdto.getRe_ref() %>&re_lev=<%=bdto.getRe_lev()%>&re_seq=<%=bdto.getRe_seq()%>'">
<%
//}
%>
<input type="button" value="목록으로" class="btn"
onclick="location.href='./BoardList.bo?pageNum=<%=pageNum%>'">
<!-- location.href='boardList.jsp만 하면 5페이지보고있다가 다시 1페이지로 돌아가버린다
이때 historyback하면 조회수가 올라가지않는다.
따라서 pageNum을 가져와서 사용하면된다
-->
</td>
</tr>
</table>
</fieldset>




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

1
2
3
4
5
6
7
8
9
10
	//content보기
}else if(command.equals("./BoardContent.bo")){
System.out.println("컨트롤러 : BoardContent객체 생성 execute() 호출");
action = new BoardContentAction();
try{
forward = action.execute(request, response);
}catch(Exception e){
e.printStackTrace();
}
}




BoardContentAction.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
32
public class BoardContentAction implements Action {

@Override
public ActionForward execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
System.out.println("모델: BoardContentAction안의 execute() 실행됨");
// 한글처리(post방식 전달일때 꼭 처리해줘야한다. get방식일때는 한글이 깨지지않는다)
// 여기는 a태그를 타고 들어왔기때문에 get방식이다. 한글처리 안해도 됨
req.setCharacterEncoding("UTF-8");
// 1. 전달받은 데이터 저장(bno, pageNum)
int bno = Integer.parseInt(req.getParameter("bno"));
String pageNum = req.getParameter("pageNum");
//2. BoardDAO 객체 생성
BoardDAO bdao = new BoardDAO();
//3.조회수 1증가
bdao.updateReadCount(bno);

//4.특정 번호에 해당하는 글 정보 가져오기
BoardDTO bdto = bdao.getBoard(bno);

//5.리퀘스트영역에 정보저장
req.setAttribute("bdto", bdto);
//pageNum도 함께 전달해야한다
req.setAttribute("pageNum", pageNum);

//6. 화면출력하는 뷰페이지(.jsp)로 전달
ActionForward forward = new ActionForward();
forward.setPath("./baord/content.jsp");
forward.setRedirect(false);

return forward;
}
}




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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//특정글만 조회수 1 증가
public void updateReadCount(int bno){
try {
getCon();
sql="update itwill_board set readcount=readcount+1 where bno=?";
pstmt.setInt(1, bno);
pstmt = con.prepareStatement(sql);
pstmt.executeUpdate();
System.out.println("조회수1증가");
} catch (Exception e) {
e.printStackTrace();
} finally {
closeDB();
}
}




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

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
//글내용보기
public BoardDTO getBoard(int bno) {
BoardDTO bdto = null;
try {
getCon();
sql ="select * from itwill_board where bno=?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, bno);
rs = pstmt.executeQuery();
if(rs.next()){
bdto = new BoardDTO();
bdto.setBno(rs.getInt("bno"));
bdto.setContent(rs.getString("content"));
bdto.setDate(rs.getDate("date"));
bdto.setFile(rs.getString("file"));
bdto.setIp(rs.getString("ip"));

bdto.setName(rs.getString("name"));
bdto.setPw(rs.getString("pw"));
bdto.setRe_lev(rs.getInt("re_lev"));
bdto.setRe_ref(rs.getInt("re_ref"));
bdto.setRe_seq(rs.getInt("re_seq"));

bdto.setReadcount(rs.getInt("readcount"));
bdto.setSubject(rs.getString("subject"));
}
System.out.println("DAO: 글정보저장완료");
} catch (Exception e) {
e.printStackTrace();
} finally {
closeDB();
}
return bdto;
}