Java 生態系指數級增長,面對眾多供應商、規範與元件類型,企業開發者、架構師如何抉擇?「J2EE 探險者」系列旨在為您闢出決策路徑。本文聚焦無狀態請求處理組件的兩大主流選擇:Servlet(含 JSP)與無狀態 Session Bean。
HTTP 是典型無狀態協定:每個請求獨立,伺服器不記住先前互動。為模擬有狀態會話,業界發展出表單隱藏欄位、Cookie、URL 重寫等技巧,由應用程式開發者負責管理客戶端狀態。
web.xml)唯一配置Servlet 介面未綁定協定Servlet 天生適合 MVC:
單一 Servlet 實例以新線程處理每個請求,執行 service() → doGet()/doPost()。容器管理線程池,資源佔用極低,擴展平滑。
Session Bean 可擔任視圖、控制器、模型,常實作 外觀模式或業務委派模式。可被 Servlet/JSP、JavaBean、Applet、Swing 應用、另一 EJB 呼叫。
EJB 容器佔用大量 CPU/記憶體,創建管理多物件實例。但換來的是:不犧牲太多回應時間與擴展性的前提下,獲得企業資源、交易、安全的有效管理。無狀態 Bean 可高效池化複用。
| 客戶端類型 | 最佳方案 |
|---|---|
| Java 客戶端,同防火牆內 | RMI 直連無狀態 Session Bean |
| 非 Java 客戶端,或跨防火牆 | HTTP + Servlet(視需求決定是否經 Servlet 呼叫 Session Bean) |
| CORBA 客戶端 | IIOP 直連 Session Bean(繞過 Web 層) |
| GUI 類型 | 特點 | 建議架構 |
|---|---|---|
| Applet | 瀏覽器載入、沙箱限制、自動更新 | 跨防火牆:HTTP+Servlet(簡單業務用 Helper,複雜用 Session Bean);同防火牆:RMI 直連 Session Bean |
| 獨立應用 | 本地安裝、啟動快、無沙箱、難維護更新 | |
| Java Web Start | Applet+獨立應用混合、本地快取、啟動後可關瀏覽器 | |
| 原生 GUI | 非 Java 介面 | 複雜交易:考慮 CORBA 方式呼叫 EJB |
必須使用 Servlet(HTTP 需求)。是否引入 EJB 視企業服務需求而定。
最佳實踐:業務邏輯置於無狀態 Session Bean,外部瀏覽器經 Servlet 層存取,內部應用直連 Bean。達成「表現與業務徹底分離、內部應用零抽象直達業務邏輯」。
Servlet 擅長輕量 HTTP 互動與表現層;無狀態 Session Bean 擅長企業級資源、交易、安全管理。實務中常採「Servlet 表現層 + Session Bean 業務層」雙層架構。下集將探討有狀態網路環境下的狀態管理:HttpSession vs 有狀態 Session Bean——敬請期待!