servlet监听器
来源:互联网 发布:mac如何把桌面的图标 编辑:程序博客网 时间:2024/04/30 10:12
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;
}
}
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()));
}
}
}
- Servlet监听器
- servlet监听器
- Servlet监听器
- Servlet监听器
- servlet 监听器
- servlet监听器
- Servlet监听器
- servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- Servlet监听器
- servlet监听器
- servlet监听器
- servlet监听器
- servlet监听器
- ajax与XML交互
- JavaScript学习之路08_高阶函数
- TortoiseSVN中分支和合并实践
- Android Studio中的assets目录怎么创建?
- zzulioj 1781: 和尚特烦恼7——念经 (字符串)
- servlet监听器
- B Tree
- Android打包那些事---多渠道打包
- 02.SpringMVC传值【孔浩SpringMVC视频教程】学习笔记
- UML9种图
- telnet访问web服务器
- C++中typedef的用法
- mac系统使用lookup file.vim的问题
- 行业危机