• web监听器


    web监听器的定义;

    web监听器是servlet规范中定义的一种特殊类;

    用于监听servletContext(application) 、 HttpSession (session)、ServeletRequest (request)等域对象的创建与销毁事件;

    WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

      ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。  由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

    在Servlet API中有一个ServletContextListener接口,它能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期。

    可以在事件发生前、发生后做一些必要的处理;用于监听域对象的属性发生修改的事件;

    web监听器的用途;

    1.统计在线人数和在线用户;

    2.系统启动时加载初始化信息;

    3.统计网站访问量;

    4.跟SPring结合;

    第一个web监听器;

    步骤:1.创建一个实现监听器接口的类;2.配置web.xml 进行注册;(点击desgin)然后选中Lister,之后把实现的类路径选中,就好了

     按监听的对象划分:

    1.用于监听应用程序环境对象(ServletContext)的事件监听器;

    2.用于监听用户会话对象(HttpSession)的事件监听器;

    3.用于监听请求消息对象(ServletRequset)的事件监听器;

    按监听的事件划分:

    1.监听域对象自身的创建和销毁的事件监听器;

    2.监听域对象的属性的增加和删除监听器;

    3.监听绑定到HttpSession域的某个对象的事件监听器;

    监听域对象自身的创建和销毁的事件监听器;

    在servlet规范中呢,定义了三个接口,分别是ServletContextListener HttpSessionLister ,ServletRequestLister来监听ServletContext,HttpSession,ServletRequset

    对象的创建和销毁;

    1.ServletContext的创建和销毁:

    ServletContext实现了ServletContextListener 这个接口;来监听这个对象的创建和销毁;

    ServletContextListener 有两个方法:

    public void contextInitialized(ServletContextEvent sce)

    ServletContext创建时调用;

    public vod contextDestoryed(ServletContextEvent sce)

    ServletContext销毁时调用;

    事例代码:

    public class MyServletContextListener implements ServletContextListener {
    
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            System.out.println("contextDestroyed");
        }
    
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            System.out.println("contextInitialized");
        }
    
    }
    View Code

    2.HttpSession的对象创建与销毁;

    HttpSession实现了HttpSessionLister 这个接口;来监听这个对象的创建和销毁;

    HttpSessionLister有两个方法:

    public void sessionCreated(HttpSessionEvent sce)

    Session创建时调用;

    public vod sessionDestroyed(((HttpSessionEvent sce);

    Session销毁时调用; 用途:统计访问人数;记录访问日志;

    session创建的时间,当用户打开浏览器,第一次访问我们的网站的时候,这个时候,session对象就会被创建;可以在session保存一些信息;

    销毁session对象:有三种方法;1.手动的点击退出的时候,程序会去调用销毁的方法,2,当关闭浏览器的时候,session对象也会被销毁。3,没有关闭浏览器,

    但是会话超时了,这个时候session对象也会被销毁;

    我们可以在web.xml中配置

    <session-config>
        <time-out>1</time-out>
    </session-config>
    View Code

    事例代码:

    package com.imooc.listener;
    
    import java.util.ArrayList;
    
    import javax.servlet.annotation.WebListener;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    import com.imooc.entity.User;
    import com.imooc.util.SessionUtil;
    @WebListener
    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;//在线用户List
            
            userList = (ArrayList<User>)arg0.getSession().getServletContext().getAttribute("userList");
            
            if(SessionUtil.getUserBySessionId(userList, arg0.getSession().getId())!=null){
                userList.remove(SessionUtil.getUserBySessionId(userList, arg0.getSession().getId()));
            }
            
        }
    
    }
    View Code

    ServletRequest实现了ServletRequestListener 接口;

    public void requestDestroyed(ServletRequestEvent arg0) 

    Request创建时调用;

    public void requestInitialized(ServletRequestEvent arg0)

    Request销毁时调用; 用途:读取参数;记录访问历史;

    事例代码:

    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    import javax.servlet.annotation.WebListener;
    import javax.servlet.http.HttpServletRequest;
    
    
    @WebListener
    public class MyServletRequestListener implements ServletRequestListener {
    
        
        
        @Override
        public void requestDestroyed(ServletRequestEvent arg0) {
    
        }
    
        @Override
        public void requestInitialized(ServletRequestEvent arg0) {
                System.out.println("fff");
        }
        
    
    }
    View Code
  • 相关阅读:
    C++---const
    qt--textEdit多行文本编辑框
    qt--QByteArray字节数组
    qt5--拖放
    qt5--自定义事件与事件的发送
    qt5--键盘事件
    qt5--鼠标事件
    qt5-事件过滤器
    qt5-event事件的传递
    qt-事件的接受和忽略
  • 原文地址:https://www.cnblogs.com/zht0915/p/4688854.html
Copyright © 2020-2023  润新知