JSP 게시판 만들기 CHAPTER 13 (자바스크립트) - 게시글 수정 및 삭제 기능 구현하기
- 코딩/Jsp
- 2019. 12. 24.
글 수정 및 삭제 기능을 구현해 보도록 하겠습니다.
1. 먼저 글 수정 부터 해보도록 하겠습니다.
BbsDAO.java를 열어 글 수정 함수를 만들어 주도록 합니다.
지난번에 했던 getBbs 아래에 추가해주도록 합니다.
이후 write.jsp를 그대로 복사하여 update를 하나 새로 만들어 주도록 합니다.
그리고 아래에 글 수정에 필요한 update를 update.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 http-equiv="Content-Type" content="text/html; 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>
<%
//로긴한사람이라면 userID라는 변수에 해당 아이디가 담기고 그렇지 않으면 null값
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-expaned="false">
<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 colsapn="2" style="background-color: #eeeeee; text-align: center;">게시판 글 수정 양식</th>
</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>
<!-- 애니매이션 담당 JQUERY -->
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<!-- 부트스트랩 JS -->
<script src="js/bootstrap.js"></script>
</body>
</html>
아래와 같이 기존에 작성한 글을 들어가 보았을때 기존 내용과 우측 하단에 글 수정 부분을 볼 수 있습니다.
이제 글 수정 화면 까지 구현이 완성 되었고, 글 수정이 정상적으로 작동이 하게
updateAction페이지를 만들어 주겠습니다.
updateAction.jsp를 만들어 준 이후 아래의 코드를 추가하여 수정이 정상적으로 작동 하도록 해줍니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="bbs.BbsDAO" %> <!-- userdao의 클래스 가져옴 -->
<%@ page import="bbs.Bbs" %>
<%@ page import="java.io.PrintWriter" %> <!-- 자바 클래스 사용 -->
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; 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{ //NULL값이거나 빈칸이 하나라도 있는 경우 입력이 안된 사항이 있다고 경고창을 띄웁니다.
if (request.getParameter("bbsTitle") == null || request.getParameter("bbsContent") ==null
|| request.getParameter("bbsTitle").equals("") || request.getParameter("bbsContent").equals(""))
{ //update에 있던 bbsTitle과 bbsContent로 넘어온 매개변수값들을 분석
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("alert('글쓰기가 정상적으로 처리되었습니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
}
}
%>
</body>
</body>
</html>
이렇게 기존에 있던 글을 수정 하였을 때 글 쓰기가 정상적으로 처리 되었다는 문구를 볼 수 있습니다.
2. 이번에는 글의 삭제를 구현해 보도록 하겠습니다.
BbsDAO.java에 update문 아래에 아래와 같이 삭제문인 delete를 추가해 주도록 합니다.
BbsDAO.java 전체 코드
package bbs;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
public class BbsDAO {
private Connection conn;
private ResultSet rs;
public BbsDAO() {
try {
String dbURL = "jdbc:mysql://localhost:3306/BBS?serverTimezone=Asia/Seoul";
String dbID = "root";
String dbPassword = "tjdwls12!@";
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
} catch (Exception e) {
e.printStackTrace();
}
}
public String getDate() {
String SQL = "SELECT NOW()";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
rs = pstmt.executeQuery(); // 실제로 실행 했을때의 결과를 가져올 수 있게 해줌
if(rs.next()){ //결과가 있는 경우
return rs.getString(1); //현재의 날짜 반환하게 됨
}
}catch (Exception e) {
e.printStackTrace();
}
return ""; // 데이터베이스 오류
}
public int getNext() {
String SQL = "SELECT bbsID FROM BBS ORDER BY bbsID DESC";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
rs = pstmt.executeQuery(); // 실제로 실행 했을때의 결과를 가져올 수 있게 해줌
if(rs.next()){ //결과가 있는 경우
return rs.getInt(1)+1; //현재의 날짜 반환하게 됨
}
return 1; //첫번째 게시물 작성시 매겨지는 번호
}catch (Exception e) {
e.printStackTrace();
}
return -1; // 데이터베이스 오류
}
public int write(String bbsTitle, String userID, String bbsContent) { //실제로 데이터 베이스에 넣어주기
String SQL = "INSERT INTO BBS VALUES(?,?,?,?,?,?)";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
pstmt.setInt(1,getNext()); // 하나씩 값을 넣어주기 다음번에 쓰여야 할 게시물 번호가 됨
pstmt.setString(2,bbsTitle);
pstmt.setString(3,userID);
pstmt.setString(4,getDate());
pstmt.setString(5,bbsContent);
pstmt.setInt(6,1); //첫번째 작성시 삭제 상태가 아니여야 하기 때문에 1로 표기
return pstmt.executeUpdate();
}catch (Exception e) {
e.printStackTrace();
}
return -1; // 데이터베이스 오류
}
public ArrayList<Bbs> getList(int pageNumber){
String SQL = "SELECT * FROM BBS WHERE bbsID < ? AND bbsAvailable = 1 ORDER BY bbsID DESC LIMIT 10";
ArrayList<Bbs> list = new ArrayList<Bbs>(); //bbs에서 나오는 인스턴스를 보관 할 수 있는 리스트를 만듬
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
pstmt.setInt(1, getNext()-(pageNumber-1)*10); //getnext = 다음글에 작성될 게시글 번호
rs = pstmt.executeQuery(); // 실제로 실행 했을때의 결과를 가져올 수 있게 해줌
while(rs.next()){ //결과가 있는 경우
Bbs bbs = new Bbs();
bbs.setBbsID(rs.getInt(1));
bbs.setBbsTitle(rs.getString(2));
bbs.setUserID(rs.getString(3));
bbs.setBbsDate(rs.getString(4));
bbs.setBbsContent(rs.getString(5));
bbs.setBbsAvailable(rs.getInt(6));
list.add(bbs); //현재의 날짜 반환하게 됨
}
}catch (Exception e) {
e.printStackTrace();
}
return list; // 데이터베이스 오류
}
public boolean nextPage (int pageNumber) { //게시글이 10개 일 경우 10단위로 끊기는 경우 다음페이지 안나오게
String SQL = "SELECT * FROM BBS WHERE bbsID < ? AND bbsAvailable = 1 ";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
pstmt.setInt(1, getNext()-(pageNumber-1)*10); //getnext = 다음글에 작성될 게시글 번호
rs = pstmt.executeQuery(); // 실제로 실행 했을때의 결과를 가져올 수 있게 해줌
if(rs.next()){ //결과가 있는 경우
return true;
}
}catch (Exception e) {
e.printStackTrace();
}
return false; // 데이터베이스 오류
}
public Bbs getBbs(int bbsID) {
String SQL = "SELECT * FROM BBS WHERE bbsID = ? ";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
pstmt.setInt(1, bbsID); //getnext = 다음글에 작성될 게시글 번호
rs = pstmt.executeQuery(); // 실제로 실행 했을때의 결과를 가져올 수 있게 해줌
if(rs.next()){ //결과가 있는 경우
Bbs bbs = new Bbs();
bbs.setBbsID(rs.getInt(1));
bbs.setBbsTitle(rs.getString(2));
bbs.setUserID(rs.getString(3));
bbs.setBbsDate(rs.getString(4));
bbs.setBbsContent(rs.getString(5));
bbs.setBbsAvailable(rs.getInt(6));
return bbs;
}
}catch (Exception e) {
e.printStackTrace();
}
return null; // 데이터베이스 오류
}
public int update(int bbsID, String bbsTitle, String bbsContent) { //제목과 내용으로 바꿔준다.
String SQL = "UPDATE BBS SET bbsTitle = ?, bbsContent = ? WHERE bbsID LIKE ?";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
pstmt.setString(1,bbsTitle); // 하나씩 값을 넣어주기 다음번에 쓰여야 할 게시물 번호가 됨
pstmt.setString(2,bbsContent);
pstmt.setInt(3,bbsID); //첫번째 작성시 삭제 상태가 아니여야 하기 때문에 1로 표기
return pstmt.executeUpdate();
}catch (Exception e) {
e.printStackTrace();
}
return -1; // 데이터베이스 오류
}
public int delete(int bbsID) {
String SQL = "UPDATE BBS SET bbsAvailable = 0 WHERE bbsID LIKE ?";
try {
PreparedStatement pstmt = conn.prepareStatement(SQL);
pstmt.setInt(1,bbsID); // 하나씩 값을 넣어주기 다음번에 쓰여야 할 게시물 번호가 됨
return pstmt.executeUpdate();
}catch (Exception e) {
e.printStackTrace();
}
return -1; // 데이터베이스 오류
}
}
이제 Delete가 될 수 있게 deleteAction을 추가하여 주도록 합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="bbs.BbsDAO" %> <!-- userdao의 클래스 가져옴 -->
<%@ page import="bbs.Bbs" %>
<%@ page import="java.io.PrintWriter" %> <!-- 자바 클래스 사용 -->
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; 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{ //NULL값이거나 빈칸이 하나라도 있는 경우 입력이 안된 사항이 있다고 경고창을 띄웁니다.
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>
</body>
</html>
이렇게 성공적으로 글 삭제를 처리 할 수 있습니다.
글 삭제시 재차 삭제 확인 문구를 띄워주도록 하겠습니다.
view.jsp파일에
deleteAction 부분에 onclick을 추가하여 정말 삭제하시겠습니까? 라는 문구를 띄워 줄 수 있도록 합니다.
이렇게 삭제버튼을 눌렀을 때 정말 삭제하시겠습니까? 라는 문구가 띄워지게 됩니다.
https://alisyabob.tistory.com/239
깃허브에 코드를 업로드 해두었습니다.
https://github.com/ssj9398/BBSJSP/tree/master
'코딩 > Jsp' 카테고리의 다른 글
[TOMCAT] Multiple Contexts have a path of 오류 해결 방법 (0) | 2020.03.10 |
---|---|
JSP 게시판 만들기 CHAPTER 14 (자바스크립트) - 웹 사이트 메인 페이지 디자인하기 (0) | 2019.12.25 |
JSP 게시판 만들기 CHAPTER 12 (자바스크립트) - 게시글 보기 기능 구현 (0) | 2019.12.18 |
JSP 게시판 만들기 CHAPTER 11 (자바스크립트) - 글목록 구현하기 (0) | 2019.12.17 |
JSP 게시판 만들기 CHAPTER 10 (자바스크립트) - 글쓰기 기능 구현 (0) | 2019.12.14 |