码迷,mamicode.com
首页 > 编程语言 > 详细

JavaWeb三大组件——过滤器的运行机制理解

时间:2015-10-14 23:38:35      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:

过滤器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对象

  

 
 
 

JavaWeb三大组件——过滤器的运行机制理解

标签:

原文地址:http://www.cnblogs.com/bzx888/p/4878971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!