이번에는 게시글 내용을 보는 view.jsp를 만들어 보겠습니다.

우선 코드를 보기전에 내용을 보는 흐름을 보고가겠습니다.

게시판 목록에서 클릭한 게시물의 내용을 봐야하기 때문에 어떤 게시물인지 판별하는 방법이 있어야합니다.

그 방법은 바로 list.jsp에서 찾았던 글번호의 정보를 넘겨주면 그 글번호의 내용들을 출력하면 됩니다.

그러기 위해 list.jsp를 약간 수정하겠습니다.


list.jsp 에서 수정할 부분

<td align="left"><%=title %></td>

이 title을 출력하는 부분을

<td align="left"><a href="view.jsp?idx=<%=idx%>"><%=title %></td>

제목에 링크를 거는 href 태그를 입력합니다. 

여기서 링크를 거는 주소를 잘보시면 view.jsp?idx=<%=idx%> 가 있는데

Get방식의 방법입니다. 주소뒤에 ? 를 붙인뒤 변수명=변수값 을 같이 써주면 그 정보가 해당 주소에 실려 가게되있습니다.


자 이제 데이터도 보냈으니 view.jsp 파일을 생성합니다. 그리고 기본틀 코드를 입력합니다.


<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
 <title>게시판</title>
 </head>
 <body>
<table>
  <tr>
   <td>
    <table width="100%" cellpadding="0" cellspacing="0" border="0">
     <tr style="background:url('img/table_mid.gif') repeat-x; text-align:center;">
      <td width="5"><img src="img/table_left.gif" width="5" height="30" /></td>
      <td>내 용</td>
      <td width="5"><img src="img/table_right.gif" width="5" height="30" /></td>
     </tr>
    </table>
   <table width="413">
     <tr>
      <td width="0">&nbsp;</td>
      <td align="center" width="76">글번호</td>
      <td width="319"></td>
      <td width="0">&nbsp;</td>
     </tr>
	 <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr>
    <tr>
      <td width="0">&nbsp;</td>
      <td align="center" width="76">조회수</td>
      <td width="319"></td>
      <td width="0">&nbsp;</td>
     </tr>
	 <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr>
    <tr>
      <td width="0">&nbsp;</td>
      <td align="center" width="76">이름</td>
      <td width="319"></td>
      <td width="0">&nbsp;</td>
     </tr>
     <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr>
    <tr>
      <td width="0">&nbsp;</td>
      <td align="center" width="76">작성일</td>
      <td width="319"></td>
      <td width="0">&nbsp;</td>
     </tr>
      <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr>
    <tr>
      <td width="0">&nbsp;</td>
      <td align="center" width="76">제목</td>
      <td width="319"></td>
      <td width="0">&nbsp;</td>
     </tr>
     <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr>
                <tr>
      <td width="0">&nbsp;</td>
                   <td width="399" colspan="2" height="200">
                </tr>
     <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr>
     <tr height="1" bgcolor="#82B5DF"><td colspan="4" width="407"></td></tr>
     <tr align="center">
      <td width="0">&nbsp;</td>
      <td colspan="2" width="399"><input type=button value="글쓰기">
	<input type=button value="답글">
	<input type=button value="목록">
	<input type=button value="수정">
	<input type=button value="삭제">
      <td width="0">&nbsp;</td>
     </tr>
    </table>
   </td>
  </tr>
 </table>
</body>
 </html>


실행을 해보면


현재는 데이터를 연결을 안시켜놔서 아무것도 출력되지 않네요


자 이제 추가시켜야 될 코드들을 생각해보면

1. list.jsp에서 보낸 idx값을 받아야 합니다.

2. 데이터베이스를 연결하고 받아온 idx값이 있는 데이터베이스값을 가져와서 출력을 합니다.

3. 그리고 게시물을 봤을때 조회수가 1이 증가하고 그 조회수가 데이터베이스에 수정되야합니다.


크게 이렇게 3가지 정도라고 볼 수 있겠네요.응응


그럼 코드로 보겠습니다. 

<%@ page import="java.sql.*"%>

<%

	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

	String url = "jdbc:odbc:board2";

	String id = "";

	String pass = "";

	int idx = Integer.parseInt(request.getParameter("idx"));
try { Connection conn = DriverManager.getConnection(url,id,pass); Statement stmt = conn.createStatement(); String sql = "SELECT USERNAME, TITLE, MEMO, TIME, HIT FROM board WHERE NUM=" + idx; ResultSet rs = stmt.executeQuery(sql); if(rs.next()){ String name = rs.getString(1); String title = rs.getString(2); String memo = rs.getString(3); String time = rs.getString(4); int hit = rs.getInt(5); hit++; %>

이곳에서 특이한 곳은

int idx = Integer.parseInt(request.getParameter("idx"));
hit++;

이렇게 2개 정도 라고 생각됩니다.


먼저 int idx = Integer.parseInt(request.getParameter("idx")); 이곳을 보면

view.jsp에서 get방식으로 idx값을 보낸것을 기억하시길 바랍니다. 그 변수가 getParameter("idx") 이곳에 들어간거고

그 값을 idx에 넣은겁니다. 하지만 이렇게 get방식이든 post방식이든 넘어오게되면 데이터타입이 String이 됩니다.

그래서 형변환으로 int형으로 변환하는 Integer.paseInt를 사용한거랍니다.


그리고 list와는 달리 while문이 아닌 if문인 이유는 이곳에선 단 한개의 게시물정보만 출력하기때문입니다.


다음 hit++ 은 데이터베이스에서 idx값을 기준으로 검색해온 hit값을 +1 해준것인데 데이터베이스에는 현재

hit은 0이기 때문에 게시글이 조회되자마자 1이 되야 하므로 출력하기전에 +1을 시켰습니다.

참고로 현재 데이터베이스에는 hit이 0입니다.


<table width="413">
     <tr>
      <td width="0">&nbsp;</td>
      <td align="center" width="76">글번호</td>
      <td width="319"><%=idx%></td>
      <td width="0">&nbsp;</td>
     </tr>
	 <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr>
    <tr>
      <td width="0">&nbsp;</td>
      <td align="center" width="76">조회수</td>
      <td width="319"><%=hit%></td>
      <td width="0">&nbsp;</td>
     </tr>
	 <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr>
    <tr>
      <td width="0">&nbsp;</td>
      <td align="center" width="76">이름</td>
      <td width="319"><%=name%></td>
      <td width="0">&nbsp;</td>
     </tr>
     <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr>
    <tr>
      <td width="0">&nbsp;</td>
      <td align="center" width="76">작성일</td>
      <td width="319"><%=time%></td>
      <td width="0">&nbsp;</td>
     </tr>
      <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr>
    <tr>
      <td width="0">&nbsp;</td>
      <td align="center" width="76">제목</td>
      <td width="319"><%=title%></td>
      <td width="0">&nbsp;</td>
     </tr>
     <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr>
                <tr>
      <td width="0"></td>
                   <td width="399" colspan="2" height="200"><%=memo %>

</tr>

이 곳을 보시면 중간 중간 <%=name%> 이런식으로 입력되있는게 보이는데 이것이 위에서 초기화한 변수값을 출력시키는 부분입니다. 해당되는 부분에 해당 변수를 입력해놓습니다.


<% 
 	sql = "UPDATE board SET HIT=" + hit + " where NUM=" +idx;
 	stmt.executeUpdate(sql);
 	rs.close();
 	stmt.close();
 	conn.close();
	 	} 
	}catch(SQLException e) {
}

%>

그 다음 증가시킨 조회수 값을 데이터베이스에 넣기 위한 sql문을 만들고 실행을 합니다.

값을 수정하는 것이기 때문에 Update문을 사용합니다.



<input type=button value="글쓰기" OnClick="window.location='write.jsp'">

<input type=button value="답글">

<input type=button value="목록" OnClick="window.location='list.jsp'">

<input type=button value="수정">

<input type=button value="삭제">

현재 구현해놓은 글쓰기와 목록에는 링크를 연결시켜 놓습니다.


이제 list.jsp를 실행시켜서 잘 보이는지 보겠습니다.


전과 다르게 제목부분에 링크가 걸린 표시가 나는군요


위쪽에 주소에 ?idx=1이라는 값을 확인 할수 있고 조회수가 1이 됐네요

Hit값이 1이 증가되게 바뀌었습니다.



다음은 view.jsp의 전체 코드입니다.

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ page import="java.sql.*"%> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:board2"; String id = ""; String pass = ""; int idx = Integer.parseInt(request.getParameter("idx")); try { Connection conn = DriverManager.getConnection(url,id,pass); Statement stmt = conn.createStatement(); String sql = "SELECT USERNAME, TITLE, MEMO, TIME, HIT FROM board WHERE NUM=" + idx; ResultSet rs = stmt.executeQuery(sql); if(rs.next()){ String name = rs.getString(1); String title = rs.getString(2); String memo = rs.getString(3); String time = rs.getString(4); int hit = rs.getInt(5); hit++; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>게시판</title> </head> <body> <table> <tr> <td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr style="background:url('img/table_mid.gif') repeat-x; text-align:center;"> <td width="5"><img src="img/table_left.gif" width="5" height="30" /></td> <td>내 용</td> <td width="5"><img src="img/table_right.gif" width="5" height="30" /></td> </tr> </table> <table width="413"> <tr> <td width="0">&nbsp;</td> <td align="center" width="76">글번호</td> <td width="319"><%=idx%></td> <td width="0">&nbsp;</td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0">&nbsp;</td> <td align="center" width="76">조회수</td> <td width="319"><%=hit%></td> <td width="0">&nbsp;</td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0">&nbsp;</td> <td align="center" width="76">이름</td> <td width="319"><%=name%></td> <td width="0">&nbsp;</td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0">&nbsp;</td> <td align="center" width="76">작성일</td> <td width="319"><%=time%></td> <td width="0">&nbsp;</td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0">&nbsp;</td> <td align="center" width="76">제목</td> <td width="319"><%=title%></td> <td width="0">&nbsp;</td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"></td> <td width="399" colspan="2" height="200"><%=memo %> </tr> <% sql = "UPDATE board SET HIT=" + hit + " where NUM=" +idx; stmt.executeUpdate(sql); rs.close(); stmt.close(); conn.close(); } }catch(SQLException e) { } %> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr height="1" bgcolor="#82B5DF"><td colspan="4" width="407"></td></tr> <tr align="center"> <td width="0">&nbsp;</td> <td colspan="2" width="399"><input type=button value="글쓰기" OnClick="window.location='write.jsp'"> <input type=button value="답글"> <input type=button value="목록" OnClick="window.location='list.jsp'"> <input type=button value="수정"> <input type=button value="삭제"> <td width="0">&nbsp;</td> </tr> </table> </td> </tr> </table> </body>

</html>



이미지출처 : 판다의 이상한 블로그(http://ssppmm.tistory.com/)


Posted by 세이나린
,