应用程序服务器和Web容器

应用程序服务器和Web容器

第一节 选择Web容器

  Java EE Web应用程序运行在Java EE应用服务器和Web容器(也称为Servlet容器)中。 尽管Java EE规范由许多更小的子规范组成,但大多数Web容器都只实现了Servlet、JSP和JSTL规范。这不同于实现了完整Java EE规范的成熟Java EE应用服务器。每个应用服务器都包含了一个Web容器,用于管理Servlet的生命周期、将请求URL映射到对应的Servlet代码、接受和响应HTTP请求以及管理过滤器链(在适用的时候)。不过,独立运行的Web容器通常是轻量级的,并且易于使用(如果不需要使用Java EE的所有特性的话)。

  选择Web容器(或应用服务器)要求对项目的需求进行认真的研究和考虑。在选择Web容器时有多种选项,每种容器都有自己的优点和不足。也可以同时使用多种不同的Web容器。例如,可以选择在个人计算机上使用Apache Tomcat用于本地测试,在生产环境中使用GlassFish。

1.1 Apache Tomcat

  Apache Tomcat是目前最常见和最流行的Web容器。Sun公司的软件工程师最初创建了该Web容器,称为Sun Java Web Server,它也是Java EE Servlet规范最初的参考实现。之后在1999年,Sun将它捐献给了Apache Software Foundation,就在此时它变成了Jakarta Tomcat,并最终变成了Apache Tomcat。另外很有意思的是Apache对Tomcat的改进引起了Apache Ant构建工具的发展,该构建工具在今天已经被数以千计的商业和开源项目所使用。

  Tomcat的主要优点是占用内存小、配置简单以及长期的社区参与。通常,开发者可以在5到10分钟内安装并运行Tomcat安装包成功,包括下载时间。Tomcat 只需要很少的额外配置即可在开发计算机上成功运行,经过调优之后,也可以在高负载、高可用性的生产环境中使用。你可以创建出庞大的Tomcat群集,以可靠的方式处理大量通信。因为Tomcat简单并且使用的是轻量级架构,所以它经常被用于商业生产环境中。不过与许多竞争者相比,它在配置服务器时缺少复杂的Web管理界面。相反,Tomcat只提供了处理基本任务的简单界面,包括部署和卸载应用程序。对于更详细的配置,管理员必须操作一组XML和Java属性文件。另外,因为它不是一个完整的应用服务器,所以缺少了许多Java EE组件,例如Java Persistence API、Bean Validation API和Java Message Service。

  可以想象的是,Tomcat可以完美地完成许多任务,但不能轻松地部署复杂的企业级应用程序,有时甚至是不可能的。如果你喜欢Tomcat但需要一个完整的Java EE应用服务器,那么可以考虑使用Apache TomEE,该服务器基于Tomcat构建,但提供了对于Java EE组件的完整实现。由于它是基于Tomcat构建的,因此它有着Tomcat社区的完全支持,以及超过10年的测试。Apache还提供了另一个开源的完整Java EE应用服务器:Geronimo。

  Tomcat提供了Servlet、Java Server Pages(JSP)、Java Unified Expression Language(EL)和WebSocket规范。表2-1列出了几个Tomcat版本和它们所实现的规范。目前只有Tomcat 6、7、8仍然能得到支持。版本3.3、4.1和5.5已经在多年前停止了开发。在Tomcat网站上可以获得更多关于Apache Tomcat的详细信息。

Tomcat版本和它们的规范

1.2 GlassFish

  GlassFish服务器是一个开源的、也是商业的完整Java EE应用服务器实现。它提供了Java EE规范的所有特性,包括Web容器,而且它目前还是Java EE规范的参考实现。它的Web容器实际源自于Apache Tomcat;不过自从使用Tomcat核心创建了GlassFish之后,它已经做出了重大的改变,初始的代码已经很难识别出来了。

  GlassFish的开源版本由社区提供支持,而Oracle的商业GlassFish服务器版本由Oracle公司提供收费的商业支持。Oracle将只为Java EE 7之前的版本提供商业支持。从Java EE 8开始,GlassFish将不再包含商业支持选项。

  GlassFish的一个优势是它的管理界面,可以通过图形Web用户界面、命令行界面和配置文件等方式对服务器进行设置。服务器管理员甚至可以使用管理界面在GlassFish群集中部署新的GlassFish实例。作为参考实现,无论何时规范被更新,它都将是第一个实现新版本规范的服务器。GlassFish的第一个版本在2006年5月发布,它实现了Java EE 5规范。在2007年9月发布的版本2.0添加了对完整群集能力的支持。版本3.0作为Java EE 6的参考实现,在2009年12月发布——包含几个企业级特性的改进。该版本代表着GlassFish流行度的转折点,它变得非常易于管理企业级群集GlassFish环境。在2011年7月,版本3.1.1改进了几个企业级特性并添加了对Java SE 7的支持,尽管所需的最小版本仍然是Java SE 6。在2013年6月发布的GlassFish 4.0作为Java EE 7的参考实现,所需的最小版本是 Java SE 7。

1.3 JBoss和WildFly

  截至2013年初,Red Hat的JavaBeans Open Source Software Application Server (JBoss AS)是仅次于Tomcat、第二流行的Java EE服务器。从历史上看,JBoss AS已经是一个支持Enterprise JavaBeans(EJB)和一些Java EE特性的Web容器。最终它通过了Web Profile的认证,并在2012年通过了完整Java EE应用服务器的认证。随着时间的流逝,JBoss变成了提供几种产品的开发社区(例如Apache)和商业JBoss企业级应用平台的代名词。该应用服务器一直使用JBoss AS作为名字直到版本7.1.x,到了2012年,社区觉得由于其他JBoss项目的存在,该名字会引起许多混乱,因此在2014年初发布的应用服务器被重命名为WildFly。

  类似于GlassFish,WildFly由JBoss社区提供免费支持,由Red Hat提供收费的商业支持。它有一套完整的管理工具,并如同Tomcat和GlassFish一样提供了群集和高可用性。JBoss AS从版本4.0.x到4.2.x都是基于Tomcat 5.5构建的,并且支持Java EE 1.4的特性。版本5.0引入了对Java EE 5的支持以及一个全新的Web容器,而版本5.1则包含了一些Java EE 6特性的早期实现(尽管它仍然是 Java EE 5应用服务器)。JBoss AS 6.0实现了Java EE Web Profile,但它并未追求通过Java EE 6应用服务器的认证。JBoss AS 7.0代表着对产品完整的重写,极大地减少了内存占用并提高了性能,另外它只支持Java EE 6 Web Profile。直到JBoss AS 7.1,它才再次成为完整的应用服务器,在Java EE 6发布两年之后通过了Java EE 6认证。WildFly 8.0是一个完整的Java EE 7应用服务器,它要求使用的Java SE最小版本为Java SE 7(实际上,所有Java EE 7应用服务器和Web容器都要求Java SE的最小版本为 Java SE 7)。

1.4 其他容器和应用服务器

  现在有多种Web容器(例如Jetty和Tiny)和开源的完整Java EE应用服务器(例如JOnAS、Resin、 Caucho和Enhydra)可供选择。另外还有大量的商业完整应用服务器,其中Oracle WebLogic和IBM WebSphere是最流行的。表2-2显示出了其中的一些服务器和它们不同版本所支持的Java EE规范。

容器和应用服务器版本

  每种Web容器或应用服务器都有自己的优点和不足,你必须理解自己的组织项目的需求,然后选择符合需求的正确Web容器或应用服务器。因为商业应用服务器的许可通常价格很高,所以必须考虑运营预算。所有的这些因素都将影响你的决定。


第二节 应用服务器的使用

  Tomcat等应用服务器的安装、配置和使用在互联网上有很多文档资料,此处无需再复制粘贴。

  配合IDE工具,通过DEMO项目了解应用服务器的功能。


参考博客和文章书籍等:

《JavaWeb高级编程——涵盖WebSockets、Spring Framework、JPA Hibernate和Spring Security》

因博客主等未标明不可引用,若部分内容涉及侵权请及时告知,我会尽快修改和删除相关内容