您的位置:首页 > 其它

servlet监听器

2015-11-22 17:27 302 查看
1、监听器的一般作用:统计在线人数和在线用户;系统启动时加载初始化信息;统计网站访问量;跟spring结合

2、servlet监听器按监听对象划分分为三类:

第一、用于监听应用环境对象:ServletContext

第二、用于监听用户会话对象:HttpSession

第三、用于监听请求消息对象:ServletRequest

Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当 增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent
se)方法,这样就可以给在线人数加1。常用的监听接口有以下几个:


ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性。

ServletContextListener 监听ServletContext。当创建ServletContext时,激发contextInitialized (ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。

HttpSessionListener 监听HttpSession的操作。当创建一个Session时,激发session Created(HttpSessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。

HttpSessionAttributeListener 监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded (HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。
监听器使用实例:统计在线用户及人数
//用于保存用户登录信息
public class User {
private String sessionIdString;//sessionID

private String ipString;//请求用户的ip地址

private String firstTimeString;//用户首次请求时间

public String getSessionIdString() {

return sessionIdString;

}

public void setSessionIdString(String sessionIdString) {

this.sessionIdString = sessionIdString;

}

public String getIpString() {

return ipString;

}

public void setIpString(String ipString) {

this.ipString = ipString;

}

public String getFirstTimeString() {

return firstTimeString;

}

public void setFirstTimeString(String firstTimeString) {

this.firstTimeString = firstTimeString;

}

}


//校验当前用户是否已经存在

public class SessionUtil {

public static Object getUserBySessionId(ArrayList<User> userList, String sessionIdString) {

for (int i = 0; i < userList.size(); i++) {

User user = userList.get(i);

if (user.getSessionIdString().equals(sessionIdString)) {

return user;

}

}

return null;

}

}

@WebListener//servlet3.0监听器注解,不用再web.xml文件配置

public class MyServletRequestListener implements ServletRequestListener {

private ArrayList<User> userList;//统计在线登录的用户

@Override

public void requestDestroyed(ServletRequestEvent arg0) {

}

@Override

public void requestInitialized(ServletRequestEvent arg0) {

userList = (ArrayList<User>)arg0.getServletContext().getAttribute("userList");

if(userList==null)

userList = new ArrayList<User>();

HttpServletRequest request = (HttpServletRequest) arg0.getServletRequest();

String sessionIdString = request.getSession().getId();

if(SessionUtil.getUserBySessionId(userList,sessionIdString)==null){

User user = new User();

user.setSessionIdString(sessionIdString);

user.setFirstTimeString(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));

user.setIpString(request.getRemoteAddr());

userList.add(user);

}

arg0.getServletContext().setAttribute("userList", userList);

}

}

@WebListener //servlet3.0监听器注解,不用再web.xml文件配置

public class MyHttpSessionListener implements HttpSessionListener {

private int userNumber = 0;//当前在线用户数

@Override

public void sessionCreated(HttpSessionEvent arg0) {

userNumber++;

arg0.getSession().getServletContext().setAttribute("userNumber", userNumber);

}

@Override

public void sessionDestroyed(HttpSessionEvent arg0) {

userNumber--;

arg0.getSession().getServletContext().setAttribute("userNumber", userNumber);

ArrayList<User> userList = null;//

userList = (ArrayList<User>)arg0.getSession().getServletContext().getAttribute("userList");

if(SessionUtil.getUserBySessionId(userList, arg0.getSession().getId())!=null){

userList.remove(SessionUtil.getUserBySessionId(userList, arg0.getSession().getId()));

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: