본문 바로가기

개인프로젝트

[내가 만든 프로젝트 코드 분석 | JSP게시판 만들기] 10.글쓰기 기능 구현하기

글쓰기 페이지 구현

<%@ 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="veiwport" 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");
	}
	%>
	<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">
				<span class="icon-bar"></span> <span class="icon-bar"></span> <span
					class="icon-bar"></span>
                                    .
                                    .
                                    .
	<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 colspan='2' style="background-color: #eeeeee; text-align: center;">게시판 글쓰기 양식</th> // 2개만큼의 열을 할당
						</tr>
					</thead>
					<tbody>
						<tr>
							<td><input type="text" class="form-control" placeholder="글 제목" name="bbsTiltle" maxlength="50"></td> // 사용자로부터 삽입정보를 요청 
							<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>
	<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
	<script src="js/bootstrap.js"></script>
</body>
</html>

데이터베이스에 접근하기위해 DAO클래스를 생성해줍니다.

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 PreparedStatement pstmt;
	private ResultSet rs;
	
	public BbsDAO() {
		try {
			String dbURL = "jdbc:mysql://localhost:3306/BBS";
			String dbID = "root";
			String dbPassword =  "root";
			Class.forName("com.mysql.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); // 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); // 삭제여부 정보
			return pstmt.executeUpdate(); // 성공시 0 이상 반환 
		} 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" %> // DAO객체를 활용하여 해당 DB데이터 사용  
<%@ page import = "java.io.PrintWriter" %>
<% request.setCharacterEncoding("UTF-8"); %>
<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("location.href = 'bbs.jsp'");
			 		script.println("</script>");
			 	}
			}

	 	}		
	%>
</body>
</html>