자바 웹 개발자가 될거야/JSP

[JSP] 목록 글 클릭하여 게시글 본문보기

whitz 2021. 12. 21. 12:52

< 게시글 본문보기 >

 

① notice.jsp 수정

 

- 글제목 클릭하면 글 본문을 볼 수 있도록 notice.jsp 안 게시글 목록에 contents.jsp로 링크걸어줌

 

<tr>
	<td><%=bdto.getNum()%></td>
	<td class="left">
		<a href="contents.jsp?num=<%=bdto.getNum()%>&pageNum=<%=pageNum%>"><%=bdto.getSubject() %></a>
	</td>
    <td><%=bdto.getName() %></td>
    <td><%=bdto.getDate()%></td>
    <td><%=bdto.getReadcount() %></td>
</tr>

// notice.jsp

 

- &pageNum=<%pageNum%>

  · 뒤로가기 눌렀을 때 해당 페이지에 머무를 수 있도록

  · 3페이지의 글 중 하나 보다가 뒤로가기 누르면 1페이지로 돌아가는게 아니라 3페이지로

 

 

② contents.jsp

 

- 새로 만든 contents.jsp에 boardWrite.jsp 코드 전부 복붙한 후 <h1> 바꿔줌

<h1>글 본문 보기 페이지</h1>

<%
	// 전달된 파라미터값 저장(num, pageNum)
	int num = Integer.parseInt(request.getParameter("num"));
	String pageNum = request.getParameter("pageNum");
	
	// DAO 객체 생성
	BoardDAO bdao = new BoardDAO();

	// 조회수 1증가 - updateReadcount();
	bdao.updateReadcount(num);

	// 기존의 글정보를 가져오기
	BoardDTO bdto = bdao.getBoard(num);

%>

<form method="post">
<table id="notice">
<tr><th class="tno" colspan="5">ITWILL 게시판</th></tr>

	<tr>
		<td colspan="2">글쓴이 : </td>
		<td class="left" colspan="3"><input type="text" name="name" value="<%=bdto.getName()%>"></td>
	</tr>
	
	<tr>
		<td colspan="2">글 제목 : </td>
		<td class="left" colspan="3"><input type="text" name="subject" value="<%=bdto.getSubject()%>"></td>
	</tr>
	
	<tr>
		<td colspan="2">글 내용 : </td>
		<td class="left" colspan="3">
			<textarea rows="10" cols="20" name="content"><%=bdto.getContent() %></textarea>
		</td>
	</tr>
  
</table>

// contents.jsp

 

- num은 DB로 갈거니까 int형으로 바꿔주고 pageNum은 DB로 안가니까 String 형태 그대로 저장

- DB 테이블에 조회수 컬럼을 만들어놨다시피 본문 보기 페이지로 들어가면 조회수가 1증가해야함

  · updateReadcount() 메서드 생성

- 본문을 보여줘야하니까 DB에 저장된 게시글 들고와서 페이지로 보여줌

- 본문 보여주는 건 게시글의 고유한 num으로 구분

- 본문에서는 비밀번호를 삭제했고 글쓴이와 글제목을 value 속성을 이용하여 dbto.get~ 내용 들고옴

 

 

③ updateReadcount(num) 메서드

 

- BoardDAO.java에 updateReadcount(num) 메서드를 생성한다

 

// updateReadcount(num)
	public void updateReadcount(int num) {
		try {
        	// 1.2 디비연결
			con = getCon();
			//3. sql 구문 & pstmt 객체
			// 조회수(readcount)를 기존값에서 1증가(update)
			sql = "update itwill_board set readcount=readcount+1 where num=?";
			pstmt = con.prepareStatement(sql);
			
			// ?
			pstmt.setInt(1, num);
			
			// 4. sql 실행
			pstmt.executeUpdate();
			
			System.out.println("DAO : 조회수 1증가");
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			closeDB();
		}
	}
// updateReadcount(num) 끝

// BoardDAO.java

 

- sql의 수식계산 특징을 이용하여 조회수를 증가시킬 수 있다.

  · readcount = readcount + 1 

 

 

④ getBoard(num) 메서드 생성

 

- 게시글 번호( num ) 조건에 맞는 게시글 정보를 DB에서 들고오는 메서드

 

// getBoard(num)
	public BoardDTO getBoard(int num) {
		BoardDTO bdto = null;
		// 1.2 디비연결
		try {
			con = getCon();
			
			// 3. sql 작성(select) & pstmt 객체 생성
			sql = "select * from itwill_board where num=?";
			pstmt = con.prepareStatement(sql);
			// ?
			pstmt.setInt(1, num);
			// 4. sql 실행
			rs = pstmt.executeQuery();
			
			// 5. 데이터처리
			if(rs.next()) {
				bdto = new BoardDTO();
				
				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.setNum(rs.getInt("num"));
				bdto.setPass(rs.getString("pass"));
				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"));
			
			} // if
			
			System.out.println("DAO : 글정보 저장완료 !");
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			closeDB();
		}		
		
		return bdto;
	}
	
// getBoard(num) 끝

// BoardDAO.java