
1. 게시글 수정하는 update 메서드 만들기
BbsDAO 클래스 하단에 메서드 추가
public int update(int bbsID, String bbsTitle, String bbsContent) {
String SQL = "UPDATE BBS SET bbsTitle = ?, bbsContent = ? WHERE bbsID = ?";
PreparedStatement psmt = null;
try {
psmt = conn.prepareStatement(SQL);
psmt.setString(1, bbsTitle);
psmt.setString(2, bbsContent);
psmt.setInt(3, bbsID);
return psmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (psmt != null) {
try {
psmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return -1; // 데이터베이스 오류
}
2. write.jsp 페이지 복사해서 update.jsp 페이지 만들기
기존코드에서 글 제목이랑 내용 부분에 `<%= bbs.getTitle() %>` `<%= bbs.getContent %>` 해 줬다.
왜냐하면 글을 수정하려면 기존에 내가 쓴 글이 나와야 하기 때문이다.
<!-- 제목 입력 -->
<div class="mb-4">
<label for="bbsTitle" class="form-label">글 제목</label><input
type="text" id="bbsTitle" name="bbsTitle" class="form-control"
placeholder="글 제목을 입력하세요" maxlength="50" value="<%= bbs.getBbsTitle() %>" required>
</div>
<!-- 내용 입력 -->
<div class="mb-4">
<label for="bbsContent" class="form-label">글 내용</label>
<textarea id="bbsContent" name="bbsContent" class="form-control"
placeholder="글 내용을 입력하세요" maxlength="2048" rows="10" required><%= bbs.getBbsContent() %></textarea>
</div>
기존 코드에서 로그인 안한 사용자의 화면을 처리하는 부분은 빼줌
대신 아래처럼 맨 위에 스크립트릿에서 만약에 로그인 하지 않은 사람이면 로그인을 하세요 메세지를 띄우고 login.jsp 페이지로 보내준다. 또 작성자의 userID 값이 지금 접속한 사람의 userID 랑 일치하지 않으면 그건 그 사람이 쓴 글이 아니기 때문에 수정할 수 없도록 해야 한다. 권한이 없다는 알림을 띄워준다.
<%
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>");
}
%>
여기까지 하고 실행
수정버튼 누르면 제목이랑 내용이 잘 불러와진다.

아래에 글쓰기 버튼을 글수정으로 바꾸기
<div class="d-flex justify-content-end">
<input type="submit" class="btn btn-primary" value="글수정">
</div>
3. 수정한 내용을 처리하는 updateAction.jsp 만들기
이제 글 수정한 내용을 updateAction.jsp 페이지로 보내서 처리해 줄 것이다.
비슷한 구성의 writeAction.jsp 페이지 코드 그대로 복사해서 updateAction.jsp 만들고 코드 수정
그냥 이제 빈즈는 안쓸것이기 때문에 빈즈는 삭제하고 대신 페이지 지시자로 bbs.Bbs 추가

방금 전에 만든 update.jsp 페이지로 가서 현재 글이 유효한지 체크하는 부분 그대로 복사해서 가져오기

이제 자바 빈즈 사용안할거기 때문에
if (bbs.getBbsTitle() == null || bbs.getBbsContent() == null)
이 코드를 수정 해주어야 한다.
update.jsp 페이지에서 글 제목와 글 내용이 input태그 name 값을 통해서 매개변수로 넘어오기 때문에 name="bbsTitle"
request.getParameter("bbsTitle") 이렇게 바꿔주어야 한다.
if (request.getParameter("bbsTitle") == null || request.getParameter("bbsContent") == null)
여기에 코드를 더 추가하는데 넘어온 값이 null 값이거나
빈칸인게 하나라도 있는 경우 입력이 안 된 사항이 있다고 알려 준다.
if (request.getParameter("bbsTitle") == null || request.getParameter("bbsContent") == null
|| request.getParameter("bbsTitle").equals("") || request.getParameter("bbsContent").equals(""))
updateAction.jsp
스크립트릿 부분
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 { // 성공적으로 권한이 있는 사람은 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) { // DB오류 발생, 글쓰기 실패
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('글 수정에 실패했습니다.')");
script.println("history.back()");
script.println("</script>");
}
else { // 글쓰기 성공 -> 게시판 메인 화면(bbs.jsp)로 이동
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
}
}
글 수정 테스트 잘 된다

4. 게시글 삭제하는 delete 메서드 만들기
BbsDAO 클래스 하단에 메서드 추가
삭제는 수정 메서드랑 비슷한데 그냥 bbsAvailable 값만 1에서 0으로 바꾸는 쿼리를 짜면 된다.
public int delete(int bbsID) {
String SQL = "UPDATE BBS SET bbsAvailable = 0 WHERE bbsID = ?";
PreparedStatement psmt = null;
try {
psmt = conn.prepareStatement(SQL);
psmt.setInt(1, bbsID);
return psmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (psmt != null) {
try {
psmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return -1; // 데이터베이스 오류
}
5. deleteAction.jsp 페이지 만들기
위에서 만든 updateAction.jsp 복사해서 그대로 쓸건데 제목이랑 내용이 null 인지 "" 빈칸인지 확인하는 부분은 이제 빼도 된다.
result에 bbsDAO.delete(bbsID); 값 넣어주는 걸로 수정
삭제에 성공하면 게시판 메인 페이지로 보내기
else { // 성공적으로 권한이 있는 사람은 else로 넘어와서 아래 구문 수행
BbsDAO bbsDAO = new BbsDAO();
int result = bbsDAO.delete(bbsID);
if (result == -1) { // DB오류 발생, 글쓰기 실패
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('글 삭제에 실패했습니다.')");
script.println("history.back()");
script.println("</script>");
}
else { // 글쓰기 성공 -> 게시판 메인 화면(bbs.jsp)로 이동
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
}
삭제 테스트
44번 글 삭제했는데 성공적으로 삭제 됨

내가 작성한 글이 아닌데 수정하려고 하면 ?
URL view.jsp를 deleteAction.jsp로 바꿔주자


권한이 없다는 알림창이 잘 뜬다.

이제 삭제할 때 정말로 삭제하시겠습니까? 메세지를 화면에 띄워주는 작업하러 view.jsp 페이지로 간다
아래 a 태그 부분에
<a href="deleteAction.jsp?bbsID=<%=bbsID%>" class="btn btn-primary"
style="width: auto;">삭제</a>
onclick="return confirm('정말로 삭제하시겠습니까?')" 속성 추가
<a onclick="return confirm('정말로 삭제하시겠습니까?')" href="deleteAction.jsp?bbsID=<%=bbsID%>"
class="btn btn-primary" style="width: auto;">삭제</a>

오늘은 여기까지 끝~!
아쉬운 점
혹시 글을 삭제했을경우 페이징 처리(순번 밀림),
순번 반대로 나오는거 고치기,
파일첨부 기능 등 추가하면 좋겠다
글번호도 원래는
AUTO_INCREMENT(MySQL) 나 SEQUENCE(Oracle, PostgreSQL) 로 하는게 좋다
'Spring&JSP' 카테고리의 다른 글
[Spring] 스프링 헷갈리는 개념 정리 1. DAO, DTO, VO, Entity 차이 (1) | 2025.04.02 |
---|---|
[JSP] 게시판 만들기 12 _ 부트스트랩으로 메인페이지 꾸미기 (106) | 2024.12.13 |
[JSP] 게시판 만들기 11 _ 게시판 보기 기능 (96) | 2024.12.09 |
[JSP] 게시판 만들기 10 _ 게시판 글목록 기능 (60) | 2024.12.09 |
[JSP] 게시판 만들기 9 _ 게시판 글쓰기 기능 (write.jsp, BbsDAO.java, writeAction.jsp) (63) | 2024.12.09 |

1. 게시글 수정하는 update 메서드 만들기
BbsDAO 클래스 하단에 메서드 추가
public int update(int bbsID, String bbsTitle, String bbsContent) { String SQL = "UPDATE BBS SET bbsTitle = ?, bbsContent = ? WHERE bbsID = ?"; PreparedStatement psmt = null; try { psmt = conn.prepareStatement(SQL); psmt.setString(1, bbsTitle); psmt.setString(2, bbsContent); psmt.setInt(3, bbsID); return psmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { if (psmt != null) { try { psmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } return -1; // 데이터베이스 오류 }
2. write.jsp 페이지 복사해서 update.jsp 페이지 만들기
기존코드에서 글 제목이랑 내용 부분에 <%= bbs.getTitle() %>
<%= bbs.getContent %>
해 줬다.
왜냐하면 글을 수정하려면 기존에 내가 쓴 글이 나와야 하기 때문이다.
<!-- 제목 입력 --> <div class="mb-4"> <label for="bbsTitle" class="form-label">글 제목</label><input type="text" id="bbsTitle" name="bbsTitle" class="form-control" placeholder="글 제목을 입력하세요" maxlength="50" value="<%= bbs.getBbsTitle() %>" required> </div> <!-- 내용 입력 --> <div class="mb-4"> <label for="bbsContent" class="form-label">글 내용</label> <textarea id="bbsContent" name="bbsContent" class="form-control" placeholder="글 내용을 입력하세요" maxlength="2048" rows="10" required><%= bbs.getBbsContent() %></textarea> </div>
기존 코드에서 로그인 안한 사용자의 화면을 처리하는 부분은 빼줌
대신 아래처럼 맨 위에 스크립트릿에서 만약에 로그인 하지 않은 사람이면 로그인을 하세요 메세지를 띄우고 login.jsp 페이지로 보내준다. 또 작성자의 userID 값이 지금 접속한 사람의 userID 랑 일치하지 않으면 그건 그 사람이 쓴 글이 아니기 때문에 수정할 수 없도록 해야 한다. 권한이 없다는 알림을 띄워준다.
<% 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>"); } %>
여기까지 하고 실행
수정버튼 누르면 제목이랑 내용이 잘 불러와진다.

아래에 글쓰기 버튼을 글수정으로 바꾸기
<div class="d-flex justify-content-end"> <input type="submit" class="btn btn-primary" value="글수정"> </div>
3. 수정한 내용을 처리하는 updateAction.jsp 만들기
이제 글 수정한 내용을 updateAction.jsp 페이지로 보내서 처리해 줄 것이다.
비슷한 구성의 writeAction.jsp 페이지 코드 그대로 복사해서 updateAction.jsp 만들고 코드 수정
그냥 이제 빈즈는 안쓸것이기 때문에 빈즈는 삭제하고 대신 페이지 지시자로 bbs.Bbs 추가

방금 전에 만든 update.jsp 페이지로 가서 현재 글이 유효한지 체크하는 부분 그대로 복사해서 가져오기

이제 자바 빈즈 사용안할거기 때문에
if (bbs.getBbsTitle() == null || bbs.getBbsContent() == null)
이 코드를 수정 해주어야 한다.
update.jsp 페이지에서 글 제목와 글 내용이 input태그 name 값을 통해서 매개변수로 넘어오기 때문에 name="bbsTitle"
request.getParameter("bbsTitle") 이렇게 바꿔주어야 한다.
if (request.getParameter("bbsTitle") == null || request.getParameter("bbsContent") == null)
여기에 코드를 더 추가하는데 넘어온 값이 null 값이거나
빈칸인게 하나라도 있는 경우 입력이 안 된 사항이 있다고 알려 준다.
if (request.getParameter("bbsTitle") == null || request.getParameter("bbsContent") == null || request.getParameter("bbsTitle").equals("") || request.getParameter("bbsContent").equals(""))
updateAction.jsp
스크립트릿 부분
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 { // 성공적으로 권한이 있는 사람은 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) { // DB오류 발생, 글쓰기 실패 PrintWriter script = response.getWriter(); script.println("<script>"); script.println("alert('글 수정에 실패했습니다.')"); script.println("history.back()"); script.println("</script>"); } else { // 글쓰기 성공 -> 게시판 메인 화면(bbs.jsp)로 이동 PrintWriter script = response.getWriter(); script.println("<script>"); script.println("location.href = 'bbs.jsp'"); script.println("</script>"); } } }
글 수정 테스트 잘 된다

4. 게시글 삭제하는 delete 메서드 만들기
BbsDAO 클래스 하단에 메서드 추가
삭제는 수정 메서드랑 비슷한데 그냥 bbsAvailable 값만 1에서 0으로 바꾸는 쿼리를 짜면 된다.
public int delete(int bbsID) { String SQL = "UPDATE BBS SET bbsAvailable = 0 WHERE bbsID = ?"; PreparedStatement psmt = null; try { psmt = conn.prepareStatement(SQL); psmt.setInt(1, bbsID); return psmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { if (psmt != null) { try { psmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } return -1; // 데이터베이스 오류 }
5. deleteAction.jsp 페이지 만들기
위에서 만든 updateAction.jsp 복사해서 그대로 쓸건데 제목이랑 내용이 null 인지 "" 빈칸인지 확인하는 부분은 이제 빼도 된다.
result에 bbsDAO.delete(bbsID); 값 넣어주는 걸로 수정
삭제에 성공하면 게시판 메인 페이지로 보내기
else { // 성공적으로 권한이 있는 사람은 else로 넘어와서 아래 구문 수행 BbsDAO bbsDAO = new BbsDAO(); int result = bbsDAO.delete(bbsID); if (result == -1) { // DB오류 발생, 글쓰기 실패 PrintWriter script = response.getWriter(); script.println("<script>"); script.println("alert('글 삭제에 실패했습니다.')"); script.println("history.back()"); script.println("</script>"); } else { // 글쓰기 성공 -> 게시판 메인 화면(bbs.jsp)로 이동 PrintWriter script = response.getWriter(); script.println("<script>"); script.println("location.href = 'bbs.jsp'"); script.println("</script>"); } }
삭제 테스트
44번 글 삭제했는데 성공적으로 삭제 됨

내가 작성한 글이 아닌데 수정하려고 하면 ?
URL view.jsp를 deleteAction.jsp로 바꿔주자


권한이 없다는 알림창이 잘 뜬다.

이제 삭제할 때 정말로 삭제하시겠습니까? 메세지를 화면에 띄워주는 작업하러 view.jsp 페이지로 간다
아래 a 태그 부분에
<a href="deleteAction.jsp?bbsID=<%=bbsID%>" class="btn btn-primary" style="width: auto;">삭제</a>
onclick="return confirm('정말로 삭제하시겠습니까?')" 속성 추가
<a onclick="return confirm('정말로 삭제하시겠습니까?')" href="deleteAction.jsp?bbsID=<%=bbsID%>" class="btn btn-primary" style="width: auto;">삭제</a>

오늘은 여기까지 끝~!
아쉬운 점
혹시 글을 삭제했을경우 페이징 처리(순번 밀림),
순번 반대로 나오는거 고치기,
파일첨부 기능 등 추가하면 좋겠다
글번호도 원래는
AUTO_INCREMENT(MySQL) 나 SEQUENCE(Oracle, PostgreSQL) 로 하는게 좋다
'Spring&JSP' 카테고리의 다른 글
[Spring] 스프링 헷갈리는 개념 정리 1. DAO, DTO, VO, Entity 차이 (1) | 2025.04.02 |
---|---|
[JSP] 게시판 만들기 12 _ 부트스트랩으로 메인페이지 꾸미기 (106) | 2024.12.13 |
[JSP] 게시판 만들기 11 _ 게시판 보기 기능 (96) | 2024.12.09 |
[JSP] 게시판 만들기 10 _ 게시판 글목록 기능 (60) | 2024.12.09 |
[JSP] 게시판 만들기 9 _ 게시판 글쓰기 기능 (write.jsp, BbsDAO.java, writeAction.jsp) (63) | 2024.12.09 |