一個以 Spring MVC + Hibernate 打造的公告管理系統,採經典三層式架構(Controller → Service → DAO),前端使用 Bootstrap 5 與 JSP,可打包為 WAR 部署於 Apache Tomcat。
本專案為一份完整的 Java Web 練習作品,涵蓋從 CRUD、檔案上傳到雲端部署的完整流程。
- 📋 公告列表(分頁、關鍵字搜尋)
- ➕ 新增 / ✏️ 編輯 / 🗑️ 刪除公告
- 📎 附件上傳與下載
- 🗓️ 公告起訖日期、到期自動標示
- 📝 CKEditor 5 富文本內容編輯
| 層級 | 技術 |
|---|---|
| 前端 | Bootstrap 5.3、JSP、JSTL、CKEditor 5 |
| Web 框架 | Spring MVC 5.3 |
| ORM | Hibernate 5.6 |
| 資料庫 | MariaDB / MySQL 8 |
| 建構工具 | Maven |
| 應用伺服器 | Apache Tomcat 9 |
src/main/
├── java/com/bulletinboard/
│ ├── controller/ # 控制器層(接收 HTTP 請求)
│ ├── service/ # 服務層(業務邏輯、事務)
│ ├── dao/ # 資料存取層(Hibernate CRUD)
│ ├── model/ # 實體(對應 bulletin_board 資料表)
│ └── converter/ # 類型轉換器(String → LocalDate)
├── resources/ # applicationContext.xml、hibernate.cfg.xml
└── webapp/WEB-INF/
├── views/bulletin/ # list.jsp / form.jsp / view.jsp
└── web.xml、dispatcher-servlet.xml
詳細架構與資料流程請見 ARCHITECTURE.md。
- JDK 8+
- Maven 3.6+
- MySQL / MariaDB
- Apache Tomcat 9
CREATE DATABASE bulletin_board_system
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE bulletin_board (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
publisher VARCHAR(100) NOT NULL,
publish_date DATE NOT NULL,
end_date DATE NOT NULL,
content TEXT NOT NULL,
attachment_path VARCHAR(500),
attachment_filename VARCHAR(255)
);編輯 src/main/resources/hibernate.cfg.xml,填入你自己的連線資訊:
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/bulletin_board_system?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Taipei</property>
<property name="hibernate.connection.username">你的帳號</property>
<property name="hibernate.connection.password">你的密碼</property>
⚠️ 請勿將真實帳密 commit 進版控。建議改用環境變數或.gitignore排除的本機設定檔。
mvn clean package # 產生 target/bulletin-board.war
# 將 war 複製到 Tomcat 的 webapps/ 後啟動 Tomcat啟動後造訪:http://localhost:8080/bulletin-board/
- 升級到 Spring Boot + Spring Data JPA
- 加入使用者權限與公告分類
- Docker 容器化、CI/CD 自動部署
- RESTful API 化
Java Web 練習作品 · Spring MVC + Hibernate · 2025