JSP 게시판 만들기 CHAPTER 13 (자바스크립트) - 게시글 수정 및 삭제 기능 구현하기

    글 수정 및 삭제 기능을 구현해 보도록 하겠습니다.

    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

     

    ssj9398/BBSJSP

    Contribute to ssj9398/BBSJSP development by creating an account on GitHub.

    github.com

     

    댓글

    Designed by JB FACTORY