过滤器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三大组件——过滤器的运行机制理解的更多相关文章

  1. JavaWeb三大组件—过滤器filter

    JavaWeb三大组件 1. 都需要在web.xml中进行配置ServletListener(2个感知监听器不需要配置)Filter 2. 过滤器 它会在一组资源(jsp.servlet..css.. ...

  2. Javaweb三大组件-过滤器、监听器

    1. 过滤器 [filter] 作用: 对单个获取多个servlet起到增强[advice]的作用. 用于在所有的servlet执行前,做一些预处理.例如:做编码处理, 访问量统计[servletCo ...

  3. 学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)

    过滤器Filter Filter和Lister是Servlet规范里的两个高级特性.不同于Servlet,它们不用于处理客户端请求,只用于对request.response进行修改或者对context ...

  4. JavaWeb三大组件

    一.JavaWeb三大组件 Servlet,Listener,Filter.它们在JavaWeb开发中分别提供不同的功能. JavaWeb三大组件都必须在Web.xml中配置 二.三大组件 1.Ser ...

  5. JavaWeb三大组件(Servlet、Filter、Listener)

    JavaWeb三大组件指的是:Servlet.Filter.Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet.Filter,比 ...

  6. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference

  7. 转-JavaWeb三大组件之Listener监听器

    JavaWeb三大组件之Listener监听器一.概述1,它是一个接口,内容由我们来实现 2,它需要注册,例如注册在按钮上 3,监听器中的方法,会在特殊事件发生时被调用 二.JavaWeb中的监听器1 ...

  8. Filter过滤器-JavaWeb三大组件之一

    Servlet.Filter.Listener是JavaWeb的三大组件,给Web开发提供了很大的便利. 什么是Filter? Filter,过滤器.类似与生活中的净水器.空气净化器. JavaWeb ...

  9. 【图解ASP.NET MVC运行机制理解-简易版】

    很多盆友咨询ASP.NET MVC的机制.网上也有好多.但是都是相当深奥.看的云里雾里的.我今天抽空,整理个简易版本.把处理流程走一遍. 当然,这个只是处理请求的一部分环节.百度的面试题“客户端从浏览 ...

随机推荐

  1. 如何在WIN2008或WIN2012 64位系统安装32位SQL2000

    如何在WIN2008或WIN2012 64位系统安装32位SQL2000 在日常服务器,云服务器或VPS中,因尔特网络工程师遇到部分使用了WIN2008 或WN2012 64位系统的用户需要安装SQL ...

  2. javascript学习 真正理解DOM脚本编程技术背后的思路和原则

    本文学习来源于<javascriptDOM编程艺术>仅作笔记 学会怎样才能利用DOM脚本编程技术以一种既方便自己更体贴用户的方式去充实和完善你们的网页. 循序渐进:从最核心的内容开始,逐步 ...

  3. C#中对string与string[]的初步操作

    开篇之作,简单的对string与string[]进行初步操作,入门篇也,不多说,直接上代码. using System; using System.Collections.Generic; using ...

  4. C++中动态内粗分配new标识符的使用

    new是C++中内建的操作符,具体用法见下面详解: (1)new用法一:基本数据类型的内存动态分配 int *p; p=new int(10): 在这个例子中首先定义个一个指向整型类型的指针,紧接着用 ...

  5. PCM数据格式,多少字节算一帧

    转自:http://blog.chinaunix.net/uid-9185047-id-3327302.html Somehow i remember that normally 2048 sampl ...

  6. 你不知道的parseInt

      首先,请允许我抄袭一段你知道的parseInt   以下节选自parseInt - JavaScript | MDN 实际上你连这些基础都没掌握 概述 parseInt() 函数将给定的字符串以指 ...

  7. sql表和字段的别名

    1. sql表和字段的别名通过关键字 AS 来指定. 2.通常,定义字段别名的 AS 关键字可以省略,但我们建议不要省略 AS 关键字.别名(alias)是 SQL 的标准语法,几乎所有的数据库系统都 ...

  8. BFC的深入理解

    一:BFC是什么东东 了解BFC前先一了解一下Box和Formatting Context (1)B: BOX即盒子,页面的基本构成元素.分为 inline . block 和 run-in 三种类型 ...

  9. psql-09表:视图和索引

    视图 由查询语句定义的虚拟表;从视图中看到的数据可能来自数据库中的一张或多张表,也可能来自外部; 使用视图的原因一般有: 使复制的查询易于理解和使用; 安全原因; 表一些函数返回的结果映射成视图; 一 ...

  10. 逗号分割符--字段中含逗号等情况的解析方法Java实现

    最近在处理文本字符串时,没一行数据都是按照逗号分割的,每个字段值一般情况是带有双引号的,但是有的字段值里面还包含逗号,甚至有的字段就没有双引号,这个分割起来就有点麻烦了 下面说一下我解决方法,如果谁有 ...