`
loveme13
  • 浏览: 24918 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

监听Session的过期及创建,SessionListener

    博客分类:
  • Java
阅读更多
java web中的Session

在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话。
Session的创建(代表会话周期的开始):第一次调用request.getSession()方法时,会创建一个session对象。
Session的销毁(代表会话周期的结束):在某个请求周期内调用了Session.invalidate()方法,此请求周期结束后,session被销毁;或者是session超时后自动销毁。
对于JSP,如果指定了<%@ page session="false"%>,则在JSP中无法直接访问内置的session变量,同时也不会主动创建session,因为此时JSP未自动执行request.getSession()操作获取session。
在session对象刚创建的第一个请求周期内,调用session.isNew()方法将得到true。
可以在web.xml文件中配置session默认的超时时间(分钟):
<session-config>
    <session-timeout>10</session-timeout>
</session-config>
也可以调用session. setMaxInactiveInterval()方法设置session超时时间(分钟)
SessionListener

通过SessionListenr可以监听session的创建和销毁,步骤:
1.写一个类MySessionListener,实现javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法
2.在web.xml中配置SessionListener:
<listener>
    <listener-class>MySessionListener类全名</listener-class>
</listener>
当session被创建和销毁时,容器会分别调用SessionListener的sessionCreated()方法和sessionDestroyed()方法,这两个方法中传入了一个参数对象HttpSessionEvent,可以通过此对象的getSession()方法获取session对象。


应用:在线人数统计

import java.util.HashSet;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MySessionListener implements HttpSessionListener {

       public void sessionCreated(HttpSessionEvent event) {
              HttpSession session = event.getSession();
              ServletContext application = session.getServletContext();
             
              // 在application范围由一个HashSet集保存所有的session
              HashSet sessions = (HashSet) application.getAttribute("sessions");
              if (sessions == null) {
                     sessions = new HashSet();
                     application.setAttribute("sessions", sessions);
              }
             
              // 新创建的session均添加到HashSet集中
              sessions.add(session);
              // 可以在别处从application范围中取出sessions集合
              // 然后使用sessions.size()获取当前活动的session数,即为“在线人数”
       }

       public void sessionDestroyed(HttpSessionEvent event) {
              HttpSession session = event.getSession();
              ServletContext application = session.getServletContext();
              HashSet sessions = (HashSet) application.getAttribute("sessions");
             
              // 销毁的session均从HashSet集中移除
              sessions.remove(session);
       }
}
分享到:
评论

相关推荐

    使用SessionListener+持久化Session+Springmvc拦截器实现单点登录

    使用SessionListener+持久化Session+Springmvc拦截器实现单点登录

    sessionListener

    这个资源是针对session容器的,在具有多个session的session容器里需要进行注册,所以就有了这个代码。不过写的还是很粗糙的。

    SessionListener

    jsp中唯一登录,使用session控制.

    javamelody.jar和 jrobin.jar

    监控器需要的jar,需在web.xml中配置 &lt;filter-name&gt;monitoring ... &lt;listener-class&gt;net.bull.javamelody.SessionListener&lt;/listener-class&gt; 通过web地址:http:xxxx/项目名/monitoring 可以进入到监控页面

    JMF帮助文档(中文) doc

    javax.media.rtp.event ...通知SessionListener的数据包/ RTCP协议的数据包已经开始停止后抵达抵达。如果在一个活跃的发件人,这涉及到国家的数据包的ReceiveStream 。在被动的情况下接收器,在ReceiveStream将是无效

    javamelogdy-1.51.0

    &lt;listener-class&gt;net.bull.javamelody.SessionListener&lt;/listener-class&gt; 2、需监控的web工程引入依赖jar包 jira-javamelody.jar jrobin-1.5.9.1.jar 3、如果您的web项目有SpringSecurity,修改Spring...

    Struts2+Spring3+MyBatis3完整实例

    - SessionListener: contextInitialized() - Starting Coyote HTTP/1.1 on http-8080 - JK: ajp13 listening on /0.0.0.0:8009 - Jk running ID=0 time=0/32 config=null - Find registry server-registry.xml at ...

    tomcat-juli.jar,tomcat-juli-adapters.jar,log4j-1.2.17.jar tomcat 8日志输出

    {"time":"2017-09-06 10:24:48,649","logtype":"INFO","loginfo":"org.apache.catalina.core.ContainerBase.[Catalina].[bms-res.hzfh.com].[/examples]:SessionListener: contextInitialized()"} {"time":"2017-09-...

Global site tag (gtag.js) - Google Analytics