본문 바로가기

웹 개발 한걸음

[Servlet] 게시물 삭제 구현하기

 

** 이전에 JSP로 만들었던 코드를 이용해 이를 서블릿으로 구현해보았다. 

 

[JSP] 13강 Part2 - 게시글 삭제

본 포스팅은 정보 제공용이 아닌 유튜브 동빈나님의 JSP 게시판 만들기 강좌 13강을 바탕으로 보고 배운 것을 직접 정리해본 포스트 입니다. ** 간략 프로세스 view.jsp 삭제버튼-> deleteAction.jsp -> bbsD

egu99.tistory.com

  • 글의 삭제는 레코드의 완전 삭제가 아닌 이용불가 상태, 즉 bbsAvailable이 0인 상태로 업데이트 하는 식으로 수정하였다.
  • 따라서 수정과 삭제는 거의 흡사한 코드를 가졌다.
  • 이번에도 제 3자가 글을 지울 수 없게끔 하였다.

 

** deleteControl.java - doGet()

@WebServlet("/delete")
public class DeleteControl extends HttpServlet{

	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		int bbsID =0;
		
		//bbsID 전달 확인
		String bID = request.getParameter("bbsID");
		if(bID != null) 
			bbsID = Integer.parseInt(bID);
		
		//DAO준비
		BbsDAO bao = new BbsDAO();
		//인증을 위해 게시글 가져오기
		Bbs bbs = bao.getBbs(bbsID);
		
		//session 로그인 확인
		HttpSession session = request.getSession();
		String suserID = (String)session.getAttribute("userID");
		
		PrintWriter out = response.getWriter();
		
		//게시물 유효성 확인
		if(bbsID == 0 || bID == null) {
		
			out.println("<script>");
			out.println("alert('유효하지 않은 게시물입니다.');"); 
			out.println("location.href='bbs'");
			out.println("</script>");	
		//로그인 확인	
		}else if(suserID == null) {
			
			out.println("<script>");
			out.println("alert('로그인 하세요.');"); 
			out.println("location.href='login'");
			out.println("</script>");	
		//권한 확인	
		}else if(!bbs.getUserID().equals(suserID)) {
			
			out.println("<script>");
			out.println("alert('권한이 없습니다.');"); 
			out.println("location.href='bbs'");
			out.println("</script>");	
		//모두 okay시	
		} else {
				//삭제 메서드
				int result = bao.delete(bbsID);
				
				switch (result) {
				case 1:
					out.println("<script>");
					out.println("alert('글이 삭제되었습니다.');"); 
					out.println("location.href='bbs'");
					out.println("</script>");	
					break;

				case -1:
					out.println("<script>");
					out.println("alert('데이터 베이스 오류.');"); 
					out.println("location.href='bbs'");
					out.println("</script>");	
					break;
				}		
		}		
	}
}
  • view에서 삭제 버튼시 bbsID와 함께 이쪽으로 온다.
  • 1) 유효한 게시물인지?  - bbsID가 전달받지 못했거나 이용불가 게시물일 때 게시판으로
  • 2) 로그인 상태인지?- 세션에서 유저 정보가 없을 땐 로그인 페이지로.
  • 3) 권한이 있는지? - 글의 작성자와 로그인한 아이디가 다른 경우 메인 페이지로
  • 모두 okay라면 BbsDAO의 delete()를 통해 삭제를 시도한다.
  • 이 메서드의 반환값에 따라 알림과 이동을 해준다.
  • 이번엔 switch문으로 해보았다.

 

 


** BbsDAO - delete()

		//글 삭제하기
		public int delete(int bbsID) {
			
			String sql = "UPDATE BBS SET bbsAvailable = 0 where bbsID=?";
			try {
				
				PreparedStatement pst = conn.prepareStatement(sql);
				pst.setInt(1, bbsID);	
				return pst.executeUpdate();
				
			} catch (Exception e) {
				e.printStackTrace();
			}
			
			return -1;
		}

 

  • 기존의 삭제는 레코드를 완전히 삭제하였으나 available=0이 되어 이용이 불가한 게시글로 수정하는 쪽으로 수정하였다.
  • 레코드가 성공적으로 삭제처리가 되었다면 1을, 데이터베이스 오류는 -1을 반환한다.