zoukankan      html  css  js  c++  java
  • 过滤器和监听器

    过滤器

    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中移除");
    }
  • 相关阅读:
    73. Set Matrix Zeroes
    289. Game of Live
    212. Word Search II
    79. Word Search
    142. Linked List Cycle II
    141. Linked List Cycle
    287. Find the Duplicate Number
    260. Single Number III
    137. Single Number II
    Oracle EBS中有关Form的触发器的执行顺序
  • 原文地址:https://www.cnblogs.com/xfdhh/p/11409329.html
Copyright © 2011-2022 走看看