Java Web开发--------监听器
来源:互联网 发布:淘宝买csgo钥匙 编辑:程序博客网 时间:2024/06/04 20:27
一. 监听器的基本概念
监听器是Servlet规范定义的一种特殊类,
- 用于监听ServletContext,HttpSession和ServletRequest等域对象的创建和销毁事件
- 用于监听对象的属性发生修改的事件
可以在事件发生前,发生后做一些必要的处理。
监听器常用在统计在线人数,统计网站访问量,系统启动时加载初始化信息等上面。
监听器,过滤器,Servlet的优先级,即加载顺序是依次递减的
二. 监听器的分类
有监听ServletContext,HttpSession和ServletRequest三大类,三大类中每一类又分为
- 监听域对象自身的创建,销毁
- 监听域对象中的属性的增加和删除
HttpSession还有个监听绑定到该域中的某个对象(上面是属性)的状态的事件监听器HttpSessionBindingListener,HttpSessionActionListener,在Eclipse中创建Listener时的对话框很好地体现了这一分类结构
三. 使用步骤
- 定义Listener类,实现需要的接口
- 在web.xml中配置相应的Listener
- 使用注解@WebListener(servlet3可用)
- HttpSessionBindingListener,HttpSessionActionListener不需要再web.xml中注册
四. 案例:统计在线人数和记录相应的IP
一个Session对应一人,
IP地址在Session中获取不到,只能在request中获取,两者通过往ServletContext()中setAttribute来交互
SessionListener类:
public void sessionCreated(HttpSessionEvent arg0) { // TODO Auto-generated method stub userNum ++; arg0.getSession().getServletContext().setAttribute("userNum", userNum); } /** * @see HttpSessionListener#sessionDestroyed(HttpSessionEvent) */ public void sessionDestroyed(HttpSessionEvent arg0) { // TODO Auto-generated method stub userNum --; HttpSession session = arg0.getSession(); session.getServletContext().setAttribute("userNum", userNum); ArrayList<User> users = (ArrayList<User>) session.getServletContext().getAttribute("users"); users.remove(SessionUtil.getUserById(users, session.getId())); }
RequestLisenter类:
public void requestInitialized(ServletRequestEvent arg0) { // TODO Auto-generated method stub HttpServletRequest request = (HttpServletRequest) arg0.getServletRequest(); String sessionId = request.getSession().getId(); if(SessionUtil.getUserById(users, sessionId) == null) { User u = new User(); u.setFirstTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); u.setIp(request.getRemoteAddr()); u.setSessionId(sessionId); users.add(u); } request.getSession().getServletContext().setAttribute("users", users); }
jsp视图:
<body> ${userNum} online<br> <% ArrayList<User> users = (ArrayList<User>)application.getAttribute("users"); System.out.println(users.size()); for(User u : users) { %> IP: <%=u.getIp() %><br> sessionId: <%=u.getSessionId() %><br> firstTime: <%=u.getFirstTime() %><br> <% } %></body>
0 0
- Java Web开发--------监听器
- Java Web开发——Servlet监听器
- Java Web开发——Servlet监听器
- java web listener 监听器
- java web中的监听器
- java web 监听器详解
- java web 监听器详解
- java web 的监听器
- java web 监听器详解
- java web 监听器详解
- java web listener 监听器
- Java Web 监听器详解
- java web 监听器详解
- java web 监听器学习
- Java web----监听器
- Java Web监听器
- java web监听器详解
- java web 监听器详解
- ubuntu删除特定用户的进程
- itext将html转pdf中文支持
- Ubuntu14.04安装jdk1.7.0_71
- 给定RGB值计算色谱上相应的坐标
- android资源的热更新(替换 AssetManager+LoadedApk中的资源路径)
- Java Web开发--------监听器
- ubuntu实现无密码登陆
- ubuntu14.04的hadoop环境搭建(全分布模式)
- CentOS 6.5下NFS安装配置
- 如何判断一个vtkActor的类型
- Win7上的Eclipse3.3远程连接ubuntu14.04中的hadoop0.20.2
- HDFS可靠性措施
- Ubuntu 16.04搭建lamp环境
- 第一个hadoop程序-WordCount