Tomcat7动态部署的研究

(整期优先)网络出版时间:2013-06-16
/ 3

Tomcat7动态部署的研究

秦毅

秦毅

(重庆电子工程职业学院,重庆401331)

摘要:Web应用程序可以通过在Web服务器启动之前进行部署,这种静态部署的方式并不灵活,部署和卸载都需要对服务器进行操作,而动态部署则可以在服务器运行的状态下部署Web应用程序。Tomcat7通过自带的Web应用程序manager,全面支持动态部署,并且能够对服务器中Web应用程序进行管理。

关键词:Web服务器;静态部署;动态部署;Web应用程序

中图分类号:[G714]文献标识码:A文章编号:1671-6035(2013)06-0000-01

一、引言

动态部署,名如其意,就是在Web服务器运行时部署依赖它的Web应用程序。对于所欲的Web服务器来说,动态部署是一个非常有必要实现的功能,除了能部署新的Web应用程序之外,还能够对存在的项目取消部署,而这些都是在服务器仍处于运行状态的情形下实现的。本文以ApacheTomcat服务器为例,对其动态部署的方式进行研究。

二、Tomcat7简介

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,依照原SunMicrosystems提供的技术规范,实现了对Servlet和JavaServerPage(JSP)的支持,并提供了作为Web服务器的一些特有功能[1]。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。因为同属于Apache软件基金会的下属项目,经常会有程序员混淆ApacheWebServer和Tomcat,认为它们就是一个服务器;其实不然,ApacheWebServer是一个用C语言实现的HTTPWebServer,一个完全的Web服务器。

Tomcat7始于2010年,最初的版本是7.0.0beta,在2011年1月11日发布的Tomcat7.0.6已经成为稳定版本,这是Tomcat7分支的第一个稳定版本,用来取代2007年2月发布的Tomcat6,Tomcat7修复大量的原有bug,包括其中各个模块,如Catalina,Coyote,Jasper等,其中包括一些比较严重的如内存泄露问题,线程安全问题等。

三、Tomcat7下实现动态部署

Tomcat通过自带的Web应用程序manager来实现对容器中的Web应用程序目录或是WAR文件进行动态部署。

1.manager权限设置。

由于版本的更新,Tomcat7和6相比较,在权限配置方面变的更细微,原来Tomcat6中的manager应用程序的权限在7中被细分为4种,这些权限的名字都被定义在Tomcat7提供的manager应用程序目录下的\WEB-INF\web.xml文件中,它们是分别是manager-gui,manager-status,manager-script和manager-jmx,其描述见表1。

表1

其中HMTL接口包含manager应用中的图形界面,有效能防止跨站点伪造请求(Cross-SiteRequestForgery,CSRF)的攻击,但是text和JMX就不具备这样的能力。text接口通过查询字符串的方式在地址栏用manager支持的指令管理容器内的Web应用程序。这里以manager-gui为例,来看一下web.xml文件中权限的设置和角色的声明,代码如下:

<security-constraint>

<web-resource-collection>

<web-resource-name>HTMLManagerinterface(forhumans)</web-resource-name>

<url-pattern>/html/*</url-pattern>

</web-resource-collection>

<auth-constraint>

<role-name>manager-gui</role-name>

</auth-constraint>

</security-constraint>

MemoryRealm是域(Realm)的一种,用来读取保存在\conf\tomcat-users.xml文件中的角色和用户名、密码的关联信息。

在tomcat-user.xml文件中配置角色和管理用户的代码如下:

<rolerolename="manager-script"/>

<rolerolename="manager-gui"/>

<rolerolename="manager-jmx"/>

<rolerolename="manager-status"/>

<userusername="admin-proxy"password="s3cret"roles="manager-gui,manager-script,manager-jmx,manager-status"/>

tomcat-users.xml文件可以设置不同的角色,使用这些角色名和权限的前提条件是在包含它们的Web应用程序目录下的web.xml中声明。

当完成上述操作之后,便可以通过浏览器打开tomcat的欢迎界面,选择“ManagerApp”入口,把tomcat-users.xml文件中自定义的用户名和密码在弹出的登录对话框中输入,即进入tomcat7中的manager应用中,动态的配置当前tomcat容器中所有被部署的Web应用程序,包括manager本身。

2.图形化的动态部署。

完成Tomcat7中manager应用的权限配置后,在命令提示符下启动Tomcat服务器,在浏览器中输入http://localhost:8080进入Tomcat的欢迎界面,选择“ManagerApp”入口,在弹出的用户名和密码对话框中输入tomcat-users.xml配置好的用户名和密码,则可以进入图形化动态部署模式。

图形化部署模式提供下列9种功能:

•通过直接指定WAR文件,部署一个新的Web应用程序

•通过在服务器文件系统中指定Web应用程序的上下文路径来部署一个新的应用

•提供服务器中当前被部署的所有Web应用程序列表和这些应用中被激活的会话信息

•通过对\WEB-INF\classes和\WEB-INF\lib目录中文件的监视和反射,重新加载容器中已存在的Web应用程序

•提供当前操作系统和Java虚拟机的属性列表

•提供可用的全局可用的JNDI资源列表,在部署工具中通过在<Context>部署描述符中嵌入<ResourceLink>元素即可访问JNDI资源

•启动已经停止的Web应用程序

•停止正在运行的Web应用程序

•卸载已经部署的Web应用程序,并删除其根目录的文档

图形话部署模式可以是开发人员方便快捷对Web应用程序进行部署,并对容器中存在的应用进行管理。

3.指令化的动态部署。

除了图形化的部署方式外,manager应用程序还提供指令化的动态部署模式。指令化的部署实际上是在地址栏通过text接口输入部署的指令和参数即可实现指令化的部署模式,所有manager已知的指令通过在独立的请求URI指定而被执行。

指令化的动态部署模式URI格式如下:

http://{host}:{port}/manager/text/{command}?{parameters}

{command}代表manager应用下程序员需要执行的指令,{parameters}表示针对URI中的指令提供的查询参数。

manager中常用指令如下:

list:提供Tomcat容器中当前Web应用程序列表

reload:重新加载Web应用程序

serverinfo:服务器信息

sessions:会话管理

start:启动Web应用程序

stop:停止Web应用程序

deploy:部署新的Web应用程序

undeploy:卸载存在的Web应用程序

这些指令有些可以单独使用,如list,而大部分需要使用“?”连接参数一起使用,manager应用提供的参数包括path、version、war等。

本文主要阐述deploy指令部署新的Web应用程序。

通过Web应用程序上下文部署

http://localhost:8080/manager/text/deploy?path=/foo

其中Web应用程序的上下文通过path参数指定为/foo。

通过URL部署Web应用程序目录

http://localhost:8080/manager/text/deploy?path=/footoo&war=file:/path/to/foo

其中Web应用程序的上下文通过path参数指定为/footoo,程序目录则通过war参数指定,由于部署的是文件目录,所以需要指定文件协议file。

通过URL部署WAR

http://localhost:8080/manager/text/deploy?war=jar:file:/path/to/bar.war!/

使用URL部署WAR的特殊之处在于需要把jar和file连接使用,并且WAR文件不能在URL中以扩展名war结束,需要在之后添加“!/”。

通过HostappBase部署Web应用程序目录

http://localhost:8080/manager/text/deploy?war=foo

HostappBase表示服务器的应用程序跟目录,在Tomcat中即为webapps,使用这种方式部署需要事先把Web应用程序目录拷贝到appBase中,不需要指定应用程序的上下文,直接提供Web应用程序在appBase下的相对路径即可。

通过HostappBase部署WAR

http://localhost:8080/manager/text/deploy?war=bar.war

和部署目录方式一致,通过HostappBase部署WAR时,事先要把WAR文件拷贝到appBase目录下,然后使用war参数直接指定WAR文件即可。

四、总结

Tomcat7作为一款灵巧的HTTP服务器,最新版本已经提供了对Servlet3.0和JSP2.3的支持。通过Tomcat7提供的动态部署方式能够简单快速的对Web应用程序进行部署,使用图形化的模式直观且方便,并且可以轻松的对容器中已经部署的Web应用程序和会话进行管理;指令化的模式能够让程序员以更快捷的方式对Web应用程序进行部署和卸载,前提是熟悉manager下的指令和参数。

参考文献:

[1]维基百科.ApacheTomcat.2013-6.[DB/OL]http://zh.wikipedia.org/wiki/Apache_Tomcat

[2]孙卫琴.Tomcat与JavaWeb开发技术详解(第2版).电子工业出版社[M].2009-1。

[3]BudiKurniawan著.曹旭东译.深入剖析Tomcat.机械工业出版社[M].2012-1。