반응형
- 삭제 기능은 쓰기 기능이나 수정 기능과는 다르게 별도의 폼이 필요하지 않음
→ 이 프로젝트는 회원제 게시판을 만드는 것이므로, 글을 작성한 본인이라는 게 확인되면 바로 삭제 처리를 하면 됨 - 삭제하기 처리 프로세스와 담당 모듈(파일)
1. 삭제하기 버튼에 삭제 요청 로직 달기
*[삭제하기] 버튼 클릭 시 삭제 요청을 보내는 자바스크립트 코드를, 상세 보기 페이지(View.jsp)에 추가
// WebContent/Board/View.jsp
... 생략 ...
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원제 게시판</title>
<script>
function deletePost() { //1.삭제 처리를 위한 deletePost() 함수
var confirmed = confirm("정말로 삭제하시겠습니까?"); //2.정말로 삭제할 것인지 한 번 더 확인
if (confirmed) {
var from = document.writeFrm; //이름(name)이 "writeFrm"인 폼 선택
form.method = "post"; //3.폼에 전송 방식 설정
form.action = "DeleteProcess.jsp"; //4.폼에 전송 경로 설정
form.submit(); //5.폼값 전송
}
}
</script>
</head>
<body>
<jsp:include page="../Common/Link.jsp" />
<h2>회원제 게시판 - 상세 보기(View)</h2>
<form name="writeFrm">
<input type="hidden" name="num" value="<%= num %>" /> //6.hidden 타입으로 정의한 일련번호가 폼값과 함께 전송됨
... 생략 ...
<button type="button" onclick="deletePost();">삭제하기</button> //7.[삭제하기] 버튼 클릭하면 'onclick'에 의해 deletePost() 함수가 동작함
... 생략 ...
</form>
</body>
</html>
2. DAO 준비
*삭제 처리를 위한 메소드를 BoardDAO 클래스에 추가(기존 파일에 코드 추가)
// Java Resources/src/model1/board/BoardDAO.java
... 생략 ...
public class BoardDAO extends JDBConnect {
... 생략 ...
//지정한 게시물 삭제
public int deletePost(BoardDTO dto) { //1.삭제할 게시물의 일련번호와 로그인 아이디를 DTO 객체에 담고, 그 DTO 객체를 매개변수로 받음
int result = 0;
try {
//쿼리문 템플릿
String query = "DELETE FROM board WHERE num=?"; //2.DELETE 쿼리문을 작성
//쿼리문 완성
psmt = con.prepareStatement(query);
psmt.setString(1, dto.getNum()); //3.인파라미터로 일련번호를 설정
//쿼리문 실행
result = psmt.executeUpdate();
} catch (Exception e) {
System.out.println("게시물 삭제 중 예외 발생");
e.printStackTrace();
}
return result; //결과 반환
}
}
3. 삭제 처리 페이지 작성
*추가한 DAO 메소드를 이용해서 삭제 처리 페이지 작성
// WebContent/Board/DeleteProcess.jsp
<%@ page import="model1.board.BoardDAO"%>
<%@ page import="model1.board.BoardDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="./IsLoggedIn.jsp"%> //1.삭제 처리 페이지를 로그인 상태에서만 접근 가능하도록 함
<%
String num = request.getParameter("num"); //2.일련번호 얻기
//3.DTO, DAO 객체 생성 후 selectView() 메소드를 호출하여 기존 게시물을 가져옴
BoardDTO dto = newBoardDTO(); //DTO 객체 생성
BoardDAO dao = newBoardDAO(application); //DAO 객체 생성
dto = dao.selectView(num); //주어진 일련번호에 해당하는 기존 게시물 얻기
//4.로그인된 사용자 아이디 얻기(session 영역에 아이디를 저장해 둠)
String sessionId = session.getAttribute("UserId").toString();
int delResult = 0;
if (sessionId.equals(dto.getId())) { //5.게시글 작성자가 본인인지 확인(로그인된 아이디와 게시글 작성자가 같아야 함)
//게시글 작성자가 본인일 경우
dto.setNum(num);
delResult = dao.deletePost(dto); //6.게시글 삭제-deletePost() 메소드 호출
dao.close();
//게시글 작성 성공/실패 처리
if (delResult == 1) {
//7.성공-게시글 목록 페이지로 이동
JSFunction.alertLocation("작성한 게시글이 삭제되었습니다", "List.jsp", out);
} else {
//8.실패-이전 페이지로 이동
JSFunction.alertBack("게시글 삭제에 실패했습니다", out);
}
} else {
//9.게시글 작성자가 본인이 아닌 경우-이전 페이지로 이동
JSFunction.alertBack("작성자 본인이 작성한 게시글만 삭제할 수 있습니다", out);
return;
}
%>
4. 게시글 삭제 기능 동작 확인
*목록 보기(List.jsp)를 실행
1) 프로젝트에서 목록 보기(List.jsp) 파일을 선택한 상태로 우클릭 후, [Run As] → [Run On Server]로 실행
2) 공통 링크의 ‘로그인’ 클릭 후, 아이디에 ‘hello’ 비밀번호에 ‘1234’입력해서 로그인
3) [게시판(페이징 X)] 클릭 후, 삭제하려는 게시글의 ‘제목’을 클릭해 상세 보기 페이지로 이동
4) [삭제하기] 버튼 클릭하고, 정말로 삭제할지 다시 한 번 묻는 팝업창이 뜨면 [확인] 버튼 클릭
5) 게시글이 삭제되었다는 팝업창이 뜨면 [확인] 클릭
6) 게시판 목록 보기 화면으로 이동하고, 방금 삭제한 게시글이 목록에서 사라진 것 확인
반응형
'자바(JAVA) > JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)' 카테고리의 다른 글
JAVA/JSP 29. 회원제 게시판에 페이징 기능 추가2 - 페이징 구현 실습 (JSP) (4) | 2025.04.16 |
---|---|
JAVA/JSP 28. 회원제 게시판에 페이징 기능 추가 - 페이징이 필요한 이유, 페이징 구현 절차 (2) | 2025.04.15 |
JAVA/JSP 26. 모델1 방식의 회원제 게시판 만들기 - 게시글 수정하기 (1) | 2024.01.05 |
JAVA/JSP 25. 모델1 방식의 회원제 게시판 만들기 - 게시글 상세 보기 (1) | 2024.01.01 |
JAVA/JSP 24. 모델1 방식의 회원제 게시판 만들기 - 게시판 게시글 쓰기 (1) | 2023.12.31 |