• 过滤器和监听器


    过滤器

    1、什么是过滤器?

      原理:拦截  检查  放行,其实就是对资源的一种筛选,过滤

    2、过滤器的创建过程

      实现一个接口:Filter

      重写三个方法  init  doFilter  destroy

      在web.xml中配置过滤器 

    <filter>
          <filter-name>配置名字</filter-name>
          <filter-class>Filter类全名</filter-class>
     </filter>
    <filter-mapping>
          <filter-name>配置名字</filter-name>
          <url-pattern>过滤路径</url-pattern>
    </filter-mapping>

    3、过滤器的生命周期

      过滤器对象创建时,执行init方法一次,反复执行doFilter方法,Filter对象销毁时,执行destroy方法一次。

     过滤器什么时候创建?什么时候销毁?

      服务器启动时创建,服务器关闭时销毁。

    4、Filter中的方法 

    public void init(FilterConfig arg0)
    init方法是,Filter对象创建时执行的方法。
    该方法的参数 FilterConfig 作用:
      String getFilterName()                    获取Filter 的name
      String getInitParameter(String name)      获取初始化参数         
       Enumeration getInitParameterNames()   获取初始化参数的名字
      ServletContext getServletContext()        获取ServletContext
    public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2)
      doFilter方法是在访问过滤时,反复执行的方法。(起到拦截和放行的作用)
      该方法的参数 FilterChain 用来做过滤的放行工作。(所谓放行是指拦截后,进入要请求的资源)
     arg2.doFilter(arg0,arg1);放行
    public void destroy() {
             System.out.println("TestFilter...destroy...");
    }//过滤器销毁时调用的方法

    5、过滤器的执行流程

      单个过滤器

      多个过滤器---责任链模式

    6、过滤器配置文件  注解模式@webFilter("过滤的路径")

    <filter-mapping>
        <filter-name>TestFilter</filter-name>
        <url-pattern>过滤的路径</url-pattern>
    <dispatcher>   ---> 配置过滤器的过滤方式
        REQUEST  默认  拦截请求
        FORWARD 拦截转发(只拦截转发)
        INCLUDE 拦截包含
        ERROR   拦截错误页面
    </dispatcher>
    </filter-mapping> 

    7、过滤的路径

      1  /具体路径   /TestServlet  只有访问TestServlet才会经过这个过滤器

           2  /*          过滤所有请求

           3  *.do        过滤所有结尾是 .do的请求

    8、有很多路径需要过滤时

      将这些文件统一放入一个文件夹,如aaa  这时过滤路径写  /aaa/*  就可以了

    监听器

    1、监听器是一个对象,用来监听另一个对象的变化。

    2、web监听器(3类,8个)

      Listener 是JavaEE 中Servlet规范下的一个组件

      用来监听ServletRequest  HttpSession  ServletContext这个三个域对象。

    3、监听器在web.xml中的配置

    <listener>
           <listener-class>路径</listener-class>
    </listener>

    4、第一类:监听域对象的生命周期  

      ServletContextListener,监听ServletContext的生命周期

    public class MyServletContextListener implements ServletContextListener {
          /*
            * 监听ServletContext的生命周期(创建和销毁)
            * */
        public void contextInitialized(ServletContextEvent arg0) {
            //ServletContext创建时调用的方法    
            System.out.println("ServletContext 创建了....");
        }
        public void contextDestroyed(ServletContextEvent arg0) {
            //ServletContext销毁时调用的方法
            System.out.println("ServletContext 销毁了....");
        }
    }         

      HttpSessionListener,监听Session的生命周期

    public class MySessionListener implements HttpSessionListener {
        public void sessionCreated(HttpSessionEvent arg0) {        
            //arg0.getSession(); 获取事件源    
                System.out.println("Session创建了<<<<<");
        }
        public void sessionDestroyed(HttpSessionEvent arg0) {
                System.out.println("Session销毁<<<<<");
        }
    }

      ServletRequestListener

    public class MyRequestListener implements ServletRequestListener {
        public void requestInitialized(ServletRequestEvent arg0) {
            System.out.println("request创建了###");    
        }
        public void requestDestroyed(ServletRequestEvent arg0) {
            System.out.println("request销毁了###");
        }
    }

    4、第二类:监听值的变化

    ServletContextAttributeListener

    public class MyScAttrListener implements ServletContextAttributeListener {
        public void attributeAdded(ServletContextAttributeEvent arg0) {
            System.out.println("向SC中添加了一个值...");
        }
        public void attributeRemoved(ServletContextAttributeEvent arg0) {
            System.out.println("从SC中移除一个值<<<");
        }
        public void attributeReplaced(ServletContextAttributeEvent arg0) {
            System.out.println("替换了SC中的一个值###");
        }
    }

     HttpSessionAttributeListener

    public class MySessionAttrListener implements HttpSessionAttributeListener {
        public void attributeAdded(HttpSessionBindingEvent arg0) {    
           System.out.println("向Session中添加了一个值");
        }
        public void attributeRemoved(HttpSessionBindingEvent arg0) {    
           System.out.println("从Session中移除一个值");
        }
        public void attributeReplaced(HttpSessionBindingEvent arg0) {    
            System.out.println("替换Session中的值");
        }
    }

    ServletRequestAttributeListener

    public class MyRequestAttributeListener implements ServletRequestAttributeListener {
        public void attributeAdded(ServletRequestAttributeEvent arg0) {
            System.out.println("request添加");
        }
        public void attributeRemoved(ServletRequestAttributeEvent arg0) {
            System.out.println("request移除");
        }
        public void attributeReplaced(ServletRequestAttributeEvent arg0) {
            System.out.println("request替换");    
        }
    }

    5、第三类:监听JavaBean中的对象,部需要配置

      在bean包的类中加上

    public void valueBound(HttpSessionBindingEvent arg0) {    
            System.out.println("对象绑定到了Session中");    
    }
    public void valueUnbound(HttpSessionBindingEvent arg0) {    
            System.out.println("对象从Session中移除");
    }
  • 相关阅读:
    Selenium笔记(三)--WebDriver 等待、支持的类、javaScript警告框、提示框、确认框、Http代理、页面加载策略、网络元素、Keyboard;远程WebDriver
    Selenium3+python3自动化(四十八)--阿里云centos7上搭建selenium启动chrome浏览器headless无界面模式
    Selenium3+python3自动化(四十七)--定位的坑:class属性有空格
    Selenium3+python3自动化(四十六)--弹窗处理(PyKeyboard) tab切换,enter回车,输入
    Selenium3+python3自动化(四十五)--弹出框死活定位不到
    Selenium3+python3自动化(四十四)--行为事件(ActionChains)源码详解
    Selenium3+python3自动化(四十三)--爬取我的博客园粉丝的名称,并写入.text文件
    Selenium3+python3自动化(四十二)--批量操作循环点击报错
    Selenium3+python3自动化(四十一)--Chrome浏览器静默模式启动(headless)
    Selenium3+python3自动化(四十)--Chrome正在受到自动软件的控制
  • 原文地址:https://www.cnblogs.com/xfdhh/p/11409329.html
Copyright © 2020-2023  润新知