Java Web开发--------监听器

来源:互联网 发布:淘宝买csgo钥匙 编辑:程序博客网 时间:2024/06/04 20:27

一. 监听器的基本概念

监听器是Servlet规范定义的一种特殊类,

  • 用于监听ServletContext,HttpSession和ServletRequest等域对象的创建和销毁事件
  • 用于监听对象的属性发生修改的事件

可以在事件发生前,发生后做一些必要的处理。

监听器常用在统计在线人数,统计网站访问量,系统启动时加载初始化信息等上面。

监听器,过滤器,Servlet的优先级,即加载顺序是依次递减的


二. 监听器的分类

有监听ServletContext,HttpSession和ServletRequest三大类,三大类中每一类又分为

  • 监听域对象自身的创建,销毁
  • 监听域对象中的属性的增加和删除

HttpSession还有个监听绑定到该域中的某个对象(上面是属性)的状态的事件监听器HttpSessionBindingListener,HttpSessionActionListener,在Eclipse中创建Listener时的对话框很好地体现了这一分类结构
这里写图片描述


三. 使用步骤

  1. 定义Listener类,实现需要的接口
  2. 在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
原创粉丝点击