• 过滤器 -- Filter


    过滤器:

      1、所谓的过滤器, 就是拦截用户对资源的访问;

      2、一个过滤器可以拦截多个资源, 一个资源也可以配置多个过滤器进行拦截;

      3、其实所谓的拦截, 就是将代表请求的request对象和代表响应的response对象拦截下来进行拦截处理;在拦截后要放行不然资源将永远停留在过滤器中。

    自定义一个过滤器的步骤:

      (1)、创建一个class类并实现Filter接口(init、 destroy、doFilter三个方法);

      (2)、配置web.xml文件;

    Filter生命周期:
            当服务器启动时, web应用加载后会立即创建出当前web应用中的所有的Filter对象, 创建出来后, 立即调用init方法进行初始化出操作. 从此以后这个Filter对象一直驻留在内存中为后续所拦截的请求服务, 每次过滤到对资源的访问时, 都会执行doFilter这个方法进行拦截处理, 直到服务器关闭或者web应用移出容器为止, 随着web应用的销毁, 过滤器也跟着销毁, 在销毁之前会调用destroy方法执行善后的处理。

    Filter中的方法介绍
            --------------------------------------------
            init(FilterConfig filterConfig)
                FilterConfig -- 代表当前Filter在web.xml中配置信息的对象
                    通过这一对象可以获取当前过滤器在web.xml配置的初始化参数
                    通过这一对象可以获取代表当前web应用的ServletContext对象
                    获取初始化参数:
                        getInitParameter(String name);
                        getInitParameterNames()

                        getServletContext();---获取ServletContext对象
                        
            --------------------------------------------
            doFilter(request, response, FilterChian filterChian)
                  FilterChian -- 过滤器链
                      一个web资源可以被多个过滤器所拦截, 多个过滤器拦截的顺序是按照Filter在web.xml中配置的<filter-mapping>的顺序执行的。这多个过滤器按照拦截的顺序就组成了一个拦截器链, 用FilterChian表示.

                      如果一个过滤器处理完所拦截的请求后, 想要执行后面的拦截器, 则可以调用FilterChian上doFilter方法, 表示放行过滤器, 接着执行下一个节点
                      如果下一个节点仍然是过滤器, 则接着进行过滤, 执行的过程同上
                      如果没有后续的过滤器, 则执行真正的资源处理这次请求

      --------------------------------------------
            destroy()
                善后处理...

    配置过滤器
          

     <filter> -- 配置一个过滤器
           <filter-name>FilterDemo1</filter-name>
                       -- 过滤器的名字
           <filter-class>cn.tedu.FilterDemo1</filter-class> -- 过滤器处理类的全路径名
    </filter>
            
    <filter-mapping> -- 为指定的过滤器配置要拦截的路径, 一个过滤器可以配置多个
           <filter-name>FilterDemo1</filter-name> -- 过滤器的名字
           <servlet-name>ServletDemo1</servlet-name> -- 拦截哪个名字的Servlet, 可以配置多个
           <url-pattern>/servlet/*</url-pattern> -- 要拦截的路径, 路径的写法和Servlet的<url-pattern>写法一致, 可以配置多个
           <dispatcher>REQUEST</dispatcher> -- 配置拦截哪种方式的对资源的访问, 可以取值为REQUEST/FORWARD/INCLUDE/ERROR
                    REQUEST:默认,普通请求,最常用
                    FORWARD:所拦截的资源是通过请求转发访问的
                    INCLUDE:所拦截的资源是通过页面包含访问的
                    ERROR:所拦截的资源通过异常机制访问的
     </filter-mapping>

    总结:在请求servlet之前要先走过滤器,在返回响应之前也必先走过滤器。

  • 相关阅读:
    robotframework-ride1.7.3.1更新安装
    批量删除新浪微博
    Redis
    GET和POST两种基本请求方法的区别
    selenium2自动化测试实战--基于Python语言
    同步/异步/阻塞/非阻塞/BIO/NIO/AIO
    HTTP抓包实战
    LCT模板(BZOJ2631)
    树链剖分模板(BZOJ3083)
    凸包(BZOJ1069)
  • 原文地址:https://www.cnblogs.com/tongxuping/p/6963966.html
Copyright © 2020-2023  润新知