一个Java EE web app运行在Java EE application server和web container中。每个EE app server都含有一个web container,用于管理servlet的生命周期,映射request URL到servlet的代码,接收和响应HTTP请求,管理filter链。如果我们不需要整个Java EE的功能,单独的web container可以提供轻载的解决方案。
Apache Tomcat是一个轻载的web container,可以通过集群方式来处理大流量,但它不是一个完整的application server,缺乏很多Java EE组件,例如Java Persistence API,Bean Validation API和Java Message Service。不过,通常都已经足够使用了,我们现在创建的并不是什么企业内部应用,一般是对外提供web服务。那些企业内部应用,通常都依赖于IE控件,很是讨厌。另一个更重要的一个选择原因就是很流行,容易使用。如果要使用全功能,可以用Apache TomEE或者Apache提供的另一个个开源项目Geronimo,这两个都是经过Oracle认证的Java EE 应用服务器,对Java EE规范全兼容。
GlassFish是一个开源和商用的全Java EE应用服务器,包括一个web container,是从tomcat中衍生的分支产品,现在代码已是面目全非了。GlassFish提供很好的管理界面,强大和部署便捷的集群能力,它总是新版EE推出后最早支持的server。有免费版和商业版。
JBoss是Red Hat的JavaBeans Open Source Software Application Server(JBoss AS),是第二流行的EE server,第一是Tomcat。它是一个完整的Java EE应用服务器。在2014年,改名为WildFly。有开源社区的年费版和Rad Hat的商业版。
其他的web containers有Jetty,Tiny。开源的全EE server的开源版有JOnAs,Resin,Caucho,Enhydra;商业版有Oracle WebLogic和IBM WebSphere。
开发环境中我们一般采用命令行,而非服务的方式。命令行也方便IDE(例如Eclipse)进行调测。先不考虑IDE的debug环境,首先应配置部署的用户。
在conf/tomcat-user.xml中,增加用户,以便进入Tomcat Web Application Manager管理界面,例子如下。当然这样用户名和密码不应该出现在生产环境,开发环境就无所谓了。
<user username="admin" password="admin" roles="manager-gui,admin-gui" />
缺省的Tomcat 8.0编译JavaServer Pages文件使用Java SE 6语言(有些是1.7版本。我们在web.xml中可以查看到,检索compilerSourceVM,可能会查到Compiler source VM. [1.7],这说明缺省是1.7),即便我们运行在Java SE 8,也将使用缺省版本进行编译。因此最好在conf/web.xml中,检索org.apache.jasper.servlet.JspServlet,增加下面的内容:
<init-param>
<param-name>compilerSourceVM</param-name>
<param-value>1.8</param-value>
</init-param>
<init-param>
<param-name>compilerTargetVM</param-name>
<param-value>1.8</param-value>
</init-param>
如果是Windows,我们直接运行Tomcat 8 ,我们会发现运行的VM为1.7(可以在管理界面的Server Status中查看),这个是缺省设置,即便我们安装了1.8也是如此。
当然,我们可以通过startup来启动,就可以使用JAVA_HOME或者JRE_HOME所指定jdk的版本,或者在startup里面人工增加 set JRE_HOME=C:\Program Files\Java\jdk1.8.0_66\来指定。或者写在windows在conf/setenv.bat,Linux中conf/setenv.sh。但是要注意,如果通过tomcat来使用Eclipse,tomcat会覆盖着个文件。
tomcat支持war文件,我们只需要将该文件copy至webapps/目录下,tomcat会自动解压和加载。相反,如果将war文件删除,tomcat很快回检测到并删除解压目录。
在生产环境中,我们通常会留两个版本,以linux环境为例,我们会在webapps/下面创建一个链接文件,指向我们存放版本的地方(该文件通常会带有版本号)。
通过Tomcat->Manager app(http://localhost:8080/manager/html)->WAR file to deploy中加入war文件,然后进行deploy。
我们看到tomcat将war文件copy到webapp/目录下面,并进行解压。undeploy同样也可以在该页面上进行操作。
在Eclipse中的Windows-》Preferences-》Server-》Runtime Environments中进行设置。
Eclipse有一个内嵌浏览器,但是我们经常需要使用浏览器中的一些开发工具,例如查看交互的http消息,如果要切换到其他浏览器。Windows –》Web Browser中进行选择。
在Project中,按右键-》Properties-》Server,缺省为<none>,选择Tomcat v8.0 Server at localhost。
我们还可以在右键-》Properties-》Web Project Settings中设置或者更改Context Root。
相关链接: 我的Professional Java for Web Applications相关文章