자바(JAVA)/JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)

JAVA/JSP 27. 모델1 방식의 회원제 게시판 만들기 - 게시글 삭제하기

개발학생 2024. 1. 10. 21:44
반응형
  • 삭제 기능은 쓰기 기능이나 수정 기능과는 다르게 별도의 폼이 필요하지 않음
    → 이 프로젝트는 회원제 게시판을 만드는 것이므로, 글을 작성한 본인이라는 게 확인되면 바로 삭제 처리를 하면 됨
  • 삭제하기 처리 프로세스와 담당 모듈(파일)

 

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) 게시판 목록 보기 화면으로 이동하고, 방금 삭제한 게시글이 목록에서 사라진 것 확인

 

 

 

 

 

 

 

 

 

 

 

 

반응형