秉徇【先有问题,才有方案】
1. J2EE1.2
1.1. 问题
90 年代末,当时在做企业级应用时,主要有着 B/S 和 C/S 两种架构,前端分别是浏览器和应用程序;但是当时技术界已经意识到 B/S 架构在未来将成为主流。所以,Java EE 的设计主要针对的是 B/S 架构。
当时的 B/S 架构中,浏览器只负责接收后端返回的 HTML 静态文件,然后将其渲染成页面展示出来即可。后端则需要动态生成 HTML 文件,这意味着后端需要同时兼顾业务逻辑处理和生成 HTML 文件,即根据业务逻辑处理结果生成相应的 HTML 文件返回给浏览器。

1.2. 方案
针对这一问题,Sun 公司基于 MVC 的分层架构
提出了最初的 J2EE 体系结构。如图 1 所示,Java EE 提出用两个容器即 Web Container
和 EJB Container
分别来管理这两个操作。
Web 容器负责生成 HTML 文件
,EJB 容器则负责业务逻辑处理
。Web 容器对应着 V,EJB 容器对应着 M。这两个容器支持的规范部分是相同的,容器通过支持规范为其中的组件提供相应的服务。
1.3. 补充
传统 C/S 架构中的前端应用就是基于 Java SE 开发的,而大多数 Java EE 中的规范都可以在 Java SE 中使用
。所以我们可以看到,C/S 架构中的前端应用、Web 容器和 EJB 容器都可以通过 JDBC 规范直接访问数据库。
不同之处在于,前端应用没有容器的概念,所以对于如 JDBC 的规范需要自己亲自去使用,例如需要自己去加载驱动;而后端容器就是帮你做了这件事了,由容器来管理这些规范,不需要自己去加载驱动。
也正是支持 Java EE 的规范,前端应用可以直接访问 EJB 容器,同时也可以直接访问数据库,这时候是个单体应用
。
Applet 解决方案就是为了满足 HTML 动态要求。当时 JavaScript 还没有产生,而 HTML 起初是不支持任何逻辑处理的,就是个死页面。其就是在 HTML 文件中插入一段 Applet 代码,然后引入了 Applet 插件的浏览器能运行 Java 程序,从而可以向后端请求服务。后来 JS 将其干死了,因为 JS 是浏览器原生支持的,效率当然比它高得多
。
2. J2EE1.3

这个版本最大的改进就是对 RMI-IIOP 规范(用于服务器之间通信的二进制协议)进行了修改,全部改成了基于 XML 进行通讯,所以也衍生了 XML 的一系列的规范,比如如何读写 XML。
JAXP,Java API for XML Processing。
JAAS,Java Authentication Authorization Service,是安全框架。JAAS 提供了一种灵活的、说明性机制,用于对用户进行身份验证和服务访问的授权。
3. J2EE1.4

Java EE 1.4 版本首次提出 Web Service 的概念。
4. J2EE5
学习 Spring 好的东西。
- 改成配置的方式来配置组件。
- 定义新的规范 JPA。
彼时 Spring 支持 ORM 框架例如 Hibernate、Mybatis,这样一来程序员如果用了 Hibernate 或者 Mybatis,意味着和 Spring 就是绑死的了。
所以,J2EE 就定义了个新的规范叫 JPA,所有的 ORM 都通过 JPA 去访问。也就是说,只要遵循 JPA 规范开发的代码,无论是 Hibernate 还是 Mybatis 都可以访问。 - 加强 WebService。
Java SE5 引入了注解配置,Java EE5 相应地也引入了注解配置。
5. J2EE6(2009.12)
学习了 Spring 的 AOP 和 IOC,定义了两个规范 CDI 和 DI,其实和 Spring 的是一回事。DI 是 Dependency Injection依赖注入,是 Java EE 定义的,其实就对应是 Spring 的 IOC控制反转,只不过不能明面上直接抄袭。
同时,在 Web Service 模块还加入了 Restful 风格的 API,也是基于 JSON 的 Restful API。在面向 Web 服务这块,Java EE 始终走在 Spring 前面,而在内源性方面如 AOP/IOC,Spring 始终走在 Java EE前面。
6. J2EE7(2013.6)
- 支持 HTML5。
- 支持 WebSocket。
7. J2EE8(2017.8)
- 支持响应式编程
JavaEE 的版本号永远地停留在了 8,因为这个时候 Sun 公司被 Oracle 公司收购了,而 Oracle 公司认为 JavaEE 只是个规范而不是产品,不赚钱,从而将其转给了 Apache 维护,但是没有将 JavaEE 的商标转给 Apache。
于是 Apache 只能将其改名,改名为 Jakarta EE,所以 Jakarta EE8 就是 JavaEE8。
网友评论