context root确定了Tomcat将那些URL请求转发到Web应用. 如果应用的context root 设置为 myapp,除非存在更为明确context root的 Web应用,那么所有 /myapp or /myapp/* 的请求将被转发到你的应用进行处理,. 如果第二个应用context root设置为 myapp/help, 那么 /myapp/help/help.jsp 的请求将转发到第二个应用进行处理,而不是第一个应用。
这个关系同样适用于被称为root context / 的context root . 当应用被指定为root context, 它将会响应没有被明确context root处理的所有请求.
应用的context root 取决于应用的部署方式. 如果Web应用作为 EAR 包的一部分进行部署, 那么context root 将通过 EAR包里的application.xml 文件中web模块 context-root元素设置. 在下面的例子里, crimeportal.war应用的context root 设置为 crimeportal.
<?xml version=”1.0″ encoding=”UTF-8″?>
<application>
<display-name>Crime Portal</display-name><module>
<web>
<web-uri>crimeportal.war</web-uri>
<context-root>/crimeportal</context-root>
</web>
</module><module>
<ejb>CrimePortalBeans.jar</ejb>
</module></application>
对于部署在 EAR 文件以外的Web应用, 可以通过两种方式指定 context root. 比如我们要把context root从crimeportal 改为launder 。第一种方法就是修改application.xml ,把<context-root>/crimeportal</context-root> 改为<context-root>/launder</context-root>
第二种方式是注释上面的那段<context-root>/crimeportal</context-root>,在 WEB-INF/jboss-web.xml 文件中指定.
<jboss-web>
<context-root>launder</context-root>
</jboss-web>
如果两个文件中都进行的指定,会以application.xml的为准。如果没有指定 context root , 将使用 WAR 文件的文件名作为context root. 对于 crimeportal.war, context root 将被缺省设置为 crimeportal. 唯一的例外是特殊的名称 ROOT. 为了部署 root context的Web应用, 只需要将其命名为 ROOT.war,但是JBoss 已经在 jbossweb-tomcat55.sar 目录中包含了ROOT.war. 因此你需要将JBoss自带的ROOT.war 删除或者改名.
采用context root 作为WAR文件的名称是一个非常好的实践,这不仅减少了管理的配置设置数量,而且将会使Web应用的用途更加明确,从而提高了可维护性。.