ITWILL학원 : 29강 JSP기초 BY 정규태강사 1. 순서
content.jsp 생성
boardDAO.java에 updateReadCount(int bno)메서드 생성
boardDAO.java에 getBoard(int bno)메서드 생성
글수정할 수 있는 updateForm.jsp 생성
글수정할 수 있는 updatePro.jsp 생성
boardDAO.java에 updateBoard(bb)메서드 생성
2. content.jsp 생성 글목록에서 제목을 눌렀을때 컨텐츠를 볼 수 있게 만드는 페이지이다.
목록으로 되돌아가는 버튼 만들때 주의점
location.href=boardList.jsp
만 하면 5페이지보고있다가 다시 1페이지로 돌아가버린다
이때 historyback하면 조회수가 올라가지않는다.
따라서 pageNum을 가져와서 사용하면된다
location.href=boardList.jsp?pageNum=<%=pageNum%>
으로 해줘야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 <% int bno = Integer.parseInt(request.getParameter("bno" ));String pageNum = request.getParameter("pageNum" ); BoardDAO bdao = new BoardDAO(); bdao.updateReadCount(bno); BoardBean bb = bdao.getBoard(bno); %> <fieldset> <legend>글 내용 보기</legend> <table border="solid,1px" > <tr> <th>글번호</th> <td><%=bno%></td> <th>조회수</th> <td><%=bb.getReadcount()%></td> </tr> <tr> <th>작성자</th> <td><%=bb.getName() %></td> <th>작성일</th> <td><%=bb.getDate() %></td> </tr> <tr> <th>제목</th> <td colspan="3"><%=bb.getSubject() %></td> </tr> <tr> <th>첨부파일</th> <td colspan="3"><%=bb.getFile() %></td> </tr> <tr> <th>내용</th> <td colspan="3" height="300px"><%=bb.getContent() %></td> </tr> <tr> <td colspan="4" style="text-align:center" > <input type="button" value="글수정" class ="btn" onclick="location.href='updateForm.jsp?bno=<%=bb.getBno()%>&pageNum=<%=pageNum%>'" > <input type="button" value="글삭제" class ="btn" > <input type="button" value="답글쓰기" class ="btn" > <input type="button" value="목록으로" class ="btn" onclick="location.href='boardList.jsp?pageNum=<%=pageNum%>'" > <!-- location.href='boardList.jsp만 하면 5페이지보고있다가 다시 1페이지로 돌아가버린다 이때 historyback하면 조회수가 올라가지않는다. 따라서 pageNum을 가져와서 사용하면된다 --> </td> </tr> </table> </fieldset>
3. boardDAO.java에 updateReadCount(int bno)메서드 생성 조회수 올리는 메서드를 생성하자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public void updateReadCount (int bno) { try { getCon(); sql = "update itwill_board set readcount=readcount+1 where bno=?" ; pstmt = con.prepareStatement(sql); pstmt.setInt(1 , bno); pstmt.executeUpdate(); System.out.println("조회수 1증가 완료" ); } catch (Exception e) { System.out.println("조회수 1증가 실패" ); e.printStackTrace(); } finally { closeDB(); } }
4. boardDAO.java에 getBoard(int bno)메서드 생성 글 내용을 다 가져와서 오는 메서드를 만들어보자 이는 글제목을 클릭시 화면에 내용을 보여줄때 사용된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 public BoardBean getBoard (int bno) { BoardBean bb = new BoardBean(); try { getCon(); sql = "select * from itwill_board where bno=?" ; pstmt = con.prepareStatement(sql); pstmt.setInt(1 , bno); rs = pstmt.executeQuery(); if (rs.next()){ bb.setBno(rs.getInt("bno" )); bb.setContent(rs.getString("content" )); bb.setDate(rs.getDate("date" )); bb.setFile(rs.getString("file" )); bb.setIp(rs.getString("ip" )); bb.setName(rs.getString("name" )); bb.setPw(rs.getString("pw" )); bb.setRe_lev(rs.getInt("re_lev" )); bb.setRe_ref(rs.getInt("re_ref" )); bb.setRe_seq(rs.getInt("re_seq" )); bb.setReadcount(rs.getInt("readcount" )); bb.setSubject(rs.getString("subject" )); } } catch (Exception e) { e.printStackTrace(); } finally { closeDB(); } return bb; }
강사님코드
BoardBean객체를 언제 생성하는 지가 내 코드와 달랐다. BoardBean객체를 미리 생성할 필요가 없었다.
try catch로 예외가 발생하거나, rs에 데이터가 없는 경우에는 객체를 생성할 필요가 없기 때문이다.
글정보 저장완료 후 리턴값 bb정보를 습관적으로 확인하자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 public BoardBean getBoard (int bno) { BoardBean bb = null ; try { getCon(); sql = "select * from itwill_board where bno=?" ; pstmt = con.prepareStatement(sql); pstmt.setInt(1 , bno); rs = pstmt.executeQuery(); if (rs.next()){ bb = new BoardBean(); bb.setBno(rs.getInt("bno" )); (중략) bb.setSubject(rs.getString("subject" )); } System.out.println("해당 글 저장 완료" ); System.out.println(bb); } catch (Exception e) { e.printStackTrace(); } finally { closeDB(); } return bb; }
글을 수정할수있는 페이지를 만들어보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <% int bno = Integer.parseInt(request.getParameter("bno" ));String pageNum = request.getParameter("pageNum" ); BoardDAO bdao = new BoardDAO(); BoardBean bb = bdao.getBoard(bno); %> <fieldset> <legend>게시판 글쓰기</legend> <form action="updatePro.jsp?pageNum=<%=pageNum %>" method="post" name="fr" > <!-- 인풋 히튼타입 : 화면에는 보이지않지만 데이터 저장 및 전달이 가능해서 데이터 이동용으로 주로 사용 --> <input type="hidden" name="bno" value="<%=bb.getBno() %>" > 글쓴이 : <input type="text" name="name" required value="<%=bb.getName() %>" ><br> 비밀번호 : <input type="password" name="pw" required ><br> 제목 : <input type="text" name="subject" required value="<%=bb.getSubject() %>" ><br> 내용 : <br> <textarea rows="10" cols="35" name="content" placeholder="여기에 작성해주세요" required> <%=bb.getContent() %></textarea><br> <input type="submit" value="수정하기" class ="btn" > <button type="reset" class="btn">초기화</button> <input type="button" value="목록으로" class ="btn" onclick="location.href='boardList.jsp'" > </form> </fieldset>
6. updatePro.jsp생성 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <% request.setCharacterEncoding("UTF-8" ); String pageNum = request.getParameter("pageNum" ); %> <jsp:useBean id="bb" class="com.itwillbs.board.BoardBean"></jsp:useBean> <jsp:setProperty property="*" name="bb" /> <% BoardDAO bdao = new BoardDAO(); int result = bdao.updateBoard(bb);if ( result == 1 ){ %> <script type="text/javascript" > alert("글 수정 완료!" ); location.href="boardList.jsp?pageNum=<%=pageNum%>" ; </script> <% }else if (result == 0 ){ %> <script type="text/javascript" > alert("비번이 일치하지않습니다" ); history.back(); </script> <% }else { %> <script type="text/javascript" > alert("존재하지 않는 글입니다" ); history.back(); </script> <% } %>
7. boardDAO.java에 updateBoard(bb)메서드 생성 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 public int updateBoard (BoardBean bb) { int result = 0 ; try { getCon(); System.out.println("디비연결완료" ); sql = "select pw from itiwill_board where bno=?" ; pstmt = con.prepareStatement(sql); System.out.println("pstmt 객체생성완료" ); pstmt.setInt(1 , bb.getBno()); rs = pstmt.executeQuery(); System.out.println("pstmt 실행" ); if (rs.next()){ if (bb.getPw().equals(rs.getString("pw" ))){ sql="update itwill_board set name=?, subject=?, content=? where bno=?" ; pstmt = con.prepareStatement(sql); pstmt.setString(1 , bb.getName()); pstmt.setString(2 , bb.getSubject()); pstmt.setString(3 , bb.getContent()); pstmt.setInt(4 , bb.getBno()); pstmt.executeUpdate(); System.out.println("글수정완료 - 비번일치" ); result =1 ; }else { System.out.println("글수정실패 - 비번불일치" ); result = 0 ; } }else { System.out.println("글수정실패 - 해당글없음" ); result = -1 ; } } catch (Exception e) { e.printStackTrace(); } finally { closeDB(); } return result; }