zoukankan      html  css  js  c++  java
  • 监听器

    监听器: 运行在服务器端的程序, 主要用于监听request, application, session这三个对象, 比如这三个对象的创建和销毁, 修改属性等一系列的操作
    监听器的配置
    创建类实现关于监听器的那些接口
    public class TestListener implements ...Listener... {
    ...实现其中的方法
    }

    web.xml中的配置
    <listener>
    <listener-class>定义监听器的类的全路径名</listener-class>
    </listener>

    使用注解的方式:
    @WebListener写在类名的上面

    多个监听器的加载顺序
    按照web.xml的配置顺序来加载各个监听器
    如果在web.xml中配置有监听器, 过滤器, Servlet时, 他们的优先级分别为
    监听器 > 过滤器 > Servlet

    ServletContext对象的监听
    在web.xml中有这样一个标签:
    <context-param>
    <param-name>初始化的参数名</param-name>
    <param-value>初始化的参数值</param-value>
    </context-param>

    在监听器中可以使用参数对象来获取这个初始化参数
    String value = applicationEvent.getServletContext().getInitParameter("hanqi");
    HttpSession对象的监听
    session在一个用户第一次访问这个页面的时候被创建, session的实例可以创建多个, 有一个用户访问, 就会创建一个session
    回忆一下session的过期时间怎么配置
    用途: 统计在线人数, 网站的用户访问量

    HttpServletRequest对象的监听
    只要有请求发送过来, 就会执行监听器中的init()方法和destory()方法
    用途: 读取参数, 记录访问历史

    3.0版本之后的监听器只需要加上一个@WebListenner注解就可以使用, 但是跟之前在web.xml中配置的时候相比, 有一个缺点, 无法确定监听器的加载顺序

    TestApplicationListener.java

    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    public class TestApplicationListener implements ServletContextListener {
    
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            System.out.println("application对象销毁");
        }
    
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            System.out.println("创建application对象");
        }
    
    }

    TestRequestListener.java

    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    
    public class TestRequestListener implements ServletRequestListener {
    
        @Override
        public void requestDestroyed(ServletRequestEvent arg0) {
            System.out.println("request对象被销毁了");
        }
    
        @Override
        public void requestInitialized(ServletRequestEvent arg0) {
            System.out.println("初始化request对象");
        }
    
    }
    TestSessionListener.java
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    public class TestSessionListener implements HttpSessionListener {
    
        private int userCount;
        
        @Override
        public void sessionCreated(HttpSessionEvent sessionEvent) {
            userCount++;
            sessionEvent.getSession().getServletContext().setAttribute("userCount", userCount);
            System.out.println("创建session对象");
        }
    
        @Override
        public void sessionDestroyed(HttpSessionEvent sessionEvent) {
            userCount--;
            sessionEvent.getSession().getServletContext().setAttribute("userCount", userCount);
            System.out.println("session对象被销毁了");
        }
    
    }
    TestRequestAttributeListener.java
    import javax.servlet.ServletRequestAttributeEvent;
    import javax.servlet.ServletRequestAttributeListener;
    
    public class TestRequestAttributeListener implements ServletRequestAttributeListener {
    
        @Override
        public void attributeAdded(ServletRequestAttributeEvent arg0) {
            System.out.println("request对象添加属性");
        }
    
        @Override
        public void attributeRemoved(ServletRequestAttributeEvent arg0) {
            System.out.println("移除request属性");
        }
    
        @Override
        public void attributeReplaced(ServletRequestAttributeEvent arg0) {
            System.out.println("替换request属性");
        }
    
    }

    index.jsp

    <hr>
    当前在线人数: <%=application.getAttribute("userCount") %>
    <hr>

  • 相关阅读:
    生成树
    如何自定义百度网盘分享密码
    斯特林数入门
    各种反演难题训练集合
    LOJ[6247]九个太阳
    min25筛入门
    2020 Petrozavodsk Winter Camp, Jagiellonian U Contest-A-Bags of Candies
    ICPC WF 2018 C Conquer the World 征服世界
    dsu on tree
    生成函数入门级内容
  • 原文地址:https://www.cnblogs.com/jgjk/p/7441747.html
Copyright © 2011-2022 走看看