首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

.NET 開發者轉型 J2EE 完全指南(下):核心組件與架構模式

     編輯:Java 相關知識

J2EE 應用模型對比:從 ASP.NET 到 Servlet/JSP

理解 J2EE 架構的關鍵在於掌握其核心組件——Java Servlet 與 JavaServer Pages (JSP)——如何處理 Web 請求,並對應 ASP.NET 的處理模式。

Servlet 程式設計基礎

請求處理流程

  1. 客戶端發送請求,URL 包含 Servlet 名稱與上下文根(對應 IIS 虛擬目錄)。
  2. Web 伺服器轉發至應用伺服器,容器載入單一 Servlet 實例,多執行緒處理並發請求。
  3. 容器調用 doGet() 或 doPost(),傳入 HttpServletRequest 與 HttpServletResponse。

核心方法與最佳實踐

  • init()/destroy():生命週期管理。
  • 避免在 Servlet 中直接輸出 HTML,改用 RequestDispatcher.forward() 委派 JSP 處理視圖。

JSP 技術深度解析

執行機制

首次請求時,JSP 被編譯為特殊 Servlet,後續請求直接由該 Servlet 服務,直到原始碼修改觸發重新編譯。

隱含物件與 Scriptlet

JSP 提供 request、response、out 等隱含變量,支援 `<% ... %>` Scriptlet 嵌入 Java 邏輯,但強烈建議將業務邏輯移出 JSP。

架構演進:從「義大利麵代碼」到 MVC

階段 1:單一 JSP 混合邏輯與視圖(反模式)

同 ASP.NET 無 Code-behind 的 .aspx,難以復用與維護。

階段 2:Servlet 處理邏輯 + JSP 呈現視圖(改良版 Model 2)

  • Servlet 作為控制器:接收請求、驗證參數、調用業務邏輯、決定導向。
  • JSP 專注視圖渲染:純 HTML + 少量表達式語言。

階段 3:標準 MVC —— 業務邏輯下沉至 POJO

// 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)。

JDBC 與連線池:企業級資料存取

標準 JDBC 流程

  1. 載入驅動:Class.forName()
  2. 建立連線:DriverManager.getConnection()
  3. 執行查詢/更新
  4. 處理 ResultSet
  5. 關閉連線

連線池最佳實踐

應用伺服器管理 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
ApplicationWeb 應用運行期全域配置、快取application (ServletContext)

原則:選擇滿足需求的最小作用域,避免資源浪費。

程式化導航與 Cookie 操作

三種導航方式對比

  • sendRedirect():客戶端重導向,需用 Session/Application 傳遞數據。
  • RequestDispatcher.forward():伺服器端轉發,共享 Request 物件,瀏覽器 URL 不變。
  • RequestDispatcher.include():包含其他資源輸出,類似 Server.Execute。

Cookie 讀寫

// 寫入
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 等進階規格,構建高擴展、高可用的分散式系統。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved