着急请教一个问题:关于Spring MVC HttpSessionListener监听的
public class OnlineUtil implements ServletContextListener, HttpSessionListener,
HttpSessionAttributeListener {
// 声明一个ServletContext对象
private ServletContext application = null;
@Override
public void contextInitialized(ServletContextEvent sce) {
// 容器初始化时,向application中存放一个空的容器
this.application = sce.getServletContext();
this.application.setAttribute("onLineUser", new ArrayList());
}
@Override
public void attributeAdded(HttpSessionBindingEvent hse) {
// 如果登陆成功,则将用户保存在列表之中
List list = (List) this.application.getAttribute("onLineUser");
if(hse.getValue() instanceof Member){
list.add(hse.getValue());
}
this.application.setAttribute("onLineUser", list);
}
/**
* 任何一个Session被销毁时进入
*/
@Override
public void sessionDestroyed(HttpSessionEvent hse) {
// 将用户名从列表中删除
List list = (List) this.application.getAttribute("onLineUser");
if(null!=list && list.size()>0){
Member member=(Member) list.get(0);
//问题就在这块 :数据库操作
// if(null!=member){
// member.setOnlineFlag(1);//更新为离线状态
// memberService.updateIsOnline(member);
// }
list.remove(member);
}
this.application.setAttribute("onLineUser", list);
}
}
private MemberService memberService;
public MemberService getMemberService() {
return memberService;
}
@Resource(name = "memberService")
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
需求是这样的:客户要求做一个实时在线人数统计,这个做出来了。问题就是:我在客户退出的时候,
进入这个销毁sessionDestroyed的方法(如果客户点击退出按钮,这个就好办了,关键是一般人都直接关闭浏览器),
然后更新数据库中OnlineFlag(在线状态)这个字段。现在是获取不到memberService,无法进行更新操作。
HttpSessionAttributeListener {
// 声明一个ServletContext对象
private ServletContext application = null;
@Override
public void contextInitialized(ServletContextEvent sce) {
// 容器初始化时,向application中存放一个空的容器
this.application = sce.getServletContext();
this.application.setAttribute("onLineUser", new ArrayList());
}
@Override
public void attributeAdded(HttpSessionBindingEvent hse) {
// 如果登陆成功,则将用户保存在列表之中
List list = (List) this.application.getAttribute("onLineUser");
if(hse.getValue() instanceof Member){
list.add(hse.getValue());
}
this.application.setAttribute("onLineUser", list);
}
/**
* 任何一个Session被销毁时进入
*/
@Override
public void sessionDestroyed(HttpSessionEvent hse) {
// 将用户名从列表中删除
List list = (List) this.application.getAttribute("onLineUser");
if(null!=list && list.size()>0){
Member member=(Member) list.get(0);
//问题就在这块 :数据库操作
// if(null!=member){
// member.setOnlineFlag(1);//更新为离线状态
// memberService.updateIsOnline(member);
// }
list.remove(member);
}
this.application.setAttribute("onLineUser", list);
}
}
private MemberService memberService;
public MemberService getMemberService() {
return memberService;
}
@Resource(name = "memberService")
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
需求是这样的:客户要求做一个实时在线人数统计,这个做出来了。问题就是:我在客户退出的时候,
进入这个销毁sessionDestroyed的方法(如果客户点击退出按钮,这个就好办了,关键是一般人都直接关闭浏览器),
然后更新数据库中OnlineFlag(在线状态)这个字段。现在是获取不到memberService,无法进行更新操作。
...全文
相关推荐
监听session的创建到销毁
这是一个用springMVC的项目 是一个监听器 用于监听session的创建、销毁、移除。会触发相应的事件处理
Java监听器Listener深入理解与应用
监听器(Listener)是Java Servlet规范中定义的一种特殊类,用于监听Web应用中的特定事件。在Java Web开发中,监听器可以响应各种事件,如会话生命周期事件、请求处理事件以及应用上下文事件等。它为开发者提供了一个在不同阶段插入自定义逻辑的机会,从而实现对应用状态变化的监控和对业务流程的精细控制。监听器的基本工作原理是通过实现特定的接口来完成的,这些接口定义了一组回调方法,这些方法会在相应的事件发生时由Servlet容器自动调用。常见的监听器接口包括以及Spring中的。
详解Spring MVC拦截器实现session控制
主要介绍了详解Spring MVC拦截器实现session控制,使用session监听,重复登录后,强制之前登录的session过期。有兴趣的可以了解一下。
spring监听器
对spring监听器,过滤器的使用的一些关键的代码说明
STRUTS:listener监听器
STRUTS:listener监听器


