| 層級 | 技術 | 職責 |
|---|---|---|
| 視圖層 | JSP + HTML/CSS/JS | 頁面渲染、表單提交、AJAX 交互 |
| 控制層 | Servlet | 接收請求、調用 Service、轉發/重定向 |
| 業務層 | Java 類 | 業務邏輯、事務控制、數據驗證 |
| 數據層 | JDBC (DataSource/連接池) | SQL 執行、ResultSet 映射、資源關閉 |
| 實體層 | JavaBean (POJO) | 數據庫表字段一一映射 |
User(id, username, password...)、DataRecord(對應展示表字段)。UserDao(save, findByUsername)、RecordDao(CRUD 方法)。PreparedStatement 防注入。UserService(register, login)、RecordService(分頁查詢、批量操作)。LoginServlet、RegisterServlet、LogoutServletRecordListServlet(分頁/搜索)、RecordAddServlet、RecordEditServlet、RecordDeleteServletDBUtil:獲取/關閉連接(推薦整合 Druid/HikariCP 連接池)。JsonUtil:Gson/Jackson 序列化(AJAX 返回)。PageUtil:分頁參數計算。LoginFilter 攔截未登錄請求跳轉登錄頁;EncodingFilter 統一 UTF-8。ContextListener 初始化連接池、載入配置。// web.xml 配置 DataSource (Tomcat 容器管理) 或 ServletContextListener 手動初始化 Druid
// 避免頻繁創建銷毀 Connection,防止連接泄漏
// LoginServlet.doPost
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userService.login(username, password); // 業務層調用 DAO 查詢比對
if (user != null) {
HttpSession session = request.getSession();
session.setAttribute("loginUser", user); // 存入會話
response.sendRedirect("record/list"); // 重定向到列表頁
} else {
request.setAttribute("msg", "用戶名或密碼錯誤");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
// RecordListServlet
int page = Integer.parseInt(request.getParameter("page") ?? "1");
int pageSize = 10;
PageResult result = recordService.findPage(page, pageSize);
request.setAttribute("pageResult", result);
request.getRequestDispatcher("/record_list.jsp").forward(request, response);
<c:forEach items="${pageResult.list}" var="record">
<tr>
<td>${record.id}</td>
<td>${record.name}</td>
<td><a href="edit?id=${record.id}">編輯</a> | <a href="delete?id=${record.id}">刪除</a></td>
</tr>
</c:forEach>
<!-- 分頁導航 -->
PreparedStatement,拒絕字符串拼接 SQL。Connection、Statement、ResultSet 必須在 finally 中關閉,或使用 Try-with-resources (JDK 7+)。EncodingFilter、Tomcat URIEncoding="UTF-8"、數據庫連接字符串 characterEncoding=utf8、JSP pageEncoding="UTF-8"。不使用框架構建 Java Web 系統,是理解框架本質的最佳途徑。核心在於Servlet 分發請求、JDBC 操作數據庫、JSP 渲染視圖、JavaBean 承載數據、Filter/Listener 管理橫切關注點。按模塊化設計類結構,嚴守資源管理與安全規範,即可構建穩健的基礎級 Web 應用。