读书人

JAVA-用户是否在线-是不是登录-在线统

发布时间: 2012-12-20 09:53:21 作者: rapoo

JAVA-用户是否在线-是否登录-在线统计等方法
SessionListener

package com.oddel.listener; import javax.servlet.ServletContext;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener; public class SessionListener implements HttpSessionListener { public void sessionCreated(HttpSessionEvent event) { // TODO Auto-generated method stubHttpSession session=event.getSession();         SessionBean sessionBean=SessionFactory.getInstance().getSessionBean();         /**         * 访问次数统计         * */        sessionBean.setAccessCount(sessionBean.getAccessCount()+1);         /**         * 在线人数统计         * */        sessionBean.getOnline().put(session.getId(), null); } public void sessionDestroyed(HttpSessionEvent event) { HttpSession session=event.getSession();         SessionBean sessionBean=SessionFactory.getInstance().getSessionBean();         sessionBean.getLogin().remove(sessionBean.getOnline().get(session.getId()));         sessionBean.getOnline().remove(session.getId());    }}

SessionFactory
package com.oddel.listener; import javax.servlet.http.HttpSession; public class SessionFactory { private static SessionFactory factory;private SessionBean sessionBean=new SessionBean(); private SessionFactory(){} static{factory=new SessionFactory();} public synchronized  static SessionFactory getInstance() {        if (factory == null) {        factory = new SessionFactory();        }       return factory;   } public void addLogin(HttpSession session, String user){this.getSessionBean().getOnline().put(session.getId(), user);this.getSessionBean().getLogin().add(user);} public void removeLogin(HttpSession session, String user){this.getSessionBean().getLogin().remove(this.getSessionBean().getOnline().get(session.getId()));this.getSessionBean().getOnline().remove(session.getId());} public boolean isOnline(String user){return this.getSessionBean().getLogin().contains(user);} public SessionBean getSessionBean() {return sessionBean;} public void setSessionBean(SessionBean sessionBean) {this.sessionBean = sessionBean;}}

SessionBean
package com.oddel.listener; import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Set; public class SessionBean { private Map<String,String> online=new HashMap();//在线private int accessCount=0;//系统访问人数private Set<String> login=new HashSet();//已经登录用户 /*** 返回当前系统在线人数* @return int*/public int getOnlineCount(){return this.getOnline().size();} /*** 返回当前系统登录人数* @return int*/public int getLoginCount(){return this.getLogin().size();} public Map<String, String> getOnline() {return online;} public void setOnline(Map<String, String> online) {this.online = online;} public int getAccessCount() {return accessCount;} public void setAccessCount(int accessCount) {this.accessCount = accessCount;} public Set<String> getLogin() {return login;} public void setLogin(Set<String> login) {this.login = login;} }

Web.xml
<listener><listener-class>com.oddel.listener.SessionListener</listener-class></listener>

用户登录时调用:
SessionFactory.getInstance().addLogin(httpSession, userid);

页面调用:
import="com.oddel.listener.SessionFactory;
SessionFactory.getInstance().isOnline(userid)
返回true表示用户当前是在线的。
返回false表示用户当前是不在线的。


注:本文摘转自老狼博客。

读书人网 >编程

热点推荐