在项目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共享

解决方案 »

  1.   

    映射一下子吧。
    在C:\WINDOWS\system32\drivers\etc下的hosts文件内,加两映射
    www.a.com  127.0.0.1
    www.b.com  127.0.0.1用这俩网站访问俩项目。
      

  2.   

    <Context crossContext="true" docBase="/home/apache-tomcat/webapps/second" path="" reloadable="false"/>需要增加我标红的东西。
    你先试试,如果不行,我把我的例子描述给你。
      

  3.   

    在项目A中能通过 HttpSession se = (HttpSession)ContextA.getAttribute("Appsess");取到session,但在项目B中取到的session为空,让我抓狂!请大神们不吝赐教!
      

  4.   

    <Context crossContext="true" docBase="d:/sale_2012" path="/sale_2012" reloadable="false"/>你这个配置的有问题。
      

  5.   

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

  6.   

    你的意思是docBase要指明路径?
      

  7.   

    不是docpath,是<Context path=""...>这个path
      

  8.   

    lz,这个东西我之前也没弄过,我从网上找了个这个方法,按照这个配置确实成功了,你可以看一下,http://www.linuxidc.com/Linux/2012-09/69990.htm
      

  9.   

    按照你这种写法?在docbase里面加上路劲
      

  10.   

    path="/sale_2012"  你在代码里用到了这个路径(/sale_2012),你映射的时候没有。
      

  11.   

    我刚从tomcat管理里面看,似乎sale_2012项目中的session未能创建,这是为何?
      

  12.   

    确定下你项目那么部署是否已经成功。两个项目是否在一个Tomcat部署成功了?
      

  13.   

    谢谢了!session共享已经解决了!尤其谢谢jxsryecheng兄弟,谢谢你耐心的解答!
      

  14.   

    这样的方式不行的,如果A项目中登陆  在B项目中去取。 用多台机器都能访问到A放到servletContext里面的东西 因为servletContext 是全局的  session是局部的  
      

  15.   

    我也出现了一样的问题,请问<context />里面的path属性和docBase属性该怎么写?