JSP_5강_5_게시판_상세조회에서 글 삭제

열라뽕따히·2024년 3월 20일

JSP

목록 보기
27/43

board_content.jsp에서 미리 지정해준 board_delete.jsp 파일을 생성하자(이전에는 서블릿을 따로 만들어주었으나 지금은 jsp파일로 생성!)

view -> board_delete.jsp 생성


=============================코드=============================

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
 <%
 	int board_no = Integer.parseInt(request.getParameter("no").trim());
 %>
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<div align = "center">
		<hr width = "30%" color = "gray">
			<h3>BOARD 테이블 게시글 삭제 폼 페이지</h3>
		<hr width = "30%" color = "gray">
		<br/><br/>
		
		<form method = "post" action = "<%=request.getContextPath() %>/delete_ok.go">
			<input type = "hidden" name = "no" value = "<%=board_no %>">
			<table border = '1' width = "400">
				<tr>
					<th>삭제할 게시글 비밀번호</th>
					<td>
						<input type = "password" name = "pwd">
					</td>
				</tr>
				
				<tr>
					<td colspan = "2" align = "center">
						<input type = "submit" value = "글삭제">&nbsp;&nbsp;&nbsp;
						<input type = "reset" value = "다시 작성">
					</td>
				</tr>
				
			</table>
		</form>
	
	</div>

</body>
</html>



삭제 버튼을 클릭했을 때 DB에 저장 될 서블릿을 만들자!

delete_ok.go 서블릿 생성!



=============================코드=============================

package com.board.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.board.model.BoardDAO;


@WebServlet("/delete_ok.go")
public class DeleteOkServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
   
    public DeleteOkServlet() {
        super();
       
    }


	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 삭제 폼 페이지에서 넘어온 글 번호에 해당하는 게시글을 board 테이블에서 삭제하는 비즈니스 로직
		
		response.setContentType("text/html; charset = UTF-8");
		
		String board_pwd = request.getParameter("pwd").trim();
		int board_no = Integer.parseInt( request.getParameter("no").trim());
		
		BoardDAO dao = BoardDAO.getInstance();
		dao.deleteBoard(board_no, board_pwd);



BoardDAO에

deleteBoard() 메서드 생성


=============================코드=============================

// board 테이블에서 게시글 번호에 해당하는 게시글을 삭제하는 메서드
	public int deleteBoard(int no, String pwd) {
		int result = 0;
		
		try {
			openConn();
			
			sql = "select * from board where board_no = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, no);
			
			rs = pstmt.executeQuery();  // 1개의 정보가 나옴
			
			if(rs.next()) {
				if(pwd.equals(rs.getString("board_pwd"))) {  // 처음에 작성했을 때 비번(board_pwd)과 폼에서 입력한 pwd가 같을경우
					sql = "delete from board where board_no = ?";
					pstmt = con.prepareStatement(sql);
					pstmt.setInt(1, no);
					
					result = pstmt.executeUpdate();
				}else {
					// 비밀번호가 다른 경우
					result = -1;
				}
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
			
		} finally {
			closeConn(rs, pstmt, con);
		}
		return result;
	}



다시 서블릿으로 가자


=============================코드=============================

package com.board.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.board.model.BoardDAO;


@WebServlet("/delete_ok.go")
public class DeleteOkServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
   
    public DeleteOkServlet() {
        super();
       
    }


	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 삭제 폼 페이지에서 넘어온 글 번호에 해당하는 게시글을 board 테이블에서 삭제하는 비즈니스 로직
		
		response.setContentType("text/html; charset = UTF-8");
		
		String board_pwd = request.getParameter("pwd").trim();
		int board_no = Integer.parseInt( request.getParameter("no").trim());
		
		BoardDAO dao = BoardDAO.getInstance();
// --------------------------여기서부터 작성--------------------------
		int check = dao.deleteBoard(board_no, board_pwd);
		
		PrintWriter out = response.getWriter();
		
		if(check > 0) {
			dao.updateSequence(board_no);  // 번호 순서대로 정렬하기 위해
			out.println("<script>");
			out.println("alert('게시글 삭제 성공!!')");
			out.println("location.href='list.go'");
			out.println("</script>");
			
		}else if(check == -1) {
			// 비밀번호가 틀린 경우
			out.println("<script>");
			out.println("alert('비밀번호가 틀립니다. 확인 해주세요!!')");
			out.println("history.back()");
			out.println("</script>");
		}else {
			out.println("<script>");
			out.println("alert('게시글 삭제 실패....')");
			out.println("history.back()");
			out.println("</script>");
		}
	}

}



BoardDAO로 다시 가서 중간의 글이 삭제될 시 번호가 순서대로 정렬될 수 있는

updateSequence() 메서드 만들자

// board 테이블에서 중간에 게시글이 삭제되는 경우 게시글 번호를 재정렬하는 메서드
	public void updateSequence(int no) {
		
		try {
			openConn();
			
			sql = "update board set board_no = board_no -1 where board_no > ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, no);
			pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
			
		} finally {
			closeConn(pstmt, con);
		}
	}




main.jsp에서 실행


=============================실행=============================

확인 클릭

글삭제 클릭!

확인

삭제된 것을 확인할 수 있음!

0개의 댓글