本文示範如何純手工打造一個基於 Model-View (MV) 架構 的 JavaWeb 管理系統,不依賴 Spring 等框架,直接使用 Servlet + JSP(或 Servlet 輸出 HTML)實現登入驗證、Session/Cookie 管理、用戶增刪改查與分頁等核心功能,適合理解 JavaWeb 底層運作機制。
採用 MV 模式分離關注點:
UserBean(實體)、UserBeanCl(業務邏輯/DAO)、ConnDB(連接池)XxxServlet / XxxCl 處理請求分發
Login.java輸出登入表單,支援「記住我」Cookie 功能:
public class Login extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
res.setContentType("text/html;charset=gbk");
PrintWriter pw = res.getWriter();
String info = req.getParameter("info");
pw.println("<html><body bgcolor=#CDD4FF><center>");
if (info != null) pw.println("<h4>請正確登錄!</h4>");
pw.println("<form action=logincl method=post>用戶名:<input name=username><br>");
pw.println("密碼:<input type=password name=password><br>");
pw.println("<input type=checkbox name=keep value=2>保存Cookie<br>");
pw.println("<input type=submit name=login value=login></form></center></body></html>");
}
public void doPost(HttpServletRequest req, HttpServletResponse res) { doGet(req, res); }
}
LoginCl.java —— 核心控制器init():啟動時讀取訪問計數文件存入 ServletContextdestroy():關寫回計數Mainpublic class Logincl extends HttpServlet {
public void init() {
// 讀取 e://myDocument.txt 計數器 -> ServletContext
}
public void destroy() {
// 寫回計數器
}
public void doGet(HttpServletRequest req, HttpServletResponse res) {
String u = req.getParameter("username"), p = req.getParameter("password");
if (new UserBeanCl().checkUser(u, p)) {
// 寫 Cookie、Session、計數器+1
res.sendRedirect("Main");
} else res.sendRedirect("login?info=err");
}
}
Main.java、用戶管理 Welcome.javaMain:導航入口Welcome:核心管理頁,含分頁查詢、修改/刪除連結、Session/ Cookie 自動復活邏輯、訪問統計、IP 顯示| Servlet | 職責 |
|---|---|
DelUserCl | 刪除用戶 → 重導 Ok/Err |
Update | 顯示修改表單(預填數據) |
UpdateCl | 執行更新 → 重導 Ok/Err |
Ok/Err | 統一結果提示頁 |
ConnDB / UserBeanCl / UserBeanConnDB:採用 JNDI 數據源(連接池),而非硬編碼 DriverManagerUserBean:標準 JavaBean 對應 users 表UserBeanCl:封裝 checkUser、getResultByPage、delUser、updateUser 等業務方法web.xml 映射所有 Servlet 路徑context.xml 定義 JNDI 數據源 java:comp/env/mydbusers(id, name, passwd, email, grade)優點:零框架依賴,透明展示 Servlet 生命週期、Session 機制、MVC 分層本質。
缺點:HTML 硬編碼維護困難、無統一異常處理、SQL 注入風險(建議改用 PreparedStatement)、重導向傳參不安全。
進階建議:引入 JSP/EL/JSTL 分離視圖、Filter 統一編碼/登入攔截、DAO 層抽象、連接池優化、前端模板引擎。