[JSP] 게시판 만들기 - 게시글 수정 및 삭제 기능 구현

2024. 8. 22. 21:41·프로젝트
목차
  1. 게시글 수정 및 삭제 기능 구현

[작성일: 2023. 04. 21]

 

게시글 수정 및 삭제 기능 구현

[소스코드_수정]

#BbsDAO

  • 게시글을 수정할 수 있는 update 함수 추가
  • BbsDAO의 맨 아래에 코드를 추가
public int update(int bbsID, String bbsTitle, String bbsContent) { // write와 비슷한 성격을 가지고 있음.
String SQL = "UPDATE bbs SET bbsTitle = ?, bbsContent = ? WHERE bbsID = ?";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
pstmt.setString(1, bbsTitle);
pstmt.setString(2, bbsContent);
pstmt.setInt(3, bbsID);
return pstmt.executeUpdate();
}catch(Exception e) {e.printStackTrace();}
return -1; // 데이터 베이스 오류를 알려줌.
}

 

 

#update.jsp

  • 실제 게시물이 수정되는 업데이트 페이지
  • write.jsp를 복사하여 수정
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.PrintWriter" %>
<%@ page import="bbs.Bbs" %>
<%@ page import="bbs.BbsDAO" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width", initial-scale="1">
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<%
String userID = null;
if(session.getAttribute("userID")!=null) {
userID = (String)session.getAttribute("userID");
}
if(userID == null){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('로그인을 하세요.')");
script.println("location.href = 'login.jsp'");
script.println("</script>");
}
int bbsID = 0;
if(request.getParameter("bbsID") != null) {
bbsID = Integer.parseInt(request.getParameter("bbsID"));
}
if(bbsID == 0) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('유효하지 않은 글입니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
Bbs bbs = new BbsDAO().getBbs(bbsID);
if(!userID.equals(bbs.getUserID())){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('권한이 없습니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
%>
<!-- 네비게이션 구현(바) -->
<nav class="navbar navbar-default"> <!-- 네비게이션 -->
<div class="navbar-header"> <!-- 네이게이션 상단 부분 -->
<!-- 네비게이션 상단 박스 영역 -->
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
aria-expanded="false"> <!-- 모바일 상태에서 오른쪽에 메뉴가 나옴. -->
<!-- 오른쪽 메뉴 바에서 선 3개 -->
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="main.jsp">JSP 게시판 웹 사이트</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav"> <!-- 네비게이션 바의 메뉴 -->
<li><a href="main.jsp">메인</a></li>
<li class="active"><a href="bbs.jsp">게시판</a></li>
<!-- 메인과 게시판으로 이동 -->
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class=dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false">회원관리<span class="caret"></span></a>
<!-- 임시주소링크 #을 기재함. -->
<ul class="dropdown-menu">
<li><a href="logoutAction.jsp">로그아웃</a></li>
</ul>
</li>
</ul>
</div>
</nav>
<div class="container">
<div class="row">
<form method="post" action="updateAction.jsp?bbsID=<%= bbsID%>">
<table class="table table-striped" style="text-align: center; border: 1px solid #dddddd">
<!-- 게시판에 글 목록들이 홀수와 짝수가 번갈아가며 색상이 변경됨. -->
<thead>
<tr>
<th colspan="2"style="background-color: #eeeeee; text-align: center;">게시판 글 수정 양식</th>
<!-- 2개의 열을 사용할 수 있도록 colspan 사용 -->
</tr>
</thead>
<tbody>
<tr>
<td><input type="text" class="form-control" placeholder="글 제목" name="bbsTitle"
maxlength="50" value="<%=bbs.getBbsTitle() %>" ></td>
</tr>
<tr>
<td><textarea class="form-control" placeholder="글 내용" name="bbsContent"
maxlength="2048" style="height: 350px;"><%=bbs.getBbsContent() %></textarea></td>
</tr>
</tbody>
</table>
<input type="submit" class="btn btn-primary pull-right" value="글수정"> <!-- 글수정 버튼 -->
</form>
</div>
</div>
<script src="//code.jquery.com/jquery-3.6.4.min.js"></script>
<script src="js/bootstrap.js"></script>
</body>
</html>

 

 

#updateAction.jsp

  • writeAction.jsp 페이지를 복사하여 코드 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="bbs.Bbs" %>
<%@ page import="bbs.BbsDAO" %>
<%@ page import="java.io.PrintWriter" %> <!-- 자바스크립트 문장을 작성하기 위함. -->
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<%
String userID = null;
if(session.getAttribute("userID") != null) {
userID = (String) session.getAttribute("userID");
}
if(userID == null) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('로그인이 필요합니다.')");
script.println("location.href = 'login.jsp'"); // 로그인이 되지 않은 사람은 로그인 페이지로 이동하게 함.
script.println("</script>");
}
int bbsID = 0;
if(request.getParameter("bbsID")!= null) {
bbsID = Integer.parseInt(request.getParameter("bbsID"));
}
if(bbsID == 0) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('유효하지 않은 글입니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
Bbs bbs = new BbsDAO().getBbs(bbsID);
if(!userID.equals(bbs.getUserID())){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('권한이 없습니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}else {
if(request.getParameter("bbsTitle") == null || request.getParameter("bbsContent") == null
|| request.getParameter("bbsTitle").equals("") || request.getParameter("bbsContent").equals("")){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('입력이 되지 않은 사항이 있습니다.')");
script.println("history.back()");
script.println("</script>");
} else {
BbsDAO bbsDAO = new BbsDAO();
int result = bbsDAO.update(bbsID, request.getParameter("bbsTitle"), request.getParameter("bbsContent"));
if(result == -1) { // 데이터베이스 오류
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('글 수정에 실패했습니다.')");
script.println("history.back()");
// 이전 페이지로 사용자를 돌려보냄. (로그인 페이지)
script.println("</script>");
} else {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href = 'bbs.jsp'"); // 게시판 메인으로 이동
// 게시글 작성에 성공했을 경우
script.println("</script>");
}
}
}
%>
</body>
</html>

 

 

 

[실행화면_수정]

로그인 한 아이디로 작성한 게시글의 수정 버튼을 눌렀다.

 

 

 

어쩐지 잘 된다 싶었는데 아니나 다를까 오류가 발생했다.

update.jsp 파일 코드에 문제가 있다고 해서 다시 살펴보았다.

분명히 31행부터 예외가 발생한 게 맞는데 틀린 코드가 없었다.

여태까지 모르고 있던 에러가 이제야 발생한 거 같아 그 전에 작성했던 코드들을 모두 검토했다. 

 

 

오류는 NumberFormatException이었다.

아무래도 request 값으로 받은 Parameter 값이 String으로 넘어오지 않아 생긴 문제 같았다.

view 페이지(글쓰기) 일 경우 bbsID에 공백이 없는 주소가 나와 오류가 뜨지 않는데 수정(update)에만 들어가면 bbsID에 공백이 생긴다.

 

문제는 view 페이지에 있었다.

맨 아래에 글의 작성자가 본인일 경우 글을 수정 할 수있도록 하는 문장에만 공백이 들어가 있었다. 이거 때문에 거의 2시간은 날려서 미치는 줄 알았다.

 

 

오류 수정 후 게시물 작성내용이 보이는 모습

 

 

글 제목 정상적으로 수정

 

 

글 제목, 내용 정상적으로 수정

 

 

데이터베이스 정상적으로 수정된 것 확인

 

 

 

 

[소스코드_삭제]

#BbsDAO

  • 게시글을 삭제할 수 있는 delete 함수 추가
  • BbsDAO의 맨 아래에 코드를 추가
public int delete(int bbsID) {
String SQL = "UPDATE bbs SET bbsAvilable = 0 WHERE bbsID = ?";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
pstmt.setInt(1, bbsID);
return pstmt.executeUpdate();
}catch(Exception e) {e.printStackTrace();}
return -1; // 데이터 베이스 오류를 알려줌.
}

 

 

#deleteAction.jsp

  • 삭제 기능을 수행하는 페이지
  • updateAction.jsp페이지를 복사하여 수정
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="bbs.Bbs" %>
<%@ page import="bbs.BbsDAO" %>
<%@ page import="java.io.PrintWriter" %> <!-- 자바스크립트 문장을 작성하기 위함. -->
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
<%
String userID = null;
if(session.getAttribute("userID") != null) {
userID = (String) session.getAttribute("userID");
}
if(userID == null) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('로그인이 필요합니다.')");
script.println("location.href = 'login.jsp'"); // 로그인이 되지 않은 사람은 로그인 페이지로 이동하게 함.
script.println("</script>");
}
int bbsID = 0;
if(request.getParameter("bbsID")!= null) {
bbsID = Integer.parseInt(request.getParameter("bbsID"));
}
if(bbsID == 0) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('유효하지 않은 글입니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
Bbs bbs = new BbsDAO().getBbs(bbsID);
if(!userID.equals(bbs.getUserID())){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('권한이 없습니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}else {
BbsDAO bbsDAO = new BbsDAO();
int result = bbsDAO.delete(bbsID);
if(result == -1) { // 데이터베이스 오류
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('글 삭제에 실패했습니다.')");
script.println("history.back()");
// 이전 페이지로 사용자를 돌려보냄. (로그인 페이지)
script.println("</script>");
} else {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href = 'bbs.jsp'"); // 게시판 메인으로 이동
// 게시글 작성에 성공했을 경우
script.println("</script>");
}
}
%>
</body>
</html>

 

 

#view.jsp

  • deleteAction.jsp 까지 완성되면 글 삭제 시 아무런 경고창없이 바로 삭제되는 문제 발생
  • 삭제 버튼 눌렀을 때 '정말 삭제하시겠습니까?' 경고창이 뜰 수 있도록 코드 수정
  • 해당 코드는 거의 맨 아래 부분에 있음.
<%
if(userID != null && userID.equals(bbs.getUserID())){
%>
<a href="update.jsp?bbsID=<%= bbsID %>" class="btn btn-primary">수정</a>
<a onclick="return confirm('정말로 삭제하시겠습니까?')" href="deleteAction.jsp?bbsID=<%= bbsID %>" class="btn btn-primary">삭제</a>

 

 

 

[실행화면_삭제]

 

조금 전에 수정했던 글의 삭제버튼을 눌러보면 정말로 삭제하겠냐고 묻는 경고창이 뜬다.

해당 글은 12번 글이다.

 

12번 글 삭제

 

정상적으로 12번 글이 사라지고 11번 글 위에 13번 글이 있는 것을 확인할 수 있다.

 

12번 글 삭제됨.

 

물론 데이터베이스에서는 해당 글이 사라지지 않는다. 맨 오른쪽의 0이 bbsAvailable이기 때문.

데이터베이스 변경내역

 

 

 

 

 

 

 

 

 

 


🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

🐣 출처: https://youtu.be/W9NLm_RNMvI

 

저작자표시 비영리 변경금지 (새창열림)
  1. 게시글 수정 및 삭제 기능 구현
'프로젝트' 카테고리의 다른 글
  • 첫 프로젝트 시작 전
  • [JSP] 게시판 만들기 - 메인 페이지 디자인
  • [JSP] 게시판 만들기 - 게시글 보기 기능 구현
  • [JSP] 게시판 만들기 - 게시판 글 목록 기능 구현
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    프로그래머스
    알고리즘
    DB
    MVC
    성능최적화
    JPA
    Database
    html
    Swift
    javascript
    데이터베이스
    HTTP
    jsp
    Spring Security
    김영한
    자바스크립트
    백준
    다형성
    게시판만들기
    자바
    변수
    Java
    생성자
    의존성주입
    객체
    sql
    스프링
    spring
    Security
    최주호
  • hELLO· Designed By정상우.v4.10.0
뚜비
[JSP] 게시판 만들기 - 게시글 수정 및 삭제 기능 구현
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.