이번에는 게시글 내용을 보는 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"> </td> <td align="center" width="76">글번호</td> <td width="319"></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">조회수</td> <td width="319"></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">이름</td> <td width="319"></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">작성일</td> <td width="319"></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">제목</td> <td width="319"></td> <td width="0"> </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"> </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"> </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"> </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"> </td> <td align="center" width="76">글번호</td> <td width="319"><%=idx%></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">조회수</td> <td width="319"><%=hit%></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">이름</td> <td width="319"><%=name%></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">작성일</td> <td width="319"><%=time%></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">제목</td> <td width="319"><%=title%></td> <td width="0"> </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"> </td> <td align="center" width="76">글번호</td> <td width="319"><%=idx%></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">조회수</td> <td width="319"><%=hit%></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">이름</td> <td width="319"><%=name%></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">작성일</td> <td width="319"><%=time%></td> <td width="0"> </td> </tr> <tr height="1" bgcolor="#dddddd"><td colspan="4" width="407"></td></tr> <tr> <td width="0"> </td> <td align="center" width="76">제목</td> <td width="319"><%=title%></td> <td width="0"> </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"> </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"> </td> </tr> </table> </td> </tr> </table> </body>
</html>
이미지출처 : 판다의 이상한 블로그(http://ssppmm.tistory.com/)
'Programming > JSP - 게시판만들기' 카테고리의 다른 글
[JSP] JSP로 게시판 만들기 - 6(글수정) (22) | 2013.01.24 |
---|---|
[JSP] JSP로 게시판 만들기 - 5(글삭제) (7) | 2013.01.24 |
[JSP] JSP로 게시판 만들기 - 3(글쓰기) (31) | 2013.01.23 |
[JSP] JSP로 게시판 만들기 - 2(게시판 목록) (87) | 2013.01.22 |
[JSP] JSP로 게시판 만들기 - 1(구상, 준비) (7) | 2013.01.21 |