servlet-api.jar中提供了监听类
HttpSessionListener,主要方法有两个,sessionCreated、sessionDestroyed,根据方法名就能明白是监听session的创建和销毁。
以下是示例:
package com.test;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionTestListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
System.out.println("session Created: " + session);
}
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("session Destroyed.");
}
}
方法里可以写一些tracking的逻辑,也可以累计登陆次数等等。另外别忘了在web.xml里注册这个监听类(具体代码略)。
--------------------------------
来说说在用到这个监听类的一些总结。首先不可避免的要在sessionCreated方法中想要取得request对象(进而取得用户ip,浏览器等属性),但是HttpSessionEvent显然直接取不到request对象。
研究了下,发现spring(主要是context jar包)提供了监听类:
RequestContextListener,可直接配在web.xml中,通过这个监听器,可以直接拿到request上下文。示例如下:
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
System.out.println(request.getHeader("user-agent"));
--------------------------------
另外,在sessionCreated虽然能取得request对象,但千万不能写request.getSession(true)类似的方法,这样会引起死循环,理由是sessionCreated监听session被创建时,此时的session还没有完全被建立,因为用request.getSession(true)并不能拿到我们想要的那个session实例(大家都知道request.getSession(true) 表示获取session对象,若session不存在则会再创建)。
于是就会悲剧的陷入:监听方法中用request取得session,没拿到,创建session,监听方法又生效,生效后继续取得session,没拿到,创建session... 这样的循环中。
综上,session实例应从HttpSessionEvent拿。
分享到:
相关推荐
本文将详细介绍如何在Java Web项目中设置和使用Session监听器,以及如何根据Session ID获取Session。 首先,为了实现Session监听,我们需要创建一个实现了`javax.servlet.http.HttpSessionListener`接口的类。这个...
- **监听类编写**:为了实现session监听功能,我们需要编写一个类实现`HttpSessionListener`接口。在这个类中,需要重写两个方法: - `sessionCreated(HttpSessionEvent se)`:当一个新的session被创建时调用此方法...
在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们主要用于增强应用程序的功能和管理应用程序的状态。这篇文章将对这两者的应用进行深入的总结。 **过滤器Filter** 过滤器是在...
本文将深入探讨如何利用Session监听器来防止同一用户在多个客户端同时登录。 首先,理解Session的基本概念至关重要。Session是服务器为每个用户创建的一种存储机制,用于保存用户状态信息。当用户登录成功后,...
在Java Web开发中,监听器(Listener)是十分重要的组成部分,它们主要用于监听特定事件的发生,并执行相应的处理逻辑。Struts框架作为早期流行的MVC架构之一,充分利用了监听器机制来增强其功能性和灵活性。本文将...
常见的监听器接口有HttpSessionListener、ServletRequestListener、ApplicationListener等。 二、登录次数监听器的实现 1. 创建监听器类:要记录登录次数,我们需要创建一个实现了javax.servlet....
以下是一个简单的Session监听器示例: ```java @WebListener public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener { @Override public void sessionDestroyed...
监听器.pdf 监听器是Java Web开发中的一种重要机制,用于监听和响应Web应用程序中的事件...在上面的例子中,我们实现了HttpSessionBindingListener接口,并在valueBound方法中监听java对象在Session中的状态发生改变。
Session监听器是实现了`javax.servlet.http.HttpSessionListener`接口的类,它可以监听到Session的创建和销毁事件,从而判断用户的登录和登出。 下面是一个简单的Session监听器的代码示例: ```java import javax....
对于Tomcat这类应用服务器,可以在`conf/web.xml`或`server.xml`中定义Context元素来设置Session超时时间,例如: ```xml <Context ... defaultSessionTimeout="3600"> <!-- 1小时 --> ``` 在Session失效后,...
本篇将深入讲解`Listener`的概念、作用以及如何通过实例代码进行实现,特别关注在Web应用程序中的三种主要域对象:`request`、`session`和`servletContext`。 一、`Listener`的基本概念 `Listener`是Java中的接口,...
在Java Web开发中,Servlet监听器(Servlet Listener)扮演着重要的角色,它是Servlet规范的一部分,允许开发者对Web应用程序中的特定事件进行监听和响应。在这个范例中,我们将深入探讨如何利用监听器来统计在线...
Session监听 Request监听 · Listener的应用实例 利用HttpSessionListener统计多在线用户人数 Spring使用ContextLoaderListener加载ApplicationContext配置信息 Spring使用Log4jConfigListener...
Servlet容器支持监听器(Listener),如`HttpSessionListener`和`HttpSessionAttributeListener`,它们可以监听Session的创建、销毁和属性变化。监听器可用来统计在线用户、清理过期Session等。 ```java @Web...
例如,HttpSessionListener可以监听session的创建和销毁,ServletContextListener监听应用的启动和关闭。通过注册监听器,开发者可以在特定时刻执行一些初始化或清理工作。 在实际开发中,这些组件通常结合使用。...
在IT行业中,网络应用开发是不可或缺的一部分,而监听对象的属性变更则是提升应用程序响应性和效率的重要技术。在Java Web开发中,特别是在使用Servlet时,我们可以利用监听器来监控和响应对象状态的变化,从而实现...
在Java Web开发中,监听器(Listener)是一种用于监控Web应用中各种事件的组件,包括诸如对象创建、销毁,会话开始、结束等。本文将详细介绍如何使用监听器来统计在线用户人数,包括实现的基本思路、具体代码实现...
总结来说,JSP监听器提供了一种强大的机制,让开发者能够在Web应用程序的关键事件中插入自定义代码,从而实现更灵活和高效的控制。通过理解并熟练使用各种监听器接口,开发者可以更好地管理会话、跟踪用户行为、优化...
首先,开发者可能尝试使用Session监听器(HttpSessionListener)来检测Session的过期。监听器是Java Servlet规范的一部分,允许我们注册监听器以响应特定的事件,如Session的创建和销毁。在`web.xml`文件中,我们...
例如,Session监听器可以监听会话的创建、过期等事件,ServletContext监听器可以监听上下文的初始化和销毁事件,Request监听器可以监听请求的开始和结束。监听器的实现通常需要实现特定接口,如HttpSessionListener...