java web 发展

1999年,推出了 J2EE 1.2 版本,到 2005 年名称变为 Java EE 5,Java EE is currently maintained by Oracle under the Java Community Process。到 2017-9-12 Oracle 宣布将 JavaEE 提交给 Eclipse Foundation。Eclipse 将 Java EE 改名为 EE4J(Eclipse Enterprise for Java),并成为其一个顶级项目。

Java Web 是什么呢?其实就是由 JCP 组织制定的各种规范(JSR),Java EE包含哪些规范呢?参考 Java™ EE 8 Technologies

所以 JavaEE 平台,其实就是大量的接口,抽象类,注解等。其最终形成一个 jar 包 javaee-api.jar, 目前 JavaEE 8, 这个包的大小约为 1.9M , 里面将 JavaEE 所有的规范集合到一起。

自然开发JavaEE web 应用,就需要一个实现了 javaee-api 中的所有功能,glassfish 就是一个参考实现,其实现了 JavaEE 所有的功能。

常见的 JavaEE 容器,JBoss, WebLogic, GlassFish, TomEE

在 JavaEE 中大约有 30 多个规范。tomcat 实现了 Servlet,JSP,EL, JSTL, WebSocket 这5个规范。所以 tomcat 只能称为 Servlet 容器,而不能称为 JavaEE 容器。

同样地,Jetty 也是实现了JavaEE部分的规范。

Spring 和 JavaEE

Spring 出现自 2003 年,此时 J2EE 1.4 已经出现,但是使用 J2EE 进行编程比较复杂,所以 Spring 的出现是为了简化 Java Web 编程,但是 Spring 的各种组件也实现了部分 JSR 。

Over time, the role of Java EE in application development has evolved. In the early days of Java EE and Spring, applications were created to be deployed to an application server. Today, with the help of Spring Boot, applications are created in a devops- and cloud-friendly way, with the Servlet container embedded and trivial to change. As of Spring Framework 5, a WebFlux application does not even use the Servlet API directly and can run on servers (such as Netty) that are not Servlet containers.

常用的轻量级容器

三个容器的比较 Comparison between Guice, PicoContainer and Spring , Benchmark Analysis: Guice vs Spring

TomEE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## 启动,停止 glassfis
bin/asadmin.bat start-domain
bin/asadmin.bat stop-domain

## 启动,停止 数据库
bin/asadmin.bat start-database
bin/asadmin.bat stop-database

## 查看 asadmin 支持的命令
bin/asadmin.bat list-commands
## 查看 commands 的帮助信息
bin/asadmin.bat <commands> --help

## 启动 glassfish 后就可以使用下面的命令
## 编译 /opt/glassfish4/docs/javaee-tutorial/examples
mvn -Dglassfish.home='C:\cygwin\opt\glassfish4' -Dglassfish.executables.suffix='.bat'
-Dmaven.test.skip=true package

现代的 JAVAEE 应用服务器:WildFly, Payara, WebSphere Liberty, Profile and TomEE

domain 和 多实例

tomcat 可以使用 CATALINA_BASE 来实现多实例,而在 GlassFish 这类 JAVA EE 服务器中通常都有一个 domain 的概念,但是这个 domain 比多实例要复杂的多,但是有一点类似的是部署在同一个 domain 和 同一个 tomcat 实例中的不用应用,通常是共享同样的资源配置。

参考

  1. Apache TomEE
  2. Spring to Java EE Migration
  3. Java(TM) EE 8 Specification APIs
  4. Java EE Specifications
  5. Java EE 8 First Cup
  6. Java EE 8 Tutorial
  7. Java Platform, Enterprise Edition (Java EE) 7
  8. Oracle WebLogic Server 12.2.1.3.0
  9. Java™ EE 8 Technologies
  10. Java EE Specifications
  11. Spring Framework 实现的规范
  12. Java Platform, Enterprise Edition wiki
  13. The Eclipse Enterprise for Java Project
  14. Jetty and Java EE Web Profile
  15. Inversion of Control Containers and the Dependency Injection pattern
  16. Why Use the Spring Framework?
  17. How to use Tomcat 8.5.x and TomEE 7.x with Eclipse?
  18. Apache Tomcat Versions
  19. Java EE SDK Downloads
  20. Java EE—the Most Lightweight Enterprise Framework?
  21. Stop saying “heavyweight”
  22. Unit Testing for Java EE
  23. Tomcat 多实例