http://my.oschina.net/huangcongcong/blog/521025
有时我们会遇到一个大点的项目,为了方便实现有些功能,我们会把项目拆成不同的独立web项目。
但我们在管理这些项目时,只有一个登陆口,然后在其他项目取session来实现身份的验证。
查看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.
所以的需要一个tomcat下两个WEB之间通过session 共享数据
由于每个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"));
然后重新部署就行了。
分享到:
相关推荐
标题中的“nginx实现多个tomcat7直接session共享所需jar包”指的是在分布式系统环境中,使用Nginx作为反向代理服务器,将用户请求分发到多个Tomcat7应用服务器上...在分布式系统中,session...
标题 "Tomcat7+Redis+Session 负载之后session 共享 tomcat jar包" 涉及的是在使用Nginx做负载均衡时,如何通过集成Redis来实现Tomcat7服务器之间的Session共享,从而确保用户在不同服务器之间切换时仍然能够保持...
标题中的“tomcat8+memcached session共享”指的是在Tomcat 8服务器中利用Memcached进行session共享的技术实践。在分布式系统中,session共享是一个重要的问题,因为用户在访问不同的服务器节点时,需要保持登录状态...
在单个服务器上,Session可以通过内存来管理,但在分布式环境下,多个服务器无法共享同一个内存中的Session,这就需要引入外部存储来实现Session共享。 Redis是一个高性能的键值数据库,常被用作缓存和会话存储解决...
1. **共享内存(SharedMemory)**:在所有Tomcat实例之间共享一块内存区域来存储Session数据。这种方法效率最高,但需要所有的服务器在同一台机器上,且有较高的系统资源需求。 2. **数据库(JDBC)**:利用数据库...
当多个服务器共同处理用户请求时,保持用户会话(session)的一致性是必要的,以确保用户在不同服务器之间切换时不会丢失登录状态或其他关键信息。本主题将深入探讨如何使用Tomcat和Redis来实现这一目标。 首先,让...
"nginx+tomcat shiro实现多tomcat下session共享"这一主题,就是探讨在这样的架构中,如何有效管理和共享session。 1. **Nginx的作用**: Nginx是一个高性能的HTTP和反向代理服务器,常用于负载均衡,可以将用户的...
标题中的“memcached+tomcat7共享session所需要的jar包”是指使用Memcached作为分布式缓存系统,实现Tomcat7服务器间的Session共享。这通常是为了在集群环境中解决Session复制或粘滞会话的问题,提高Web应用的可扩展...
linux.tomcat-session共享.redis.安装包
4. **测试和优化**:部署应用程序并进行测试,确保在不同服务器之间切换时session能正确共享。同时,可能需要调整Redis的缓存策略和过期时间,以及Nginx的负载均衡策略,以适应具体业务需求。 这个例子对初学者来说...
Tomcat 之间的 Session 共享是指在分布式 Tomcat 环境中,多个 Tomcat 实例之间共享 Session 数据,以确保用户登录状态的一致性。在使用 Nginx+Tomcat 进行负载均衡时,使用轮询方式进行负载可能会导致用户退出登录...
2. **Shared Memory**:这种方法利用共享内存区域在服务器之间共享session数据,减少了网络通信,但可能受到操作系统限制和并发问题的影响。 3. **数据库存储**:session信息被存储在数据库中,所有服务器都从同一...
本篇文章将探讨如何利用Redis、Tomcat和Nginx来实现Session共享,以便在分布式环境中保持用户状态的一致性。 首先,让我们了解一下Session的概念。Session是Web服务器用来跟踪用户状态的一种机制。当用户登录后,...
然而,问题也随之而来:用户的会话(Session)如何在这些服务器之间共享?这时,我们就需要引入基于Redis的Session共享方案。本文将深入探讨如何利用Redis来实现Tomcat Session的共享,并构建一个高可用的集群。 ...
综上所述,实现Tomcat集群session共享主要涉及Tomcat的session管理机制、Redis的集成以及相应的配置和优化。通过合理配置,可以确保在高并发环境下提供无缝的用户体验,同时提升系统的可扩展性和可靠性。
此压缩包为tomcat8利用redis实现session共享所需要的jar包,包含(commons-pool2-2.6.0.jar、jedis-2.9.0.jar、tomcat-redis-session-manager.jar)直接将三个jar包复制Tomcat目录lib下面,在修改conf下context.xml...
然而,当多个Tomcat实例组成一个集群时,session(用户会话)共享成为一个挑战,因为每个实例都有自己的内存空间,无法直接访问其他实例中的session数据。本篇文章将深入探讨Tomcat集群中session共享的解决方案,...
1. **测试**: 部署你的应用,然后通过浏览器访问,查看Session是否能正确地在不同的`Tomcat7`实例之间共享。 2. **优化**: 根据实际情况,可能需要调整Redis的过期策略、并发性能以及网络延迟等。例如,可以设置...
在分布式系统中,Tomcat集群的session共享是一个重要的议题,特别是在高并发、高可用的Web应用环境中。这里的“tomcat集群session共享jar(三个)”指的是实现Tomcat集群间session共享所需的一些关键组件或者库。...