글쓰기 페이지 구현
<%@ 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>
'개인프로젝트' 카테고리의 다른 글
[내가 만든 프로젝트 코드 분석 | JSP게시판 만들기] 12.게시물 상세보기 기능 구현하기 (2) | 2024.01.21 |
---|---|
[내가 만든 프로젝트 코드 분석 | JSP게시판 만들기] 11.게시판 글 목록 기능 구현하기 (1) | 2024.01.21 |
[내가 만든 프로젝트 코드 분석 | JSP게시판 만들기] 9.게시판 데이터베이스 구축하기 (0) | 2024.01.20 |
[내가 만든 프로젝트 코드 분석 | JSP게시판 만들기] 8.메인페이지 세션관리 (0) | 2024.01.20 |
[내가 만든 프로젝트 코드 분석 | JSP게시판 만들기] 7.접속한 회원 세션 관리하기 (0) | 2024.01.20 |