着急请教一个问题:关于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,无法进行更新操作。