J2EE (現 Jakarta EE) 不僅是技術集合,更是一套「企業應用架構憲法」:定義分層邊界、組件契約、容器服務、可移植部署標準。本文從五大維度構建完整知識圖譜,助你建立系統性認知。
| 版本 | 全稱 | 目標場景 | 核心特征 |
|---|---|---|---|
| J2ME | Micro Edition | 嵌入式/移動設備 (早期功能機) | 精簡 VM (KVM/CLDC)、受限 API |
| J2SE | Standard Edition | 桌面應用、服務端基礎庫 | 完整 JVM、核心類庫 (Collections/IO/Net/安全) |
| J2EE | Enterprise Edition | 分布式企業級應用 | 在 J2SE 基礎上增加: EJB、Servlet/JSP、JMS、JTA、JCA、JAAS、JavaMail 等服務端規範 |
核心價值:Write Once, Run Anywhere (WORA) + 容器托管服務 (事務/安全/資源/生命週期) = 開發者聚焦業務邏輯。
┌─────────────────────────────────────┐
│ Client Tier (客戶層) │ Applet / Java Web Start / Swing / 移動端 / 瀏覽器 (HTML/JS)
├─────────────────────────────────────┤
│ Web Tier (Web層) │ Servlet / JSP / JSF / Filter / Listener
│ 運行在 Web 容器 │ 責任: 請求接收、參數綁定、視圖渲染、會話管理、安全過濾
├─────────────────────────────────────┤
│ Business Tier (業務邏輯層) │ EJB (Session/Entity/Message-Driven Bean)
│ 運行在 EJB 容器 │ 責任: 事務邊界、安全授權、遠程訪問、持久化協調、異步處理
├─────────────────────────────────────┤
│ EIS Tier (企業信息系統層) │ 數據庫 / ERP / CRM / Legacy / MQ
│ │ 連接方式: JDBC / JCA / JMS / JavaMail
└─────────────────────────────────────┘
關鍵演進:早期「厚客戶端」→ Web 化 (Model 1 JSP 混雜) → MVC (Model 2 Struts) → 輕量級容器 + POJO 程式模型 → 微服務化 (業務層拆分為獨立服務)。
| 容器類型 | 管理組件 | 核心服務 | 代表實現 |
|---|---|---|---|
| EJB 容器 | Session/Entity/MDB | 事務、安全、並發、持久化、遠程代理、生命週期、連接池 | WildFly, WebLogic, WebSphere, GlassFish, OpenEJB |
| Web 容器 | Servlet, JSP, Filter, Listener, JSF | 請求分發、會話、安全、靜態資源、JSP 編譯、類加載隔離 | Tomcat, Jetty, Undertow, Resin |
| 應用客戶端容器 | Application Client (Main 類) | 依賴注入、安全、命名服務 (JNDI)、RMI-IIOP 通信 | 各應用服務器自帶 |
| Applet 容器 | Applet (已棄用) | 瀏覽器 Java Plugin + 安全沙箱 | 歷史產物 |
容器契約:組件不直接調用底層 API (如 `new Socket()`、`DriverManager.getConnection()`),而是通過 JNDI 查找容器管理的資源 (`java:comp/env/jdbc/MyDS`),實現「配置而非編碼」。
| 規範 | 包前綴 | 核心能力 | 現代替代/演進 |
|---|---|---|---|
| JDBC | java.sql / javax.sql | 關係數據庫標準訪問 | HikariCP + JPA/Hibernate / jOOQ / MyBatis |
| JNDI | javax.naming | 命名目錄統一查找 | Spring @Autowired / CDI @Inject (類型安全注入) |
| EJB | jakarta.ejb | 企業組件模型 | Spring @Service/@Transactional / MicroProfile |
| RMI-IIOP | java.rmi / javax.rmi | 分布式遠程調用 | gRPC / REST / Dubbo / Spring Cloud |
| JMS | jakarta.jms | 消息隊列 (P2P/Pub-Sub) | Kafka / RocketMQ / RabbitMQ (JMS 適配器) |
| Servlet | jakarta.servlet | HTTP 請求處理基礎 | Spring MVC / Spring WebFlux / JAX-RS |
| JSP | jakarta.servlet.jsp | 模板引擎 (已淡出) | Thymeleaf / FreeMarker / React/Vue (前後端分離) |
| JTA | jakarta.transaction | 分布式事務 (2PC) | Seata / 本地事務 + 事件溯源 / Sagas |
| JTS | org.omg.CosTransactions | CORBA OTS 映射 | 幾乎棄用 |
| JavaMail | jakarta.mail | 郵件發送/接收 (SMTP/IMAP/POP3) | Spring Boot Mail / 簡單封裝 |
| JAF | jakarta.activation | MIME 數據處理 | JavaMail 內建 / Apache Tika |
| JCA | jakarta.resource | 資源適配器 (對接 EIS) | Debezium / Kafka Connect / 自定義 Connector |
| JAAS | javax.security.auth | 認證授權框架 | Spring Security / Keycloak / OAuth2/OIDC |
J2EE 定義了企業級 Java 的「語法與語義」:四層架構劃清職責邊界,容器契約標準化基礎設施服務,13 大規範覆蓋業務全生命週雖然具體技術棧隨時代演進 (EJB→Spring、JSP→React、JTA→Saga、RMI→gRPC),但其核心思想——關注點分離、容器托管、標準化可移植——始終是構建大規模、長壽命、高可靠系統的指導原則。