`

java - 同一个Tomcat不同Web应用之间共享会话Session

    博客分类:
  • java
 
阅读更多

查看tomcat 关于 HTTP Connector 中有个emptySessionPath 其解释如下:

If set to true, all paths for session cookies will be set to /. This can be useful for portlet specification implementations. If not specified, this attribute is set to false.
A side effect to setting this to true, is that if Tomcat creates a new session it will attempt to use the cookie session id if supplied by the client.

设置为true 发现没有用 在网上搜了一下方法 基本是这样的:

由于每个WEB应用程序都有一个唯一的一个ServletContext 实例对象,自己下面的所有的servlet 共享此ServletContext

利用ServletContext 中的setAttribute() 方法把Session 传递过去 然后在另外一个WEB程序中拿到session实例。

1: 修改Tomcat---conf----server.xml文件

     把 <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" x  mlValidation="false"></Host> 修改为:


 <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" x  mlValidation="false">

    <Context path="/项目A" reloadable="false" crossContext="true"></Context> 
      <Context path="/项目B" reloadable="false" crossContext="true"></Context>

  </Host>

注意 crossContext 属性在帮助文档中意思

crossContext: Set to true if you want calls within this application to ServletContext.getContext() to successfully return a request dispatcher for other web applications running on this virtual host. Set to false (the default) in security conscious environments, to make getContext() always return null.

设置为true 说明你可以调用另外一个WEB应用程序 通过ServletContext.getContext() 获得ServletContext 然后再调用其getattribute() 得到你要的对象.

2:  在项目A中,写入以下代码:

我们假定 项目A 为/myweb

  项目B为 /w2


   //以下内容用于测试同一tomcat下不同项目之间共享session 
    HttpSession session = req.getSession();

session.setAttribute("name", "xbkaishui");

session.setMaxInactiveInterval(6565);

  ServletContext ContextA =req.getSession().getServletContext();

  ContextA.setAttribute("session", req.getSession());

//测试

out.println("IN SessionRangleServlet name : "+session.getAttribute("name"));

3.在项目B中,写入以下代码取出Session

  HttpSession session1 =req .getSession();  

        ServletContext Context = session1.getServletContext();  

// 这里面传递的是项目a的虚拟路径

        ServletContext Context1= Context.getContext("/myweb");

         System.out.println(Context1);

        HttpSession session2 =(HttpSession)Context1.getAttribute("session");

        System.out.println("base传过来的user为:"+session2.getAttribute("name"));

然后重新部署就行了。

 

原文参考: http://www.codesky.net/article/201104/174499.html

分享到:
评论

相关推荐

    tomcat-redis-session-manager-1.2-tomcat-7-java-7

    总之,"tomcat-redis-session-manager-1.2-tomcat-7-java-7"这个组件为Tomcat提供了一种利用Redis存储session的解决方案,通过Apache Commons Pool和Jedis实现了连接管理和通信,从而提高了Web应用的可扩展性和健壮...

    tomcat-redis-session-manager tomcat+nginx+redis集群所需jar

    这个"tomcat-redis-session-manager tomcat+nginx+redis集群所需jar"压缩包提供了在这样的架构中实现会话共享所需的Java类库。下面将详细解释其中涉及的技术点: 1. **Apache Tomcat**: Apache Tomcat是一款开源的...

    tomcat-redis-session-manager包集合下载(tomcat8)

    【标题】"tomcat-redis-session-manager包集合下载(tomcat8)"涉及的主要知识点是将Redis集成到Tomcat中管理会话(session),以提高Web应用的性能和可扩展性。 【描述】中提到的"所需的tomcat-redis-session-...

    tomcat-redis-session-manager-1.2-tomcat-6&7

    标题 "tomcat-redis-session-manager-1.2-tomcat-6&7" 指的是一个用于在Tomcat服务器中集成Redis作为session管理器的组件。这个组件使得Web应用程序可以利用Redis分布式缓存系统来存储和管理用户的会话数据,从而...

    session 共享 tomcat-redis-session-manager 所需要的jar (绝对可用)

    这里提到的"session 共享 tomcat-redis-session-manager"就是一种解决方案,它利用Redis作为中央存储来实现Tomcat容器中的Session共享。 首先,我们来看看标题所提及的"session 共享 tomcat-redis-session-manager...

    tomcat-redis-session-tomcat tomcat集成redis实现tomcat集群session共享jar包

    标题中的“tomcat-redis-session-tomcat”指的是一个项目或解决方案,它的目的是在Tomcat应用服务器集群中实现session共享,通过集成Redis作为session存储。这个解决方案允许在多个Tomcat实例之间共享用户会话,从而...

    Tomcat 同一服务器上 不同web项目共享session的

    当我们在同一台服务器上部署多个Web项目时,有时需要实现不同Web项目之间的session共享,以便用户在访问一个项目时的数据能够在其他项目中继续有效。本篇文章将深入探讨如何在Tomcat服务器上实现在不同Web项目之间...

    适配与Tomcat7、8、9的redis session共享jar包

    "适配与Tomcat7、8、9的redis session共享jar包"指的是一个专为Apache Tomcat服务器设计的解决方案,用于在多台Tomcat服务器之间共享用户会话数据。这个解决方案主要依赖于Redis,一个高性能的键值存储系统,来存储...

    tomcat-redis-session-manager

    `tomcat-redis-session-manager`就是这样一款解决方案,它将Tomcat的session管理与Redis相结合,实现了跨服务器的session共享。 首先,让我们理解`tomcat-redis-session-manager`的核心概念。这是一个开源项目,它...

    tomcat8-redis-session共享

    这是一个常见的需求,特别是在分布式系统中,为了保持用户会话的一致性,需要将Session数据在多台服务器之间共享。Redis作为一个高性能、内存中的键值数据库,常被用作Session的中央存储,因为它提供了高效的数据...

    nginx实现多个tomcat7直接session共享所需jar包

    标题中的“nginx实现多个tomcat7直接session共享所需jar包”指的是在分布式系统环境中,使用Nginx作为反向代理服务器,将用户请求分发到多个Tomcat7应用服务器上...在分布式系统中,session共享是...

    tomcat-redis-session-manager jar包

    【标题】"tomcat-redis-session-manager jar包"是一个用于集成Redis进行Session管理的Java库,特别设计用于Apache Tomcat服务器。这个库使得在多台Tomcat服务器之间共享和协调用户的Session数据成为可能,从而提高了...

    tomcat7-redis-session-manager-java6-2.0.0.zip

    标题中的"tomcat7-redis-session-manager-java6-2.0.0.zip"指的是一个针对Tomcat 7的Redis Session Manager实现,版本为2.0.0,且兼容Java 6环境。这个组件的主要功能是将Tomcat服务器中的用户会话(Session)数据...

    tomcat7+redis单点 session共享jar

    在现代Web应用开发中,确保用户会话在多个服务器之间无缝切换是一项重要的任务。这通常通过session共享技术来实现,特别是在分布式系统环境中。本资源"tomcat7+redis单点 session共享jar"提供了针对Tomcat7服务器和...

    ngnix tomcat7 redis session manager jar包

    标题 "ngnix tomcat7 redis session manager jar包" 提供了我们正在处理的是一个用于在Tomcat7服务器上利用Redis实现session共享的解决方案。这个解决方案通常涉及到将Web应用程序的会话数据存储在Redis这样的分布式...

    tomcat8-redis实现session共享jar包

    标题中的“tomcat8-redis实现session共享jar包”指的是在Tomcat 8这个流行的Java应用服务器中,通过集成Redis缓存系统来实现session数据的跨服务器共享。这是一个常见的优化策略,尤其在分布式环境中,确保用户在...

    tomcat-redis-session-manager-tomcat-7.zip

    在现代Web应用程序开发中,会话管理是一项至关重要的任务,它确保用户在不同页面之间的交互保持一致性。Apache Tomcat作为广泛使用的Java Servlet容器,提供了丰富的功能来支持会话管理。然而,在分布式环境中,传统...

    nginx+tomcat+redis完成session共享

    2. **Tomcat**:Tomcat是一个广泛使用的Java Servlet容器,用于运行基于Java的Web应用程序。在多台Tomcat服务器环境中,如果session不能共享,用户在切换服务器时可能会失去登录状态。通过引入session共享,即使用户...

    Tomcat8(Tomcat9)+redis实现Session共享(支持Redis集群)

    在单个服务器上,Session可以通过内存来管理,但在分布式环境下,多个服务器无法共享同一个内存中的Session,这就需要引入外部存储来实现Session共享。 Redis是一个高性能的键值数据库,常被用作缓存和会话存储解决...

    tomcat7集群实现session共享

    当我们谈论“Tomcat7集群实现session共享”时,我们关注的是如何在多个Tomcat实例之间有效地同步用户会话信息,以便在集群环境中提供高可用性和负载均衡。 首先,理解session共享的重要性。在Web应用中,session是...

Global site tag (gtag.js) - Google Analytics