一、配置任意目录下的WEB应用程序
一个WEB容器可以运行多个web应用程序,每个WEB应用拥有唯一的上下文根
上下文根得的配置与容器相关,本文以Tomcat为例
%CATALINA_HOME%\webapps目录下的每一个子目录都是一个独立的Web应用,子目录的名字就是该Web应用的上下文根。
例如:应用程序A和应用程序B分别位于%CATALINA_HOME%\webapps\a和%CATALINA_HOME%\webapps\b,则a是A应用的,b是B应用的上下文根。
部署和访问Web应用时,通过上下文路径(context path)区分不同的应用
上下文路径以‘/'开头,末尾无’/‘,默认的上下文中,路径是空字符串“”
部署在webapps目录的应用,在Tomcat启动时,无需额外配置就可直接访问
但,在开发时,经常建立自己的开发目录;为了避免每次都要把文件复制到webapps目录,可以配置虚拟目录对应真实目录。
通过%CATALINA_HOME%\conf\servlet.xml配置文件中设置<Context>元素(Host元素的子元素)完成,一个<Context>表示一个Web应用程序,运行在特定的虚拟主机中。
<Context>元素的常用属性
应用程序A (位于%CATALINA_HOME%\webapps\a )的<Context>配置如下:
<Context path="/a" docBase="a" reloadable="true"/><!--在开发阶段reloadable设为true,可以自动加载WEB-INF/classes目和WEB-INF/lib目录下类的改变,无需重启Tomcat;在发布时,为减小运行时开销,建议不设置,该属性默认值false。
Context元素的防止位置:
1.%CATALINA_HOME%\conf\context.xml 此处设置的信息将被所有web应用程序加载
2.%CATALINA_HOME%\conf\[enginename]\[hostname]\context.xml.default 此处设置的信息将被属于该虚拟主机的所有Web应用加载
[enginename]是server.xml 中<Engine>元素name属性的值,[hostname]是server.xml 中<Host>元素name属性的值
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
默认情况下,[enginename]为“Catalina”,[hostname]“localhost”。
在%CATALINA_HOME%\conf\目录下依次创建Catalina\localhost目录,并在localhost目录下新建context.xml.default文件
3.%CATALINA_HOME%\conf\[enginename]\[hostname]\xxx.xml 其中<Context>的docBase属性是WEB应用的绝对路径名或其归档文件的绝对路径名。
4.在WEB应用的目录结构中增加META-INF\context.xml
目录结构如下图:
在%CATALINA_HOME%\webapps目录下的应用程序,若没有在任何文件中设置<Context>元素,Tomcat将自动为该应用生成<Context>元素,默认的上下文路径以‘/’开头,后面紧跟该应用所在目录的名字;如果目录为ROOT,则上下文路径是一个空字符串(“”)
因而,在%CATALINA_HOME%\webapps目录下的应用程序可以不需配置<Context>,直接使用
tips:ROOT目录下的应用,<Context>元素的path=“”,因而该应用为虚拟主机的默认Web应用,负责处理所有没有分配给其它应用程序的请求,访问http://localhost:8080/ 访问的就是%CATALINA_HOME%\webapps\ROOT目录下的资源
Tomcat5.5之后的版本不建议直接在server.xml文件中配置<Context>元素(Tomcat启动后,无法发布Web应用)
建议在%CATALINA_HOME%\conf\Catalina\localhost\目录下建立xxx.xml文件
例如开发目录为F:\Demo\Test 配置该目录下的应用程序
在%CATALINA_HOME%\conf\Catalina\localhost\目录下建立Test.xml 输入<Context path="/Test" docBase="F:\Demo\Test" reloadable="true"/> Test.xml 文件名Test决定应用的上下文路径,path属性可以省略;访问时输入
http://localhost:8080/Test/
tips: %CATALINA_HOME%\conf\web.xml 定义了运行在同一Tomcat实例中的所有Web应用程序的默认值
Tomcat加载一个应用时,首先读取该文件,之后才读取WEB-INF/web.xml文件
WAR文件(将多目录和文件的Web应用程序打包压缩成Web归档文件,类似于把Java类文件打包成JAR文件)
打包之前需建立正确的目录层次结构,可借用压缩工具,也可在命令行下完成打包
命令打包 jar -cvf xxx.war * 注意空格
如果不想打包src目录下的源文件(发布时不应包含源文件),可使用如下命令:
jar -cvf xxx,war *.html WEB-INF/
查看WAR文件内容命令:
jar -tf xxx.war
修改了WEB-INF下的某个文件a.class 命令:
jar -uf xxx.war WEB-INF/a.class
此时,应用的部署不再按照目录层次结构,而是把WAR文件作为部署单元使用,一个WAR文件就是一个Web应用程序
(不包括Web应用程序的层次结构的根目录)
将xxx.war 文件复制到%CATALINA_HOME%\webapps目录下,Tomcat启动时,会自动解压缩WAR文件,并在webapps目录下新建一个子目录xxx
也可以直接从WAR文件运行程序 配置%CATALINA_HOME%\conf\server.xml 的Host元素, 属性unpackWARs="true" 设为false即可。
建议在开发阶段不是用WAR(修改较多,不方便);在产品发布时,使用较适宜。