理解 J2EE 架構的關鍵在於掌握其核心組件——Java Servlet 與 JavaServer Pages (JSP)——如何處理 Web 請求,並對應 ASP.NET 的處理模式。
doGet() 或 doPost(),傳入 HttpServletRequest 與 HttpServletResponse。init()/destroy():生命週期管理。RequestDispatcher.forward() 委派 JSP 處理視圖。首次請求時,JSP 被編譯為特殊 Servlet,後續請求直接由該 Servlet 服務,直到原始碼修改觸發重新編譯。
JSP 提供 request、response、out 等隱含變量,支援 `<% ... %>` Scriptlet 嵌入 Java 邏輯,但強烈建議將業務邏輯移出 JSP。
同 ASP.NET 無 Code-behind 的 .aspx,難以復用與維護。
// Controller (Servlet)
UserValidation validator = new UserValidation();
if (validator.validate(username, password)) { ... }
// Business Object (POJO)
public class UserValidation {
public boolean validate(String u, String p) { ... }
}
優勢:業務邏輯可獨立單元測試、跨 Web/非 Web 環境復用、支援多種實現策略(JDBC、EJB、Web Service、JMS、JCA)。
Class.forName()DriverManager.getConnection()ResultSet應用伺服器管理 DataSource(經 JNDI 查找),應用程式僅借用/歸還連線:
InitialContext ic = new InitialContext();
DataSource ds = (DataSource) ic.lookup("jdbc/MyDS");
Connection conn = ds.getConnection(); // 從池獲取
// ... 執行 SQL
conn.close(); // 歸還池中,非真正關閉
優點:效能提升、資源可控、支援「喚醒」洩漏連線回收。
| 作用域 | 生命週期 | 適用場景 | 對應物件 |
|---|---|---|---|
| Page | 單頁處理期間 | 頁面內臨時數據傳遞 | pageContext |
| Request | 單次請求鏈 | Servlet 轉發 JSP 共享數據 | request |
| Session | 用戶會話存活期 | 登入狀態、購物車 | session |
| Application | Web 應用運行期 | 全域配置、快取 | application (ServletContext) |
原則:選擇滿足需求的最小作用域,避免資源浪費。
sendRedirect():客戶端重導向,需用 Session/Application 傳遞數據。RequestDispatcher.forward():伺服器端轉發,共享 Request 物件,瀏覽器 URL 不變。RequestDispatcher.include():包含其他資源輸出,類似 Server.Execute。// 寫入
Cookie c = new Cookie("uid", "123");
c.setMaxAge(86400); // 24 小時
response.addCookie(c);
// 讀取
Cookie[] cookies = request.getCookies();
掌握 Servlet/JSP 協作、MVC 分層、JDBC 連線池與作用域管理,是 .NET 開發者邁向 J2EE 企業級開發的堅實基石。建議進一步深入 EJB、JMS、JCA 等進階規格,構建高擴展、高可用的分散式系統。