**瀏覽器只認 HTML/CSS/JS** → 服務端用 **JSP/Servlet 生成 HTML** → **JDBC 讀寫數據庫** 提供動態數據。
| 組件 | 本質 | 職責 | 類比 |
|---|---|---|---|
| HTML | 靜態文本文件 | 定義頁面結構/內容 | 設計好的「模板」 |
| JSP | 特殊 Servlet(編譯後為 .class) | 模板引擎:Java 代碼 + HTML 標籤 → 動態生成 HTML | 「模板填充器」 |
| Servlet | Java 類(實現 Servlet 接口) | 處理請求邏輯:參數解析、業務調用、轉發/重定向到 JSP | 「控制器/處理器」 |
| JDBC | Java API (接口+驅動實現) | 連接數據庫、執行 SQL、映射 ResultSet 到 Java 對象 | 「數據庫驅動器」 |
https://host/app/login.jsp。login.jsp 編譯為 Login_jsp.class (Servlet)。Login_jsp._jspService() 執行:調用 JDBC 查數據庫 → 將數據嵌入 HTML → 響應瀏覽器。// 1. 表單 (login.html/jsp) → POST /loginServlet
// 2. LoginServlet.doPost():
// String user = request.getParameter("username");
// String pwd = request.getParameter("password");
// UserDao dao = new UserDao(); // 封裝 JDBC
// User u = dao.findByUsername(user);
// if (u != null && u.getPwd().equals(pwd)) {
// session.setAttribute("user", u);
// response.sendRedirect("welcome.jsp"); // 重定向
// } else {
// request.setAttribute("msg", "用戶名或密碼錯誤");
// request.getRequestDispatcher("login.jsp").forward(request, response); // 轉發
// }
// 3. welcome.jsp 從 session 取 user 顯示歡迎信息
理解這四者分工,Java Web 入門即不再「暈乎乎」。