j2ee 历史
ddatsh
Timeline
- J2EE 1.2 (1999-12-12)
- J2EE 1.3 (2001-9 -24)
- J2EE 1.4 (2003-11 -11)
- Java EE 5 (2006-5 -11)
- Java EE 6 (2009-12 -10)
- Java EE 7 (2013-5 -28)
- Java EE 8 (2017-8 -31)
- Java EE 9 (2020-12)
- Java EE 10 (2022-9)
演进
1.2
第一个 J2EE 版本,随 Java 2 Standard Edition(J2SE) 发布
针对企业应用程序所需的常用的 Web 层、业务逻辑、表示层和消息传递服务
简单的 J2EE 程序,都需要大量的配置文件,非常不便使用
10 个主要规范和 API
-
Servlet API
处理 HTTP 请求和响应
-
JavaServer Pages (JSP)
基于 Servlet 术,开发者可嵌入 Java 代码到 HTML 页面,生成动态网页内容
-
Enterprise JavaBeans (EJB)
Session Beans、Entity Beans 和 Message-Driven Beans
-
Java Message Service (JMS)
消息中间件 API
-
Java Transaction API (JTA)
事务管理 API
-
JavaMail API
电子邮件,支持如 SMTP、POP3 和 IMAP
-
Java Naming and Directory Interface (JNDI)
命名和目录服务 API,允许应用程序通过名称查找和管理资源,如数据库连接、EJB、环境变量等
-
Java Database Connectivity (JDBC)
关系型数据库进行连接和操作,执行 SQL 查询、事务管理等
-
Java Authentication and Authorization Service (JAAS)
认证和授权 API,允许企业级应用程序使用标准机制验证用户身份和控制访问权限
-
RMI-IIOP (Remote Method Invocation over Internet Inter-ORB Protocol)
分布式对象之间进行远程调用, Java 与其他 CORBA 组件
1.3
通过 JSR 58 发布,改进了半数 1.2 规范并引入 XML API、连接器架构和安全框架
-
EJB 2.0
- Message-Driven Beans (MDBs): 支持异步消息处理,通过与 JMS 集成,增应用异步处理能力
- Local Interfaces: 同一个容器内调用 EJB 不再需要远程调用机制,提升性能
- EJB Query Language (EJB QL): 为容器管理的持久性 (CMP) 引入了一种标准化的查询语言
-
JSP 1.2 和 Servlet 2.3
- JSTL,提高了 JSP 页面的可维护性和重用性
- Servlet Filters: 请求前后额外处理(如日志记录、认证、压缩等),增强应用灵活性
-
JMS 1.0.2
- 增强了与 EJB 的集成,特别是支持 Message-Driven Beans 的开发
-
Java Connector Architecture (JCA) 1.0:
- 企业信息系统 (EIS) 与 J2EE 应用服务器进行标准化集成,互操作性
-
Java API for XML Processing (JAXP) 1.1:
- XML API
-
JNDI
- 主要增强安全性和对JCA支持
1.4
改进了13 种技术中的 9 种,引入新的 Web service和安全支持
复杂程度达到了顶点,尤其是EJB 2.0,开发/调试难度非常大
-
Web Services Support
- Java API for XML-Based RPC (JAX-RPC) 1.1 基于 SOAP 的 Web 服务
- Web Services for J2EE (WS-I Basic Profile)
-
Java API for XML Registries (JAXR) 1.0
-
允许应用程序查找和发布 Web 服务,使企业级应用可以更容易地进行服务的发现和使用
-
JavaServer Faces (JSF) 1.0
-
EJB 2.1
-
Web Services Integration 引入了对 Web 服务的支持,允许 Stateless Session Beans 通过 Web 服务接口公开
-
Timer Service 管理定时任务
-
Servlet 2.4 和 JSP 2.0
-
Java Management Extensions (JMX) 1.2
Java EE 5
Java EE 5 主基调:简化开发
,引入注释、EJB 3.0 的业务组件,重心转移到提高开发人员的生产力上
-
JSF1.2
-
JSTL1.2
集成统一的表达式语言 (EL),进一步简化了 JSP 页面的开发和数据绑定
-
Servlet 2.5 和 JSP 2.1
支持注解
-
Java Persistence API (JPA) 1.0
取代 EJB 2.x 中的复杂的实体 Bean 模型,提供了一种更为简洁、灵活的持久化解决方案
-
EJB 3.0
广泛使用注解减少大量 XML 配置
支持将普通POJO 作为 EJB 使用,开发和测试更加容易
-
Web Services Enhancements
- JAX-WS 2.0 取代 JAX-RPC,支持基于注解的开发方式
- JAXB
- Web Services Metadata 通过注解进一步简化了 Web 服务的定义和配置
-
Dependency Injection (DI)
@Resource
等注解来注入依赖
Java EE 6
- Web Profile
针对轻量级 Web 应用程序开发的子集配置。如 Servlet、JSP、EL、JSTL、JSF、JPA 和 CDI
- Contexts and Dependency Injection (CDI) 1.0
ref : spring :)
-
JSF2.0
-
JSP2.1
-
JSTL1.2
-
Servlet 3.0
注解配置
- 大幅减少 web.xml 依赖,注解配置 Servlets、过滤器和监听器
异步处理
- 支持异步请求处理
可插拔性
web-fragment.xml
-
EJB 3.1
简化的 EJB Lite
- 精简版的 EJB API,专注于核心功能,特别适合 Web Profile。使 Web 环境中使用 EJB 更加简单
无接口 Bean:
- 开发者可以创建不需要显式接口的 EJB,进一步简化了开发过程
定时器增强:
@Schedule
和@Schedules
注解
内嵌 EJB 容器:
- Java SE 环境中嵌入和启动 EJB 容器,方便开发和测试
-
JPA 2.0
-
Criteria API,类型安全的动态查询构建能力
-
二级缓存
-
基础数据类型和嵌入式对象的集合映射
-
-
Bean Validation 1.0
-
JAX-RS 1.1
引入构建 RESTful Web 服务的标准 API
Java EE 7
HTML5 支持、批处理、并行处理等方面
-
HTML5 和 WebSockets 支持
-
WebSocket API (JSR 356)
-
JSON Processing (JSR 353)
-
-
JMS2.0 减少模板代码
-
CDI 默认已不需 beans.xml ,@Inject
-
Bean Validation延伸至JAX-RS 2.0
-
JPA 2.1
- Entity Graph,允许开发者定义和管理对象图的加载策略,优化数据库访问性能
- 存储过程调用
- DDL 生成
Java EE 8
-
Servlet 4.0
- HTTP/2 支持
- SSE
-
Java API for JSON Binding (JSON-B) 1.0
-
JAX-RS 2.1
响应式客户端 API,支持 Reactive Streams,增强了对异步编程模型的支持
-
CDI 2.0
-
JavaMail 1.6
-
协议支持和改进
-
STARTTLS 支持
-
改进的 SSL/TLS 支持
-
增加了对最新 TLS 协议版本的支持(如 TLS 1.2 和 TLS 1.3),提供更高的安全性
-
提供了新的属性,用于控制 SSL/TLS 连接的详细行为,比如指定使用的协议版本和密码套件
-
-
-
错误处理和日志改进
-
改进的错误报告
- 改善了错误消息的详细程度,尤其是在处理网络和安全错误时,使开发者更容易诊断和修复问题。
-
-
更详细的调试日志
- 增强了调试功能,开发者可以通过调试模式获得更加详细的日志输出,有助于追踪电子邮件通信过程中发生的各种问题
-
性能优化
-
对某些操作进行了优化,尤其是在大批量邮件处理和 MIME 数据解析方面,减少了内存消耗并提高了处理速度
-
新特性和 API 增强
-
新的邮件属性
- 引入了一些新的配置属性,用于更灵活地控制邮件会话的行为,例如更精细地控制邮件发送和接收的超时时间
-
增强的邮件头处理
- 改进了对多行邮件头的处理,确保解析和生成邮件头更加符合标准
-
-
Bug 修复
-
修复了多个已知的 Bug
-
例如,修复了某些情况下邮件附件处理的问题以及一些字符集处理的错误
-
-
-
Bean Validation 2.0
-
支持新数据类型
Java 8 日期和时间 API 的支持,允许直接验证
LocalDate
、LocalDateTime
等类型 -
增强的验证能力
引入了对容器元素(如
List<String>
)的验证,以及新的默认验证约束,扩展了验证逻辑的表达能力
-
-
JPA 2.2
-
增强对 Java 8 的支持
如将
Stream
用于查询结果,直接处理Optional
类型,以及对日期和时间 API 的原生支持
-
-
多租户支持和云环境优化
改进资源的隔离和共享机制
Java EE 9
-
命名空间转换
javax
>jakarta
-
平台简化
remove CORBA
进一步精简 Web Profile
Java EE 10
-
Core Profile
专为微服务架构设计,CDI Lite
-
CDI 增强
-
Servlet 6.0
HTTP/3 初步支持
-
JAX-RS 3.1
-
JPA 3.1
JSON 支持
Recent
Java EE 是官方出的一套规范,Java Web 是使用 Java 进行 Web 开发的行为
Java Web 开发中,有些部分推荐使用 EE 的规范,例如 Servlet(不使用这套规范,硬要自己用 netty,nio 甚至 bio 监听 80 端口,手动解析 HTTP 报文也不是不可以)
有些部分必须使用 EE 有关的规范,例如连接数据库(自己手撸数据库驱动并且还无视 JDBC 规范?)
有些部分开源社区的类库做了对官方的兼容,例如 @Resource 和 @Component,@Inject 和 @Autowired。Spring 扫描注解的时候,前一对注解功能类似(采用不同的 BeanProcesor 注入,并且默认是按类型 / 名称注入),后一对则完全一致
有些部分嫌弃官方做得不够好,自己实现规范(RMI 规定使用序列化接口传输对象,而现在比较流行的远程服务调用框架是自己实现对象传输的编码协议的;JSP 是官方的模板语言,但是实际上应用较多的是 Thymeleaf freemarker 等 HTML 模板引擎)
有些地方官方发现不够好,反过来使用开源社区流行的设计,但是还是成了小众(EJB 3.0 以后的版本和 Spring 都有 IOC 和 DI 的功能)
有些东西应该是消失在了历史长河里(新开发的应用还有人用 JNDI 来定位资源,用 XML 来传输数据吗?)
官方制定的规范,和开源社区的产物从远古开始纠缠,相互借鉴、依赖、淘汰,即使是用 Spring Boot 开发 Web 应用,本质上也得注册 Servlet 作为整个容器的启动器(Spring Web Flux 异步编程那一套可以不依赖 Servlet API 了,这个比较小众所以先论外)