过滤器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. 使用原生ajax处理json字符串

    我们使用得还是wamp,如果不知道环境怎么搭建,请在我的日志里面找,此处不在累赘. 什么是json?JSON的全称是 Javascript Object Notation(javascript对象表示 ...

  2. [Android Pro] 完美解决隐藏Listview和RecyclerView去掉滚动条和滑动到边界阴影的方案

    reference to : http://blog.csdn.net/ming2316780/article/details/51578621 一.首先是Listview的属性设置 设置滑动到顶部和 ...

  3. Tensorflow mlp二分类

    只是简单demo, 可以看出tensorflow非常简洁,适合快速实验     import tensorflow as tf import numpy as np import melt_datas ...

  4. Java基础学习(一)

    常见的dos命令 盘符: 进入指定的盘符下. dir : 列出当前目录下的文件以及文件夹 md : 创建目录 rd : 删除目录    注意:rd不能删除非空的文件夹,而且只能用于删除文件夹. cd ...

  5. csc.rsp Nuget MVC/WebAPI 5.0、SignalR 2.0、Rx、Json、Azure、EntityFramework、OAuth、Spatial

    # This file contains command-line options that the C# # command line compiler (CSC) will process as ...

  6. 汽车遥控钥匙HCS101/HCS200/HCS201/HCS300芯片解密

    汽车遥控钥匙芯片解密ic解密型号: HCS101 | HCS200 | HCS201 | HCS201T | HCS300 | HCS300T HCS301 | HCS301T | HCS360 |  ...

  7. 《DSP using MATLAB》示例Example5.11

  8. Appium中部分api的使用方法

    使用的语言是java,appium的版本是1.3.4,java-client的版本是java-client-2.1.0,建议多参考java-client-2.1.0-javadoc. 1.使用Andr ...

  9. dedecms为什么文档标题最大长度只能显示二十个汉字呢?

    今天遇到文章标题无论怎么修改,超出二十个汉字不能全部保存,系统只截取前二十个汉字的内容进行保存. 在后台查看系统设置: 系统——其它选项——文档标题最大长度,的值是60,对应的数据库表字段char的长 ...

  10. vue.js慢速入门(1)

    0.MVVM 什么是MVVM?就是Model-View-ViewModel. ViewModel是Vue.js的核心,它是一个Vue实例. 不太懂也没关系,慢慢就懂了. 1.基础示例 代码: < ...