게시판 나머지 기능 추가..
‘조회수 1증가시키기’ 구현..
글보기를 할때 (BoardView) 증가시키자. 사실은 BoardDao의 getView안에서 같이 처리하는게 좋아.. 왜냐하면 transaction 처리 때문에 그래. 나중에 하고 우선 따로 처리해보자..
BoardView에서 조회수증가가 성공하면 글을 보게, 실패하면 메세지창 거쳐 리스트로 가게 처리.
package controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import board.model.BoardDao; import board.model.BoardDto; public class BoardView extends AbstractController { @Override public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) { int seq = Integer.parseInt(request.getParameter("seq")); BoardDao boardDao = new BoardDao(); //조회수1증가 Boolean result = boardDao.updateReadCount(seq); ModelAndView mav = new ModelAndView(); if(result) { //조회수1증가 잘됐으면.. BoardDto boardDto = boardDao.getView(seq); mav.setViewName("WEB-INF/view/content.jsp"); mav.addObject("boardDto", boardDto); } else { mav.setViewName("/WEB-INF/view/result.jsp"); mav.addObject("msg", seq+"번 게시물이 이미 삭제된 모양입니다."); mav.addObject("url", "BoardList.do"); } return mav; } }
BoardDao에 조회수증가 기능 구현.
public Boolean updateReadCount(int seq) { String sql = "UPDATE board SET " + " readcount = readcount+1 " + "WHERE seq = ? "; boolean result = false; getConnection(); try { st = cn.prepareStatement(sql); st.setInt(1, seq); if (st.executeUpdate() > 0) result = true; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { dbClose(); } return result; }
.
.
.
.
수정 구현
1. dispatcher-servlet.properties에 BoardUpdate.do 등록
#게시글 수정 폼 /BoardUpdate.do=controller.BoardUpdate
2. BoardUpdate구현
package controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import board.model.BoardDao; import board.model.BoardDto; public class BoardUpdate extends AbstractController { @Override public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) { int seq = Integer.parseInt(request.getParameter("seq")); BoardDao boardDao = new BoardDao(); BoardDto boardDto = boardDao.getView(seq); ModelAndView mav = new ModelAndView(); if (boardDto != null){ mav.setViewName("/WEB-INF/view/update.jsp"); mav.addObject("boardDto", boardDto); } else { mav.setViewName("/WEB-INF/view/result.jsp"); mav.addObject("msg", seq+"번 게시물이 이미 삭제되었나봅니다"); mav.addObject("url", "BoardList.do"); } return mav; } }
3. update.jsp구현 (insert.jsp복사해서 수정하면 편하겠지..)
수정을 위해서는 글번호를 가지고 있어야 하는데 보통 hidden으로 숨겨두기도 하는데, 그냥 화면에 보이게 하고 readonly하지..
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="BoardUpdateAction.do" method="post"> <table> <tr> <th>글번호</th> <td><input type="text" name = "seq" value= "${boardDto.seq}" readonly/></td> </tr> <tr> <th>제목</th> <td><input type="text" name = "title" value= "${boardDto.title}" /></td> </tr> <tr> <th>이름</th> <td><input type="text" name = "name" value= "${boardDto.name}"/></td> </tr> <tr> <th>비밀번호</th> <td><input type="password" name = "password" /><br/> 글 작성시 입력했던 비밀번호를 입력하세요</td> </tr> <tr> <th>내용</th> <td><textarea cols="50" rows="5" name = "content" >${boardDto.content}</textarea></td> </tr> <tr> <td colspan="2" aligh="center"> <input type="submit" value = "수정완료" /></td> </td> </tr> </table> </form> </body> </html>
.
.
수정 완료 클릭하면 수정되게..
1. dispatcher-servlet.properties에 BoardUpdateAction.do 등록
#게시판 글 수정 데이터를 DB에 저장 /BoardUpdateAction.do=controller.BoardUpdateAction
2. BoardUpdateAction구현 (BoardInsertAction 복사해서 수정해..)
package controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import board.model.BoardDao; import board.model.BoardDto; public class BoardUpdateAction extends AbstractController { @Override public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) { int seq = Integer.parseInt(request.getParameter("seq")); String title = request.getParameter("title"); String name = request.getParameter("name"); String password = request.getParameter("password"); String content = request.getParameter("content"); BoardDto boardDto = new BoardDto(); boardDto.setSeq(seq); boardDto.setTitle(title); boardDto.setName(name); boardDto.setPassword(password); boardDto.setContent(content); BoardDao boardDao = new BoardDao(); boolean result = boardDao.updateBoard(boardDto); ModelAndView mav = new ModelAndView(); mav.setViewName("/WEB-INF/view/result.jsp"); if (result == true) { //수정성공 mav.addObject("msg", seq+"번 글이 수정되었습니다."); mav.addObject("url", "BoardView.do?seq="+seq); } else { //일력실패 mav.addObject("msg", "글수정 실패"); mav.addObject("url", "javascript:history.back()"); } return mav; } }
3. BoardDao에 updateBoard 메서드 구현
public boolean updateBoard(BoardDto boardDto) { // TODO Auto-generated method stub String sql = "UPDATE board SET " + " title=?, name=?, content=? " + "WHERE seq=? AND password=? "; boolean result = false; try { getConnection(); st = cn.prepareStatement(sql); //오라클에 쿼리 먼저 던져놔. st.setString(1, boardDto.getTitle()); st.setString(2, boardDto.getName()); st.setString(3, boardDto.getContent()); st.setInt(4, boardDto.getSeq()); st.setString(5, boardDto.getPassword()); if (st.executeUpdate() > 0 ) result = true; //영향받은 레코드수 리턴 } catch (Exception e){ e.printStackTrace(); } finally { dbClose(); } return result; }
OK!
.
.
.
.
삭제 기능 구현
삭제버튼 누르면 비밀번호 입력확인 화면 나오고 삭제되게..
1. dispatcher-servlet.properties에 BoardDelete.do, BoardUpdateAction.do 등록
#게시판 글 삭제 /BoardDelete.do=controller.BoardDelete #글 DB에서 삭제 /BoardDeleteAction.do=controller.BoardDeleteAction
2. BoardDelete (seq가지고 비밀번호확인창띄워)
package controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class BoardDelete extends AbstractController { @Override public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) { int seq = Integer.parseInt(request.getParameter("seq")); ModelAndView mav = new ModelAndView(); mav.setViewName("/WEB-INF/view/delete.jsp"); mav.addObject("seq", seq); return mav; } }
3. delete.jsp (비번넣고 삭제버튼 누르면 삭제되게 BoardUpdateAction.do호출)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="BoardDeleteAction.do" method="post"> <table> <tr> <th>글 번호</th> <td><input type="text" name = "seq" value='${seq}' readonly /></td> </tr> <tr> <th>비밀번호</th> <td><input type="password" name = "password" /><br/> 글 작성시 입력했던 비밀번호를 입력하세요</td> </tr> <tr> <td colspan="2" align="center"> <input value = "삭제" type="submit" /> </td> </tr> </table> </form> </body> </html>
4. BoardDeleteAction (DB에서 삭제)
package controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import board.model.BoardDao; import board.model.BoardDto; public class BoardDeleteAction extends AbstractController { @Override public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) { int seq = Integer.parseInt(request.getParameter("seq")); String password = request.getParameter("password"); BoardDao boardDao = new BoardDao(); ModelAndView mav = new ModelAndView(); mav.setViewName("/WEB-INF/view/result.jsp"); if( boardDao.isView(seq) ) { //글이 존재하면 BoardDto boardDto = new BoardDto(); boardDto.setSeq(seq); boardDto.setPassword(password); boolean result = boardDao.deleteBoard(boardDto); if (result == true){ mav.addObject("msg", seq+"번 글이 삭제되었습니다"); mav.addObject("url", "BoardList.do"); } else { mav.addObject("msg", "비밀번호가 틀린듯"); mav.addObject("url", "javascript:history.back()"); } } else { //글이 존재하지 않으면 mav.addObject("msg", seq+"번 글이 존재하지 않습니다."); mav.addObject("url", "BoardList.do"); } return mav; } }
5. BoardDao 메서드구현( isView : 글이 존재하는지, deleteBoard : DB에서 삭제
public Boolean isView(int seq) { Boolean result =false; String sql = "SELECT * " + "FROM board " + "WHERE seq=? "; try { getConnection(); st = cn.prepareStatement(sql); st.setInt(1, seq); rs = st.executeQuery(); if(rs.next()){ result = true; } } catch (Exception e) { e.printStackTrace(); } finally { dbClose(); } return result; } public boolean deleteBoard(BoardDto boardDto) { Boolean result = false; String sql = "DELETE FROM board " + "WHERE seq=? AND password=? "; try { getConnection(); st = cn.prepareStatement(sql); st.setInt(1, boardDto.getSeq()); st.setString(2, boardDto.getPassword()); if(st.executeUpdate() > 0) result = true; } catch (Exception e) { e.printStackTrace(); } finally { dbClose(); } return result; } }
.
.
.
.
.
.
상세보기의 개행처리
public BoardDto getView(int seq){ BoardDto boardDto = null; String sql = "SELECT seq, title, name, writeday, readcount, content " + "FROM board " + "WHERE seq = ? "; try { getConnection(); st = cn.prepareStatement(sql); st.setInt(1, seq); rs = st.executeQuery(); if(rs.next()){ boardDto = new BoardDto(); boardDto.setSeq(rs.getInt("seq")); boardDto.setTitle(rs.getString("title")); boardDto.setName(rs.getString("name")); boardDto.setWriteday(rs.getString("writeday")); boardDto.setReadcount(rs.getInt("readcount")); // boardDto.setContent(rs.getString("content")); boardDto.setContent(rs.getString("content").replaceAll("\r\n", "<br/>")); } } catch (Exception e) { // TODO: handle exception } finally { dbClose(); } return boardDto; }
.
.
.
.
'Java, Spring > 10일' 카테고리의 다른 글
10일차 1 - context.xml에 Resouce 등록, Deploy(서버환경에서 띄우기) (0) | 2012.09.20 |
---|---|
10일차 2 - 오라클서비스, ObjectAid UML, SVN (0) | 2012.09.20 |