JSP 게시판 만들기 CHAPTER 10 (자바스크립트) - 글쓰기 기능 구현

    글쓰기 기능 구현

    글쓰기 버튼을 눌렀을때 글을 쓸 수 있게 하기 위해

    write.jsp 페이지를 만들어 주도록 합니다.

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    
    	pageEncoding="UTF-8"%>
    
    <%@ page import="java.io.PrintWriter"%>
    
    <!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");
    
    
    
    		}
    
    	%>
    
    
    
    
    
    	<!-- 네비게이션  -->
    
    	<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>
    
    
    
    
    
    			<%
    
    				//라긴안된경우
    
    				if (userID == null) {
    
    			%>
    
    			<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="login.jsp">로그인</a></li>
    
    						<li><a href="join.jsp">회원가입</a></li>
    
    					</ul>
    
    				</li>
    
    			</ul>
    
    			<%
    
    				} else {
    
    			%>
    
    			<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="writeAction.jsp">
    
    			<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"></td>
    					</tr>
    					<tr>
    						<td><textarea class ="form-control" placeholder="글 내용" name ="bbsContent" maxlength="2048" style ="height: 350px;"></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>

     

    이렇게 게시판 양식이 완성 됩니다.

     

    이제 글쓰기 버튼을 누르면 이렇게 나오게 되는데 이페이지가 작동 할 수 있게

    writeAction 페이지를 만들어 주도록 합니다.

    그전에 먼저 userDAO를 만들어 준 것 처럼 게시판도 BbsDAO를 만들어 주도록 합니다.

    데이터 접근 객체로 실제로 데이터베이스에 접근을 하여 데이터를 가져올 수 있게 해주는 역할을 합니다.

    이렇게 BbsDAO.java를 만들어 주고 아래와 같이 작성을 해주도록 합니다.

    package bbs;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    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로 표기
    			rs = pstmt.executeQuery(); // 실제로 실행 했을때의 결과를 가져올 수 있게 해줌
    			return pstmt.executeUpdate();
    
    		}catch (Exception e) {
    			e.printStackTrace();
    		}
    		return -1;  // 데이터베이스 오류
    	}
    	
    
    }
    

    이제 writeaction.jsp를 만들어 주면 됩니다.

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    
        pageEncoding="UTF-8"%>
    <%@ page import="bbs.BbsDAO" %> <!-- userdao의 클래스 가져옴 -->
    <%@ page import="java.io.PrintWriter" %> <!-- 자바 클래스 사용 -->
    <% request.setCharacterEncoding("UTF-8"); %>
    
    <!-- 회원정보를 담는 user클래스를 javabeans 사용-->
    
    <jsp:useBean id="bbs" class="bbs.Bbs" scope="page" />
    <jsp:setProperty name="bbs" property="bbsTitle" />
    <jsp:setProperty name="bbs" property="bbsContent" /> 
    
    
    <!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>");
    
    	} else{
    		if (bbs.getBbsTitle() == null || bbs.getBbsContent() ==null){
    
    					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.write(bbs.getBbsTitle(), userID, bbs.getBbsContent());
    			
    					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>

    위와같이 작성을 하고 테스트를 하면 

    화면상에선 데이터가 보이지 않지만

    DB를 확인해 보면

    이렇게 정상적으로 들어간 것을 볼 수 있습니다.

    https://alisyabob.tistory.com

     

    JSP 게시판 만들기 CHAPTER 11 (자바스크립트) - 글목록 구현하기

    - 데이터베이스에서 글목록 가져오기 - BbsDAO에 함수를 추가하여 줍니다. public ArrayList getList(int pageNumber){ String SQL = "SELECT * FROM BBS WHERE bbsID < ? AND bbsAvailable = 1 ORDER BY bb..

    alisyabob.tistory.com

     

    댓글

    Designed by JB FACTORY