`
terry0501
  • 浏览: 305562 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 过滤器总结

 
阅读更多

 1.Filter的介绍

  Filter技术是servlet 2.3新增加的功能。它能够对Servlet容器的请求和响应对象进行检查和修改。

  Filter本身并不生成请求和响应对象,只是提供过滤功能。

  Filter能够在Servlet被调用之前检查Request对象,并修改Request Header和Request内容;在Servlet被调用之后检查Response对象,修改Response Header和Response的内容。

  Filter可以过滤的Web组件包括Servlet,JSP和HTML等文件。

  2.Filter的工作原理

  当客户端发出Web资源的请求时,Web服务器根 据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行检查或改动,并依次通过过滤器 链,最后把请求/响应交给请求的Web资源处理。请求信息在过滤器链中可以被修改,也可以根据条件让请求不发往资源处理器,并直接向客户机发回一个响应。 当资源处理器完成了对资源的处理后,响应信息将逐级逆向返回。同样在这个过程中,用户可以修改响应信息,从而完成一定的任务。

  两个过滤器同时过滤一个请求时,就要用到过滤链FilterChain.Filter的FilterChain中,服务器会 按照web.xml中过滤器定义的先后循序组装成一条链,然后一次执行其中的doFilter()方法。执行的顺序就如下图所示,执行第一个过滤器的 chain.doFilter()之前的代码,第二个过滤器的chain.doFilter()之前的代码,请求的资源,第二个过滤器的 chain.doFilter()之后的代码,第一个过滤器的chain.doFilter()之后的代码,最后返回响应。

  Filter的执行流程就是:执行第一个过滤器的chain.doFilter()之前的代码-->第二个过滤器的 chain.doFilter()之前的代码-->……-->第n个过滤器的chain.doFilter()之前的代码-->所请求 servlet的service()方法中的代码-->所请求servlet的doGet()或doPost()方法中的代码-->第n个过 滤器的chain.doFilter()之后的代码-->……-->第二个过滤器的chain.doFilter()之后的代码--> 第一个过滤器的chain.doFilter()之后的代码。

  3.Filter生命周期的四个阶段

  (1)实例化:Web容器在部署Web应用程序时对所有过滤器进行实例化。Web容器回调它的无参构造方法。

  (2)初始化:实例化完成之后,马上进行初始化工作。Web容器回调init()方法。

  (3)过滤:请求路径匹配过滤器的URL映射时。Web容器回调doFilter()方法--主要的工作方法。

  (4)销毁: Web容器在卸载Web应用程序前,Web容器回调destroy()方法。

  4.Filter的API

  public Interface Filter

  所有的过滤器都必须实现Filter接口。该接口定义了init,doFilter0,destory()三个方法:

  (1) public void init (FilterConfig filterConfig)

  当开始使用servlet过滤器服务时,Web容器调用此方法一次,为服务准备过滤器;然后在需要使用过滤器的时候调用doFilter(),传送给此方法的FilterConfig对象,包含servlet过滤器的初始化参数。

  示例:

  Filter的init方法中提供了一个FilterConfig对象,提供相关的操作:

  如获取Filter中配置的初始化参数:

  <filter>

  <filter-name>LoginFilter</filter-name>

  <filter-class>com.itzhai.login.LoginFilter</filter-class>

  <init-param>

  <param-name>username</param-name>

  <param-value>HelloWorld</param-value>

  </init-param>

  </filter>

  在init方法中获取:

  @Override

  public void init(FilterConfig filterConfig) throws ServletException

  {

  //获取Filter初始化参数

  String username = filterConfig.getInitParameter("username");

  }

  (2)public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)

  每个过滤器都接受当前的请求和响应,且FilterChain过滤器链中的过滤器(应该都是符合条件的)都会被执行。doFilter方 法中,过滤器可以对请求和响应做它想做的一切,通过调用他们的方法收集数据,或者给对象添加新的行为。过滤器通过传送至 此方法的FilterChain参数,调用chain.doFilterO将控制权传送给下一个过滤器。当这个调用返回后,过滤器可以在它的 Filter方法的最后对响应做些其他的工作。如果过滤器想要终止请求的处理或得到对响应的完全控制,则可以不调用下一个过滤 器,而将其重定向至其它一些页面。当链中的最后一个过滤器调用chain.doFilterO方法时,将运行最初请求的Servlet.

  (3)public void destroy()

  一旦doFilterO方法里的所有线程退出或已超时,容器调用此方法。服务器调用destoryO以指出过滤器已结束服务,用于释放过滤器占用的资源。

分享到:
评论

相关推荐

    java过滤器、监听器拦截器原理个人总结.pdf

    java过滤器、监听器拦截器原理个人总结.pdf

    Java servlet过滤器配置详解

    开发中总结的通用过滤器配置,包括EncodingFilter类、jsp页面配置和web.xml文件的配置代码

    过滤器 java servlet

    过滤器 总结 整理 好的东西 全面

    Java基础知识点总结.docx

    过滤器模式 192 组合模式 193 装饰器模式★★★★★ 196 外观模式 201 享元模式 204 代理模式★★★★★ 208 责任链模式 212 命令模式 216 解释器模式 219 迭代器模式 222 中介者模式 224 备忘录模式 226 观察者模式...

    使用Java创建电子邮件过滤器 - 一个实战教程

    在本实战教程中,我们将使用Java编程语言创建一个简单的电子邮件过滤器。这个电子邮件过滤器将允许用户收取、分类和过滤电子邮件,以便更有效地管理电子邮件通信。 以下是本实战教程的主要内容: 项目概述 准备...

    JAVA基础学习总结笔记

    看的东西不在多,而在于精, 程序设计最重要的就是上级操作了, 既然选择了,就该要有...过滤器,监听器 struts相关笔记. 等等...... 里面是当年自学JAVA时的一些笔记,内容都是TXT格式的,都是一些基础性的概念总结。

    大二下面向对象 Java六次实验报告+思维导图总结xmind文件和图片+项目总结报告 +netbeans安装包 大连工业

    实验一 编写简单程序 1.实验目的 通过编写有输入和输出的简单程序, 为用户提供与计算机交换信息的渠道. 实验二 函数 1.实验目的 通过基本语句和函数的使用, 为程序设计语言扩充新功能. 实验三 类与对象 ...

    CoreJava面试题汇总.html

    3 filter过滤器用过么,一般用在什么地方? 4 多线程一般用在什么地方? 5 list用过哪些?ArrayList如何排序?list跟set的区别? 6 异常包括什么?说一下运行时异常?throwable error,说一下什么叫error,什么叫非...

    Java语言基础下载

    Servlet过滤器 569 Servlet监听器 576 内容总结 579 独立实践 580 第二十九章: Jsp 技术 583 学习目标 583 JSP介绍 584 JSP语法 584 模板元素 588 指令元素 588 页面指令 588 标签库指令 593 脚本元素 593 动作元素...

    免费超全面的Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结

    java基础 一、仓库说明 Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结。 2、分类文档 JVM虚拟机 JVM特点,结构与执行周期 ...过滤器、监听器、拦截器,应用详解 Servlet 集成 C3P0

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。  《java jdk 7学习笔记》针对java se 7新功能全面改版,无论是...

    SpringBoot+layui民宿管理系统JAVA后端-毕业设计-【JSB项目实战】

    SpringBoot+layui民宿管理系统JAVA后端-毕业设计-【JSB项目实战】 ...SpringBoot知识范围-学习步骤【JSB系列之000】 ...过滤器类 mapper 实体类 跑起来 后台 用浏览器最原始的方式验证 页面展示 总结 配套资源

    基于JAVA的购物网站(毕业论文)

    3.5.3 过滤器类设计 26 3.5.4 监听器类设计 26 3.6系统的用例图 27 3.6.1 总体用例分析 27 3.6.2 用户管理用例分析 28 3.6.3 购物车管理用例分析 28 小结 30 第四章 系统的详细设计 31 4.1 数据库与POJO映射的实现 ...

    java个人博客毕业论文

    5.2.2 字符编码过滤器EncodingFilter 30 5.3 系统主要功能模块设计 30 5.3.1 相册模块 30 5.3.2 日志模块 32 5.3.3 视频模块 34 5.3.4 留言板模块 35 6 研究成果与前景展望 35 6.1 研究成果概述 35 6.2 软件测试 36 ...

    基于XML和JAVA的异构数据库集成中间件系统的研究和实现

    (2)结果合并过滤模块 5.元数据 (1)元数据的组成 (2)元数据的管理 6.包装器的实现 (1)数据库操作模块 (2)SQL查询生成XML文档模块 7.系统设计总结 六、系统测试与应用 1.测试环境 2.测试说明 (1)系统设计说明 ...

    整理后java开发全套达内学习笔记(含练习)

    Iterator [java] 迭代器, 迭代程序 legal 合法的 ['li:gәl] log n.日志,记录 [lɒg] native (关键字) ?? ['neitiv] nested [java] 嵌套的 ['nestid] '如:内部类(nested classes) Object [java] 对象 ['ɒbdʒ...

    J2EE(Java EE)技术总结-J2EE学习精华教程-电子书

    .....Web_过滤器 .....Web_MVC设计模式 .....JDBC .....JDBC_各种数据库连接 .....XML_基础 .....XML_DTD(文档描述与校验技术之一) .....XML_Schema(文档描述与校验技术之一) .....XML_DOM(文档编程接口之一) ........

    filter 知识小结

    对filter(过滤器)知识进行了深入的详解

    JAVA项目开发全程实录(含电子书和所有源代码)

    8.5.2 创建Web应用过滤器 363 8.5.3 构建转码类 365 8.6 网站首页设计 365 8.6.1 首页概述 365 8.6.2 首页技术分析 365 8.6.3 首页的实现过程 367 8.7 商品介绍模块设计 369 8.7.1 商品介绍模块概述 369 8.7.2 商品...

    多文件上传例子(解决中文乱码)

    2、写过滤器,设置request.setCharacterEncoding("UTF-8")。 3、javascript脚本里用encodeURI(str)。 4、适当的时候,在jsp里用java.net.URLDecoder.decode(request.getParameter("str"),"UTF-8")。 5、最容易忽略的...

Global site tag (gtag.js) - Google Analytics