秉徇【先有问题,才有方案】
1. J2EE1.2
1.1. 问题
90 年代末,当时在做企业级应用时,主要有着 B/S 和 C/S 两种架构,前端分别是浏览器和应用程序;但是当时技术界已经意识到 B/S 架构在未来将成为主流。所以,Java EE 的设计主要针对的是 B/S 架构。
当时的 B/S 架构中,浏览器只负责接收后端返回的 HTML 静态文件,然后将其渲染成页面展示出来即可。后端则需要动态生成 HTML 文件,这意味着后端需要同时兼顾业务逻辑处理和生成 HTML 文件,即根据业务逻辑处理结果生成相应的 HTML 文件返回给浏览器。
图1 - J2EE 1.2 体系结构(1999.12)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
图2 - J2EE 1.3 体系结构(2001.3)这个版本最大的改进就是对 RMI-IIOP 规范(用于服务器之间通信的二进制协议)进行了修改,全部改成了基于 XML 进行通讯,所以也衍生了 XML 的一系列的规范,比如如何读写 XML。
JAXP,Java API for XML Processing。
JAAS,Java Authentication Authorization Service,是安全框架。JAAS 提供了一种灵活的、说明性机制,用于对用户进行身份验证和服务访问的授权。
3. J2EE1.4
图3 - J2EE 1.4 体系结构(2003.11)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。
网友评论