게시글 상세 조회
01. list.jsp
- 리스트에 게시된 글의 제목을 클릭하면 작성된 글의 상세 보기로 넘어갈 수 있도록 ${ board.title } 을 <a></a> 태그로 감싼다.
- <a href=""> 속성에 경로 지정하면서 페이지에 대한 게시글을 구분할 수 있는 PK 값을 URL에 함께 넘긴다.
<a href="${ pageContext.request.contextPath }/board/view?no=${ board.no }">
<!-- 혹은 시퀀스를 활용해서 rowNum 컬럼이 있다면 rowNum으로 전체 게시글 중에 몇 번째 게시글인지 찾아와도 된다. -->
02. view.jsp
- 이 페이지와 연결 시킨다.
- 서블릿에서 NO 값을 받아서 NO에 해당하는 게시글 조회해서 데이터를 주면, 데이터를 받아서 view.jsp에서는 화면을 그려준다.
03. ViewServlet.java
- com > kh > mvc > board > controller 밑에 생성
- view.jsp 페이지로 forward를 위한 작업
- requst.getReqeustDispatcher("URL").forward(request, response);
- 요청을 Dispatcher를 통해서 URL에게 보내는데, forward를 가지고 요청, 응답 정보를 같이 보낸다.
- 게시글 조회할 때는 딱히 로그인 로직이 필요 없다고 간주, 작성하지 않고 진행
- no 값을 숫자로(정수 값 변수로) 읽어오자. (Interger 객체 활용 parseInt() 로 형변환)
- 사용자는 게시글을 누르고 들어오겠지만, 직접 사용자가 URL 작성해서 들어온다거나, 잘못 된 형식의 URL 입력 했을 경우 (해당하는 파라미터의 값이 없거나, 파라미터의 값이 숫자가 아니라면 500 에러 발생) 처리하는 로직 구현 고민해 볼 것
- 서블릿에서는 비즈니스 로직을 직접 처리하지 않으므로, BoardService service = new BoardService(); 객체를 만든다.
- 사용자가 보낸 값을 전달한다. HOW?
- service 객체에게 내가 정한 메소드 findBoardbyNo에게 no 값을 넘겨준다. 그러면 Board board 객체를 리턴하도록 한다.
- Board board객체는 reqeust 영역 객체에 Attribute로써 담아줘야 한다. 하나의 요청에 대한 결과를 객체로 보여주기 때문에 굳이 session 영역 객체일 필요가 없다.
04. BoardService.java
- findBoardbyNo() 메소드 생성
- SELECT 쿼리문을 활용할 부분
- Board로 리턴을 해야하기 때문에 board 객체 생성
- 데이터 베이스에 연결할 때는 dao를 통해서 작업하기 때문에, Connection 객체 생성하고
- dao에서 사용할 connection과 no를 같이 매개값으로 넘겨준다. 이 실행하는 메소드는 결과 값이 board 객체이다.
- close(connection); 작성
05. BoardDao.java
- findBoardbyNo() 메소드 생성
- PreparedStatment 객체 생성
- ResultSet 객체 생성
- SELECT 쿼리문 작성
- Connection 객체에서 쿼리문을 넘김으로써 pstmt를 얻어온다. 이 때 발생하는 것은 SQLException 처리 한다.
- 위치홀더에 해당하는 값을 넣어준다. setAttribute (위치홀더 순서, 매개값으로 전달받은 값)
- SELECT 쿼리문 실행 결과 값은 정수형으로 오기 때문에 ResultSet 객체에 담아준다.
- 검색 결과로 오는 것은 1건이다. WHY? NO PK 값을 가지고 SELECT 하고 있기 때문에 조회된 하나의 행의 값을 보드 객체를 만들어서 SET 해주면 된다.
try{
pstmt = connection.preparedStatement(query);
pstmt.setInt(1, no);
rs = pstmt.executeQuery();
// next()가 true이면 커서가 실제 데이터를 가르키므로 board 참조 변수에 Board 객체를 만들고 값을 set
if(rs.next()){
board = new Board();
// 조회할 때 사용하던 no 사용해도 되고
board.setNo(no);
// 혹은 쿼리문에 no를 찾으라고 줬던 컬럼명 사용해도 된다.
board.setNo(rs.getInt("NO");
// 등등 쿼리에 해당하는 값대로 다 SET
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(rs);
close(pstmt);
}
06. view.jsp
- 각 영역에 정보를 받아올 수 있도록 EL 구문 활용하여 코드 수정
'Programming > SERVER' 카테고리의 다른 글
DAY 129. MVC2 패턴 - 쿠키를 활용한 게시글 조회수 기능 (0) | 2021.12.25 |
---|---|
DAY 127. MVC2 패턴 - 댓글 기능 (0) | 2021.12.23 |
DAY 125. MVC2 패턴 - 게시글 삭제, 게시글 수정 (0) | 2021.12.21 |
DAY 124. MVC2 패턴 - 게시글 작성 (0) | 2021.12.20 |
DAY 123. MVC2 패턴 - 게시글 목록, 페이징 (0) | 2021.12.19 |