zoukankan      html  css  js  c++  java
  • JavaWeb三大组件——过滤器的运行机制理解

    过滤器Filter

      文章前言:本文侧重实用和理解。

    一.过滤器的概念。

      lFilter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
     
    二.过滤器的运行机制。
       没有加Filter的web项目运行机制如下:
        加上Filter的web运行机制:
      由此可见:Filter的作用就是绿色网站,保护网站,实现访问权限的控制等等。
    三.怎样实现一个Filter。
    •   编写一个类实现Filter接口了。
    •   配置Filter
      <!-- 配置过滤器 -->
      <filter>
      	<!-- 过滤器名称 -->
      	<filter-name>FilterDemo1</filter-name>
      	<!-- 过滤器的类的全路径 -->
      	<filter-class>cn.itcast.filter.FilterDemo1</filter-class>
      </filter>
      
      <!-- 配置过滤器映射 -->
      <filter-mapping>
      	<!-- 过滤器名称 -->
      	<filter-name>FilterDemo1</filter-name>
      	<!-- 过滤器路径 -->
      	<url-pattern>/*</url-pattern>
      </filter-mapping>
    

      

      <filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。
      <filter-class>元素用于指定过滤器的完整的限定类名。

        <init-param>元素用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。在过滤器中,可以使用FilterConfig接口对象来访问初始化参数

      <url-pattern>标签的配置:

        * 完全路径匹配 :以 / 开始的. 如 /aa  /bb /aa/bb...

        * 目录匹配    :以 / 开始的. 以 * 结束.如 /* /aa/* /aa/bb/*

        * 扩展名匹配  :不能以 / 开始的. 如 *.jsp  *.do  *.action

      配置Filter之后,在服务器调用Servlet之前,会自动寻找与自身路径相匹配的过滤器路径,匹配之后,则执行过滤器。无匹配,则直接调用Servlet。

    四.过滤器链的概念。

      通常客户端对服务器请求之后,服务器调用Servlet之前会执行一组过滤器(多个过滤器),那么这组过滤器就称为一条过滤器链。

        每个过滤器实现某个特定的功能,一个过滤器检测多个Servlet。(匹配几个,检测几个)。

      一组过滤器中的执行顺序与<filter-mapping>的配置顺序呢有关。

      当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。

    五.过滤器的生命周期。
      
      生命周期图:
      
      三种方法:
      
      linit(FilterConfig filterConfig)throws ServletException:
        和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法进行初始化(注:filter对象只会创建一次,init方也只会执行一次 )。
        开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。(filterConfig对象见下页PPT)ldoFilter(ServletRequest,ServletResponse,FilterChain)每次filter进行拦截都会执行在实际开发中方法中参数request和response通常转换为HttpServletRequest和HttpServletResponse类型进行操作。
      
      doFilter(ServletRequest,ServletResponse,FilterChain):
        每次filter进行拦截都会执行。
        在实际开发中方法中参数request和response通常转换为HttpServletRequest和HttpServletResponse类型进行操作。
     
      destroy():
        在Web容器卸载 Filter 对象之前被调用。
    六.过滤器链的运行机制。
      
      分析运行机制:
    •    Filter里面的doFilter是Filter实例的doFilter(request,response)方法。
    •  这条责任链的运行次序依次是:代码1,代码3,代码5,Servelt、web资源..,代码6,代码4,代码2;就是因为它的头尾相呼应的机制,所以才叫它责任链。
    •  在Filter中,如果你不调用chain.doFilter(request,response)方法,就表示此次请求被拒绝,返回目标路径。 

    七.获取web.xml文件中Filter的配置信息。

      方法的调用对象:

      init(FilterConfig filterConfig)方法中的filterConifg对象.

      方法:

        getFilterName():获得过滤器名称

        getInitParameter(String name):获得过滤器的初始化参数

        getInitParameterNames():获得过滤器的所有初始化参数的名称

        getServletContext():获得ServletContext对象

      

     
     
     
  • 相关阅读:
    sqlplus时报Linux-x86_64 Error: 13: Permission denied
    thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 队列操作
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 合并石子
  • 原文地址:https://www.cnblogs.com/bzx888/p/4878971.html
Copyright © 2011-2022 走看看