- 浏览: 842497 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
renzhengzhi:
请教一下楼主,公有云和私有云的开发,具体要做哪些工作呢?我拿到 ...
4,云的4 种模式 -
SangBillLee:
我用了solr5.5,用SolrQuery查询,没法高亮,不知 ...
solr5.x快速入门 -
lw900925:
这翻译读起来真是别扭。
solr in action翻译-第一章1.1 -
springjpa_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring MVC性能提升 -
h416373073:
正遇到了此问题不知如何解决, 多谢分享
solr错误
Catalina通过一个叫管理器的组建来完成Session的管理。该管理器由一个接口Interface表示。
一个管理器通常和一个上下文容器相互管理,它负责创建,更新以及销毁session对象并给
任何请求组件返回一个合法的session.
一个servlet可以使用getSession方法获得一个session对象,该方法在javax.servlet.http.HttpServletRequest定义
它在默认连接器里由org.apache.catalina.connector.HttpRequestBase类实现
public HttpSession getSession() { return (getSession(true)); } public HttpSession getSession(boolean create) { .... return doGetSession(create); } private HttpSession doGetSession(boolean create) { if (context == null) return (null); if ((session != null) && !session.isValid()) session = null; if (session != null) return (session.getSession()); Manager manager = null; if (context != null) manager = context.getManager(); if (manager == null) return (null); if (requestedSessionId != null) { try { session = manager.findSession(requestedSessionId); }catch (IOException e) { session = null; } if ((session != null) && !session.isValid()) session = null; if (session != null) { return (session.getSession()); } } if (!create) return (null); if (session != null) return (session.getSession()); else return (null); }
默认情况下管理器将session对象存储在内存中,但是Tomcat也允许将session对象存储在文件或者数据库中(通过JDBC)
Sessions
在servlet编程中,一个session对象使用javax.servlet.http.HttpSession接口表示。该接口的标准实现是StandardSession类
由于一个Session对象常常被一个管理器持有,所以接口提供了setManager和getManager方法来关联一个Session对象和一个管理器
一个Session实例在跟管理器相关联的容器有一个唯一的ID。
StandardSession类
StandardSession类是Session接口的标准是实现。
实现了javax.servlet.http.HttpSession 和org.apache.catalina.Session之外,
它还实现了java.lang.Serializable接口来使得Session对象可序列化。
接下来是几个重要的变量在存放Session状态。注意transient使得该关键字不可序列化。
private HashMap attributes = new HashMap();
private transient String authType = null;
private transient boolean expiring = false;
private transient StandardSessionFacade facade = null;
一个Session对象如果在由maxInactiveInterval变量的时间内没有被进入则被终结。
使用Session接口中定义的expire方法可以终结一个Session对象
public void expire(boolean notify) { // Mark this session as "being expired" if needed if (expiring) return; expiring = true; setValid(false); // Remove this session from our manager's active sessions if (manager != null) manager.remove(this); // Unbind any objects associated with this session String keys[] = keys(); for (int i = 0; i < keys.length; i++) removeAttribute(keys[i], notify); // Notify interested session event listeners if (notify) { fireSessionEvent(Session.SESSION_DESTROYED_EVENT, null); } // Notify interested application event listeners // FIXME - Assumes we call listeners in reverse order Context context = (Context) manager.getContainer(); Object listeners[] = context.getApplicationListeners(); if (notify && (listeners != null)) { HttpSessionEvent event = new HttpSessionEvent(getSession()); for (int i = 0; i < listeners.length; i++) { int j = (listeners.length - 1) - i; if (!(listeners[j] instanceof HttpSessionListener)) continue; HttpSessionListener listener = (HttpSessionListener) listeners[j]; try { fireContainerEvent(context, "beforeSessionDestroyed", listener); listener.sessionDestroyed(event); fireContainerEvent(context, "afterSessionDestroyed", listener); } catch (Throwable t) { try { fireContainerEvent(context, "afterSessionDestroyed", listener); } catch (Exception e) { ; } // FIXME - should we do anything besides log these? log(sm.getString("standardSession.sessionEvent"), t); } } } // We have completed expire of this session expiring = false; if ((manager != null) && (manager instanceof ManagerBase)) { recycle(); } }
管理器
管理器用来管理Session对象
管理器由org.apache.catalina.Manager接口表示
ManagerBase类有两个直接子类:StandardManager和PersistentManagerBase类。
在运行的时候,StandardManager将session对象存放在内存中。
但是,当停止的时候,它将Session对象存放到文件中。当它再次启动的时候,重新载入Session对象。
PersistentManagerBase类作为一个管理器组件将Session对象存放到二级存储器中。
它有两个直接子类:PersistentManager和DistributedManager类
发表评论
-
21,tomcat关闭钩子
2012-11-22 20:35 6649在很多环境下,在关闭应用程序的时候需要做一些清理工作。问题在于 ... -
20,tomcat的XML解析---digester
2012-11-22 20:07 1559tomcat使用server.xml配置属性信息Tomcat使 ... -
19tomcat的服务器和服务
2012-11-20 20:10 1077Server服务器 Server接口表示整个Catalina ... -
18,tomcat的主机(host)和引擎
2012-11-16 09:13 2351如果需要在一个Tomcat部署中部署多个上下文,需要使用一个主 ... -
附,listener、 filter、servlet 加载顺序及其详解
2012-11-15 09:10 985一、 1、启动一个WEB项 ... -
17,tomcat中StandardContext
2012-11-15 08:59 5044一个上下文容器(Context)代表一个web应用,每一个上下 ... -
16,tomcat中StandardWrapper实现
2012-11-14 18:28 3890Wrapper接口在Catalina中的标准实现Standar ... -
15,tomcat安全
2012-11-14 09:02 1201有些web应用程序的内容是有限制的,只允许有权限的用户在提供正 ... -
13.tomcat加载器
2012-11-13 13:21 1376库(repository)和源(res ... -
12,tomcat日志处理
2012-11-13 13:15 1248日志系统是一个记录信息的组件。在Catalina中,日志系统是 ... -
附:JAVA事件处理--观察者模式
2012-11-12 10:33 1001简单地说,观察者模式 ... -
11.tomcat生命周期
2012-11-12 10:26 988Catalina由多个组件组成,当Catalina启动的 ... -
10.容器
2012-11-12 10:12 1352容器是一个处理用户servlet请求并返回对象给we ... -
9.Tomcat的默认连接器
2012-11-12 08:52 1179Tomcat连接器是一个可以插入servlet容器的独立模块, ... -
8.连接器
2012-11-12 08:46 940一个可以创建更好的请 ... -
7,Facade外观模式
2012-11-08 11:28 950外观模式:为子系统中的一组接口提供了一个一致的界面,此模式定义 ... -
6,一个简单的servlet容器
2012-11-08 11:10 855总的来说,一个全功能的servlet容器会为servlet的每 ... -
5.javax.servlet.Servlet接口
2012-11-08 09:18 952javax.servlet.Servlet接口Servlet编 ... -
4,一个简单的tomcat
2012-11-07 18:10 946流程图如下 -
3.ServerSocket 与 Socket的区别
2012-11-07 16:56 11871.1 ServerSocket类创建 ...
相关推荐
在Web开发中,Session管理是确保用户状态跟踪的重要机制之一。Tomcat作为一款广泛使用的Java应用服务器及Servlet容器,提供了多种方式来设定Session的有效时长。这有助于开发者根据具体业务需求灵活调整Session的...
【标题】:“Tomcat-Redis-Session管理”的实践指南 在Web应用开发中,Session管理是关键的一环,用于在用户浏览器与服务器之间保持状态。传统的Session存储方式是将数据存放在服务器内存中,但随着高并发访问和...
在处理用户会话时,Tomcat默认使用基于内存的session管理,但这可能导致在高并发场景下session数据丢失或者性能瓶颈。为了解决这些问题,可以将Tomcat的session存储机制改为Memcache,这是一种高效、分布式的内存...
SpringSession 是一个强大的框架,它扩展了 Spring Framework 的 Session 支持,允许开发者在分布式环境中管理用户会话。尤其在处理多台 Tomcat 服务器时,SpringSession 提供了一种优雅的方式来实现 session 共享,...
标题中的“tomcat8专用session管理包.rar”指的是一个针对Tomcat 8的特定session管理解决方案,这个压缩包包含了在使用Nginx作为反向代理服务器,并与Redis结合实现负载均衡场景下,确保Tomcat应用间session数据共享...
综上所述,"Tomcat Redis Session"是一种在分布式环境中保证用户会话一致性的解决方案,通过集成Redis和Nginx,有效地解决了Web应用集群中的Session管理难题。在实际部署中,还需要考虑系统整体架构、性能优化和运维...
Tomcat_Session 的持久...Tomcat 提供了 StandardManager 和 PersistentManager 两个实现类来管理 Session,其中 PersistentManager 能够把 Session 对象保存到 Session Store 中,提供了更为灵活的 Session 管理功能。
Tomcat作为最常用的Java Servlet容器,其Session管理能力直接影响到应用的性能和可扩展性。本教程将详细介绍如何利用Tomcat 8或9以及Redis实现Session共享,支持Redis集群,以提高系统的可伸缩性和数据一致性。 ...
Tomcat中的Session管理** 在单台Tomcat服务器上,Session信息默认存储在服务器的内存中。然而,当部署多个Tomcat实例时,由于每个实例都有自己的Session存储,导致Session无法跨实例共享,用户在切换服务器时可能会...
综上所述,"tomcat-redis-session-manager包集合"为使用Tomcat8和JDK1.8的开发者提供了便捷的手段,通过集成Redis来增强session管理,提升应用在分布式环境下的性能和可靠性。正确配置和使用这个工具可以显著改善...
7. `memcached-session-manager-tc8-1.8.3.jar`:这个是针对Tomcat 8版本的session管理器实现,确保与Tomcat 8的兼容性。 8. `minlog-1.2.jar`:这是一个简单的日志库,可能用于在处理session共享时记录和调试信息。...
`SimpleTcpCluster` 是一个基于 TCP 的集群实现,而 `DeltaManager` 是用于处理 Session 数据更新的管理器。主要配置包括: - `tcpListenAddress`:指定接收复制数据的 IP 地址,例如 `192.168.1.55`。 - `...
`tomcat-redis-session-manager`就是这样一款解决方案,它将Tomcat的session管理与Redis相结合,实现了跨服务器的session共享。 首先,让我们理解`tomcat-redis-session-manager`的核心概念。这是一个开源项目,它...
总结起来,Tomcat-Redis-Session-Manager通过整合Redis和Tomcat,实现了高效、可靠的session管理,特别适用于需要处理高并发和分布式部署的Web应用。其提供的jar包简化了集成过程,让开发者能快速地在Tomcat7和...
在IT行业中,尤其是在Java Web应用领域,Tomcat服务器的session管理是至关重要的。"tomcat-session同步所需jar.rar_session集群共享_tomcat session"这个标题表明我们关注的是如何在Tomcat集群环境中实现session的...
在单个Tomcat环境下,session管理简单,但当有多个Tomcat时,session不能直接跨服务器共享。 3. **Shiro框架**: Apache Shiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能。在多Tomcat...
总之,"Tomcat memcached Session依赖jar包"涉及到的是在Tomcat中使用memcached来提升Session管理效率的技术。这需要正确配置Tomcat的Session Manager,并选择合适的序列化库,如Kryo,以实现高效的数据存储和传输。...
本篇文章将详细介绍如何使用`Tomcat`结合`Memcached`来实现高效的Session管理。 首先,`Memcached`作为一种高性能、分布式的内存缓存系统,能够存储包括Web应用中的Session数据在内的临时性数据。通过将Session数据...
而`tomcat-redis-session-manager-1.2-tomcat-7.jar`则是Tomcat 7的Redis session manager实现。 以下是实现步骤: 1. **配置Redis服务器**:确保你有一个运行中的Redis服务器,可以是本地或者远程。配置好服务器...
这是一个专门为Tomcat设计的Session管理器,它允许我们将Session存储和复制到Redis中。配置这个管理器时,我们需要在Tomcat的`context.xml`或`server.xml`文件中添加相关配置,包括Redis服务器的地址、端口、密码等...