日期:2014-05-17  浏览次数:20802 次

同一个tamcat下发布两个web项目,session共享的问题
在项目A中,登录时,将session放到context中:
ServletContext ContextA = session.getServletContext(); 
        ContextA.setAttribute("Appsess", session); 
        HttpSession se = (HttpSession)ContextA.getAttribute("Appsess");
在项目B中,写一个过滤器,过滤器中的代码如下:
……
HttpSession session1 = (HttpSession) arg0.getSession();;  
        ServletContext Context = session1.getServletContext();  
ServletContext ContextA= Context.getContext("/sale_2012");      
   HttpSession session2 =(HttpSession)ContextA.getAttribute("Appsess");  

……

tomcat的server配置如下:
 <Host name="127.0.0.1"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/sale_2012" path=""  reloadable="true" crossContext="true" >
<Resource name="jdbc/default" auth="Container" description="DB Connection" type="javax.sql.DataSource" 
maxActive="20" 
maxIdle="4"
maxWait="10000"
username="***"
password="***"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL"
/>
</Context> 
</Host>

 <Host name="127.0.0.1"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/springmvcweb" path=""  reloadable="true" crossContext="true" >
<Resource name="jdbc/default" auth="Container" description="DB Connection" type="javax.sql.DataSource" 
maxActive="20" 
maxIdle="4"
maxWait="10000"
username="***"
password="***"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL"
/>
</Context> 
</Host>

但从项目B中的过滤器中由context中取出来的session2就是为空,百思不得其解。请求大神指点!
tomcat???session共享

------解决方案--------------------
<Context crossContext="true" docBase="d:/sale_2012" path="/sale_2012" reloadable="false"/>

你这个配置的有问题。
------解决方案--------------------
path="/sale_2012"  你在代码里用到了这个路径(/sale_2012),你映射的时候没有。
<Context crossContext="true" docBase="d:/xxx/tomcat/webapp/sale_2012" path="/sale_2012" reloadable="false"/>