Servlet&JSP的那些事儿(二十五)

来源:互联网 发布:昆士兰会计硕士知乎 编辑:程序博客网 时间:2024/05/21 10:21

web应用程序分为开发和部署两个阶段。通过部署,能实现组件与组件之间的松耦合,降低web应用的维护难度。本篇主要讨论如何配置任意目录下的web程序以及如何以war文件的形式发布web程序。我们首先讨论如何配置任意目录下的web程序。

配置任意目录下的web程序

一个web容器可以运行多个web程序,每个web程序都有一个唯一的上下文根,上下文根如何部署是和具体的web容器相关的。对于tomcat来说,安装目录下的webapps文件夹下的每一个子目录都是一个独立的web应用程序,这个子目录的名字就是这个web应用程序的上下文根。我们在之前开发并编译好web应用程序源码后,会把程序拷贝到webapps文件夹下。当tomcat启动时,会自动加载该文件夹下的程序,所以我们不需要其他配置就可以直接访问。但是如果我们每完成一个功能,为了测试,都需要将文件复制到webapps文件夹下对应的目录中,那也太繁琐了。

在web服务器中可以配置虚拟目录,虚拟目录对应的真实目录可以在任何路径下。同样,tomcat中,也有类似的配置。我们需要在xml配置文件中通过<Context>元素的设置来完成。

className ,指定实现org.apache.catalina.Context接口的Java类名。如果没有指定,使用标准实现org.apache.catalina.core.StandardContext。 

cookies,如果想利用cookies来传递session identifier(需要客户端支持cookies),设为ture。否则为false,这种情况下只能依靠URL Rewriting传递session identifier。

crossContext,如果想在应用内调用ServletContext.getContext()来返回在该虚拟主机上运行的其他web application的request dispatcher,设为true。在安全性很重要的环境中,设为false,使得getContext()总是返回null。缺省值为false。

docBase,该web应用的文档基准目录(Document Base,也称为Context Root),或者是WAR文件的路径。可以使用绝对路径,也可以使用相对于context所属的Host的appBase路径。

path,web应用的context路径。catalina将每个URL的起始和context path进行比较,选择合适的web应用处理该请求。特定Host下的context path必须是惟一的。如果context path。

reloadable,如果希望Catalina监视/WEB-INF/classes/和/WEB-INF/lib下面的类是否发生变化,在发生变化的时候自动重载web application,设为true。这个特征在开发阶段很有用,但也大大增加了服务器的开销。因此,在发布以后,不推荐使用。但是,你可以使用Manager应用在必要的时候触发应用的重载。 

unpackWAR,如果为true,tomcat在运行web应用程序前将展开所有压缩的web应用程序。默认值为true。

WAR文件

如果一个web应用程序的目录和程序非常多,那么将该web应用程序部署到另一台机器上就不是很方便了。我们可将web应用程序打包为web归档(WAR)文件,这个过程和把java类文件打包成JAR文件的过程类似。利用WAR文件,可以把servlet类文件和相关的资源集中到一起进行发布。

如果利用命令行来打包的话,可以进入dos命令,然后切换到web工程所在目录。执行如下命令:

jar -cvf 工程名.war *

即可将工程所有的子目录和文件都打包成一个名为工程名.war的归档文件。如果不想包含src目录下的java源文件,可以执行下面的命令:

jar -cvf 工程名.war *.html WEB-INF/

如果使用eclipse开发web应用程序。那么只需要先再eclipse中配置tomcat插件,然后建立一个web工程。右键单击web工程,选择export,选择web,WAR file,再输入要打包的文件名和目标目录即可。eclipse tomcat插件下载地址为:http://www.eclipsetotale.com/tomcatPlugin.html(将得到的压缩包解压,放入 eclipse 的 plugins 目录中重启 eclipse, Tomcat 插件就会安装成功)

转载请注明出处:http://blog.csdn.net/iAm333