今天在一个服务下面需要提供一个超链接到另外的域中,但是在结果中,一旦弹出了新的页面,老的域中的会话(session)就会失效,最后发现居然是Tomcat的配置问题,我遇到的是两个Tomcat在同一台服务器上面,对应不同的端口和路径。
 
对一个Tomcat,可以配置多台虚拟主机。简单地说,就是让一台服务器可以对应多个主机名。这在Tomcat中称之为Host。要求每个Host的Name必须唯一。
配置方法:
在$CATALINA_HOME/conf/server.xml中定义了所有的Host。Tomcat默认会建立一个localhost的虚拟主机,如下:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
其中,
appBase指定了该虚拟主机上应用的部署位置。一般填写相对于CATALINA_HOME的相对路径即可。
其他参数可以参考Tomcat文档。
在一个Host上,可以部署多个应用。每个应用都有不同的Context Path。Context Path会出现在用户访问该应用的URL中。例如, 如果指定了应用的Context Path为/ABC,该应用的URL可能就是http://localhost:8080/ABC,。自然有人会问,可不可以没有Context Path呢?我的理解是可以只有Root Context,即Context Path就是/。如此一来,上例中的URL就变成http://localhost:8080/。
配置方法:
在$CATALINA_HOME/conf/server.xml中,对于每个Host而言,都可以通过Context子元素指定其Root Context所在位置。如下:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="webapps/docs" path="/"
privileged="true" antiResourceLocking="false" >
</Context>
</Host>

<Context path="/xxx" docBase="D:\xxx" debug="0" reloadable="true" crossContext="true" />

path 指出你的访问路径All of the context paths within a particular Host must be unique,

本人遇到的问题就是path相同导致每次跨域session就失效。

docBase指出你的存放路径

debug 为设定debug的等级0提供最少的信息,9提供最多的信息

reloadable=true时 当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务

crosscontext="true"表示配置的不同context共享一个session