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 = "글삭제">
<input type = "reset" value = "다시 작성">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
삭제 버튼을 클릭했을 때 DB에 저장 될 서블릿을 만들자!
=============================코드=============================
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에
=============================코드=============================
// 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로 다시 가서 중간의 글이 삭제될 시 번호가 순서대로 정렬될 수 있는
// 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에서 실행


확인 클릭

글삭제 클릭!

확인

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