JSP 게시판 소스
ChatGPT
JSP (JavaServer Pages)와 JDBC를 이용한 간단한 게시판(Bulletin Board System) 예제를 제공하겠습니다. 이 예제는 게시글 작성, 게시글 목록 조회, 게시글 상세 보기의 기능을 포함합니다.
1. 환경 설정
1.1 개발 환경 준비
JDK 설치: Oracle JDK 또는 OpenJDK.
Apache Tomcat 설치: Tomcat 다운로드.
IDE: Eclipse 또는 IntelliJ IDEA.
1.2 데이터베이스 설정
MySQL에서 bbs라는 데이터베이스를 만들고, posts라는 테이블을 생성합니다:
sql
코드 복사
CREATE DATABASE bbs;
USE bbs;
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 파일 구조
bash
코드 복사
/bbs
/WEB-INF
/lib
mysql-connector-java-x.x.xx.jar (MySQL JDBC 드라이버)
/classes
DBConnection.class
/src
DBConnection.java
/pages
index.jsp
post.jsp
create.jsp
3. DBConnection.java - 데이터베이스 연결 클래스
java
코드 복사
// src/DBConnection.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
private static final String URL = "jdbc:mysql://localhost:3306/bbs";
private static final String USER = "root";
private static final String PASSWORD = "";
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}4. index.jsp - 글 목록 페이지
jsp
코드 복사
<%@ page import="java.sql.*, java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 목록</title>
</head>
<body>
<h1>글 목록</h1>
<a href="pages/create.jsp">새 글 쓰기</a>
<ul>
<%
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = DBConnection.getConnection();
String sql = "SELECT id, title, created_at FROM posts ORDER BY created_at DESC";
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String title = rs.getString("title");
String createdAt = rs.getString("created_at");
out.println("<li><a href='pages/post.jsp?id=" + id + "'>" + title + "</a> (" + createdAt + ")</li>");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
%>
</ul>
</body>
</html>
5. post.jsp - 글 상세 보기 페이지
jsp
코드 복사
<%@ page import="java.sql.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 보기</title>
</head>
<body>
<%
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
String title = "";
String content = "";
String createdAt = "";
try {
conn = DBConnection.getConnection();
String id = request.getParameter("id");
String sql = "SELECT title, content, created_at FROM posts WHERE id=?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, Integer.parseInt(id));
rs = stmt.executeQuery();
if (rs.next()) {
title = rs.getString("title");
content = rs.getString("content");
createdAt = rs.getString("created_at");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
%>
<h1><%= title %></h1>
<p><%= content %></p>
<small>Posted on <%= createdAt %></small>
<p><a href="../index.jsp">뒤로</a></p>
</body>
</html>
6. create.jsp - 글 작성 페이지
jsp
코드 복사
<%@ page import="java.sql.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>새 글 쓰기</title>
</head>
<body>
<h1>새 글 쓰기</h1>
<form method="post">
<label for="title">제목:</label>
<input type="text" id="title" name="title" required>
<br>
<label for="content">내용:</label>
<textarea id="content" name="content" required></textarea>
<br>
<button type="submit">글 작성</button>
</form>
<p><a href="../index.jsp">뒤로</a></p>
<%
if ("POST".equalsIgnoreCase(request.getMethod())) {
String title = request.getParameter("title");
String content = request.getParameter("content");
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = DBConnection.getConnection();
String sql = "INSERT INTO posts (title, content) VALUES (?, ?)";
stmt = conn.prepareStatement(sql);
stmt.setString(1, title);
stmt.setString(2, content);
if (stmt.executeUpdate() > 0) {
response.sendRedirect("../index.jsp");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
}
%>
</body>
</html>
7. web.xml - 배포 설명자 설정
xml
코드 복사
<!-- WEB-INF/web.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<display-name>Simple BBS</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
8. 실행 방법
JSP 파일 배포: WEB-INF와 pages 폴더를 Tomcat의 webapps 디렉토리에 복사합니다.
컴파일: DBConnection.java를 컴파일하고, 클래스 파일을 WEB-INF/classes에 복사합니다.
bash
코드 복사
javac -d WEB-INF/classes src/DBConnection.java
MySQL 드라이버 배포: mysql-connector-java-x.x.xx.jar 파일을 WEB-INF/lib 폴더에 복사합니다.
서버 시작: Tomcat을 시작하고, 웹 브라우저에서 http://localhost:8080/bbs/index.jsp를 엽니다.
테스트: 게시판을 사용하여 글을 작성하고, 목록을 보고, 상세 보기를 테스트합니다.
이 게시판 예제는 기본적인 기능만 포함하고 있으며, 실제 사용에서는 보안과 사용자 인증 등의 추가 기능이 필요합니다. JSP의 태그 라이브러리와 MVC 패턴을 사용하여 코드를 더욱 깔끔하게 할 수도 있습니다.