반응형
* ‘게시글 상세 보기’란?
- 사용자가 선택한 게시물 하나를 조회하여 보여주는 기능(다음 이미지와 같음)
- 게시글의 내용을 보기 위해 목록에서 원하는 게시물의 제목을 클릭하면 됨
→ 게시글의 일련번호(num 컬럼)를 매개변수로 전달하고, 이를 이용해 데이터베이스에서 게시글 내용을 가져옴- 게시글의 일련번호(목록 보기 페이지인 List.jsp에 구현해 둠) - 가장 최근에 올린 7번째 게시글 클릭 시 “num=7”부분 확인 가능
- 게시글 조회 시, 조회수(visitcount 컬럼)를 증가시켜야 함
- 게시글 상세 보기 처리 프로세스와 담당 모듈(파일)
1. DAO 준비
1) 게시물을 조회하기 위한 메소드
- 앞서 만들었던 BoardDAO.java에 코드 추가
// Java Resources/src/model1/board/BoardDAO.java
...생략...
public class BoardDAO extends JDBConnect {
...생략...
//지정한 게시물을 찾아 내용 반환
public BoardDTO selectView(String num) { //1.
BoardDTO dto = new BoardDTO();
//2.쿼리문 준비
String query = "select B.*, M.name " //3.
+ " from member M inner join board B " //4.
+ " on M.id=B.id "
+ " where num=?";
try {
psmt = con.prepareStatement(query);
psmt.setString(1,num); //5.인파라미터를 일련번호로 설정
rs = psmt.executeQuery(); //6.쿼리 실행
//결과 처리
if (rs.next()) { //7.
//8.(아래 'dto.'코드 전부)
dto.setNum(rs.getString(1));
dto.setTitle(rs.getString(2));
dto.setContent(rs.getString("content"));
dto.setPostdate(rs.getDate("postdate"));
dto.setId(rs.getString("id"));
dto.setVisitcount(rs.getString(6));
dto.setName(rs.getString("name"));
}
}
catch (Exception e) {
System.out.println("게시물 상세보기 중 예외 발생");
e.printStackTrace();
}
return dto; //9.
}
}
- JSP에서 매개변수로 전달한 일련번호를 받음
- 게시물을 가져오기 위한 select 쿼리문 작성
- board 테이블의 모든 컬럼과 member 테이블의 name 컬럼을 가져옴(=선택함)
- member 테이블과 inner join을 걸어 줌
→ board 테이블에는 작성자의 아이디만 저장되므로, 이름을 출력하기 위해서는 member 테이블과의 조인이 필요 - 인파라미터를 일련번호로 설정
- 쿼리문 실행
- ResultSet 객체로 반환된 행을 next( ) 메소드로 확인
- ResultSet 객체로 반환된 행을 DTO 객체에 저장함
- 완성한 DTO를 반환함
2) 게시물 조회수를 1 증가시키는 메소드
- 1)과 마찬가지로, BoardDAO.java에 코드 추가
// Java Resources/src/model1/board/BoardDAO.java
... 생략 ...
//지정한 게시물의 조회수 1 증가
public class BoardDAO extends JDBConnect {
... 생략 ...
public void update VisitCount(String num) { //1.조회수를 증가시킬 게시물의 일련번호를 매개변수로 받음
//2.update 쿼리문 작성
String query = "update board set "
+ " visitcount=visitcount+1 "
+ " where num=?";
try {
psmt = con.prepareStatement(query);
psmt.setString(1,num); //3.인파라미터를 일련번호로 설정
psmt.executeQuery(); //4.쿼리 실행
}
catch (Exception e) {
System.out.println("게시물 조회수 증가 중 예외 발생");
e.printStackTrace();
}
}
}
2. 게시글 상세 보기 페이지
- 프로젝트에서 WebContent → Board에서 View.jsp 파일 생성
// WebContent/Board/View.jsp
<%@ page import="model1.board.BoardDAO"%>
<%@ page import="model1.board.BoardDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String num = request.getParameter("num"); //1.일련번호 받기
BoardDAO dao = new BoardDAO(application); //2.DAO 생성
dao.updateVisitCount(num); //3.조회수 증가
BoardDTO dto = dao.selectView(num); //4.게시물 가져오기
dao.close();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원제 게시판</title>
<script>
function deletePost() {
}
</script>
</head>
<body>
<jsp:include page="../Common/Link.jsp" /> <!-- 공통 링크 -->
<h2>회원제 게시판 - 상세 보기(View)</h2>
<form name="writeFrm">
<input type="hidden" name="num" value="<%= num %>" />
<table border="1" width="90%"
<!-- 5.(하나의 tr태그로 감싸진 코드까지) -->
<tr>
<td>번호</td>
<td><%= dto.getNum() %></td>
<td>작성자</td>
<td><%= dto.getName() %></td>
</tr>
<tr>
<td>작성일</td>
<td><%= dto.getPostdate() %></td>
<td>조회수</td>
<td><%= dto.getVisitcount() %></td>
</tr>
<tr>
<td>제목</td>
<td colspan="3"><%= dto.gettitle() %></td>
</tr>
<tr>
<td>내용</td>
<td colspan="3" height="100")>
<%= dto.getContent().replace("\\r\\n", "<br/>") %></td> <!-- 6. -->
</tr>
<tr>
<td colspan="4" align="center">
<!-- 7.(if문 코드 끝까지) -->
<%
if (session.getAttribute("UserId") != null
&& session.getAttribute("UserId").toString().equals(dto.getId())) {
%>
<button type="button"
onclick="location.href='Edit.jsp?num=<%= dto.getNum() %>';"> 수정하기</button>
<button type="button" onclick="deletePost();">삭제하기</button>
<%
}
%>
<button="button" onclick="location.href='List.jsp';">
목록 보기
</button>
</td>
</tr>
</table>
</form>
</body>
</html>
- 일련번호 매개변수를 받음
- DAO 객체를 생성한 후, 앞 절에서 작성한 두 메소드 호출
- 조회수를 1 증가시킴
- 게시물 가져오기를 실행
- 번호, 작성자, 제목 등 DTO 객체에 저장된 내용 출력
- replace( ) 메소드로 엔터키를 <br/> 태그로 변경 → 웹 브라우저상에서 줄바꿈 적용
- 수정, 삭제를 위한 버튼 출력 → 작성자 본인에게만 노출하기 위해 다음 두 조건을 만족할 때만 버튼이 보이도록 함
1) session 영역에 속성값이 있는가(=로그인한 상태인가)
2) 로그인(세션) 아이디와 DTO 객체에 저장된 아이디가 일치하는가(=작성자 본인인가)
List.jsp 파일 실행
(1) 1번 게시물을 3번, 6번 게시물을 2번 들어갔을 때, 조회수 정상적으로 찍힘
(2) 2번 게시물에 들어가봐도 상세 보기 페이지가 정상적으로 출력된다
반응형
'자바(JAVA) > JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)' 카테고리의 다른 글
JAVA/JSP 27. 모델1 방식의 회원제 게시판 만들기 - 게시글 삭제하기 (0) | 2024.01.10 |
---|---|
JAVA/JSP 26. 모델1 방식의 회원제 게시판 만들기 - 게시글 수정하기 (1) | 2024.01.05 |
JAVA/JSP 24. 모델1 방식의 회원제 게시판 만들기 - 게시판 게시글 쓰기 (1) | 2023.12.31 |
JAVA/JSP 23. 모델1 방식의 회원제 게시판 만들기 - 게시판 목록 페이지 (1) | 2023.12.30 |
JAVA/JSP 22. 모델1 방식의 회원제 게시판 만들기 - 프로젝트 구상, 모델1 구조와 모델2 구조(MVC 패턴) (0) | 2023.12.27 |