`

JAVA三大器之过滤器——filter

 
阅读更多

Filter接口源代码:

public abstract interface Filter{
    public abstract void init(FilterConfig paramFilterConfig) throws ServletException;
    public abstract void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain 
        paramFilterChain) throws IOException, ServletException;
    public abstract void destroy();
}

Filter的工作原理:

      Filter接口中有一个doFilter方法,当我们编写好Filter,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法 。

 

 

Filter开发步骤:
Filter开发分为2步:
 * 编写java类实现Filter接口,并实现其doFilter方法。
 * 在web.xml 文件中使用<filter>和<filter-mapping>元素对编写的filter类进行注册,并设置它所能拦截的资源。

 

示例:

filter示例代码:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
 * @author yangcq
 * @description 过滤器Filter的工作原理
 */
public class FilterTest implements Filter{

    public void destroy() {
        System.out.println("----Filter销毁----");
    }

    public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {
        // 对request、response进行一些预处理
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        System.out.println("----调用service之前执行一段代码----");
        filterChain.doFilter(request, response); // 执行目标资源,放行
        System.out.println("----调用service之后执行一段代码----");
    }

    public void init(FilterConfig arg0) throws ServletException {
        System.out.println("----Filter初始化----");
    }
}

 

 

web.xml里配置filter:

  1. <filter>  
  2.     <description>过滤器名称</description>  
  3.     <filter-name>自定义的名字</filter-name>  
  4.     <filter-class>com.yangcq.filter.FilterTest</filter-class>  
  5.     <!--配置FilterTest过滤器的初始化参数-->  
  6.     <init-param>  
  7.         <description>配置过滤器的初始化参数</description>  
  8.         <param-name>name</param-name>  
  9.         <param-value>gacl</param-value>  
  10.     </init-param>  
  11.     <init-param>  
  12.         <description>配置FilterTest过滤器的初始化参数</description>  
  13.         <param-name>like</param-name>  
  14.         <param-value>java</param-value>  
  15.     </init-param>  
  16. </filter> 

 

Filter链:
  在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了ilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,
如果没有,则调用目标资源。

 

 

分享到:
评论

相关推荐

    Java三大器.zip

    Java三大器过滤器&拦截器&监听器实现,其中每一个包都能单独运行,但是全部一起运行时会报错,原因是SpringBoot有关@Bean注入的问题,作者学艺不精只有待以后学懂后改,大家先将就看,源码解析及有关Java三大器理解...

    python基础(补充):python三大器之迭代器.pdf

    Python基础(补充):python三大器之迭代器 迭代器是 Python 中的一种重要数据类型,它们是可重复执行的对象,用于实现循环操作。迭代器的概念来自于数学中的迭代法,即重复执行一系列运算步骤,从前面的量依次求出...

    [“大器之才”阅读答案] 大器之才的阅读答案.docx

    1. **天赋与决心** - 文中的"大器之才"指的是具有非凡才能和潜力的人,比尔·盖茨就是这样的例子。他在年幼时就表现出了超出同龄人的聪颖好学,对图书管理表现出浓厚的兴趣,并且愿意付出努力去做好这件事。 2. **...

    python基础(补充):python三大器之生成器.pdf

    Python 基础补充:Python 三大器之生成器 Python 中的生成器(Generator)是一种特殊的数据结构,能够在循环的过程中不断推算出后续的元素,从而节省大量的空间。生成器可以用两种方式创建:生成器表达式和生成器...

    python基础(补充):python三大器之装饰器.pdf

    Python基础(补充):python三大器之装饰器 Python中的函数是一等公民,可以作为参数传递,也可以作为返回值返回。高阶函数可以接受函数作为参数,也可以把函数作为结果值返回。在本文中,我们将学习Python中的...

    大器之才的意思是什么参考.doc

    【大器之才】这个词语在文章中用来形容比尔·盖茨,指的是具有很高才能、能够成就大事业的人。这个词语通常用于赞扬那些具备非凡潜力和杰出能力,有望在未来取得显著成就的个体。在文章中,这个四年级的男孩表现出的...

    设计方波——三角波——正弦波函数信号发生器

    设计方波——三角波——正弦波函数信号发生器 一、总体介绍 本设计报告介绍了一个完整的函数信号发生器的设计,能够产生方波、三角波和正弦波三个基本波形。该设计使用集成运算放大器和晶体管差分放大器共同组成的...

    动力电池-国之大器,锂电崛起.pdf

    动力电池-国之大器,锂电崛起.pdf

    动力电池:国之大器,锂电崛起.pdf

    动力电池:国之大器,锂电崛起.pdf

    非常大器漂亮实用的查询源码

    【标题】"非常大器漂亮实用的查询源码"揭示了这是一个美观且功能强大的查询功能的源代码。源码通常是编程人员为了实现特定功能而编写的代码,它提供了对程序内部逻辑的直接访问,便于其他开发者研究、学习或在自己的...

    低频功率发大器.ms14

    multisim仿真,低频功率发大器

    文件增肥器 变大器

    免杀过云杀专用。可以把文件虚胖到几百M,轻松过云杀压缩后仍然原体积压缩,释放后几百M。干什么你懂得

    大器新闻采集1.5.0 FOR DZ!X1.5 UTF-8

    6. **过滤机制**:为了防止重复内容的出现,大器新闻采集还具有内容过滤机制,能够识别已经发布的新闻,避免重复采集和发布。 7. **自定义发布模板**:用户可以根据自己的需求,设计个性化的新闻发布模板,使发布的...

    大器新闻采集1[1].5.0 FOR Discuz!X1.5

    《大器新闻采集1[1].5.0 FOR Discuz!X1.5》是一款专为Discuz!X1.5论坛系统设计的新闻采集工具,其主要功能是自动化地从互联网上抓取新闻内容,并将其发布到基于Discuz!X1.5平台的论坛中。这款软件旨在提高网站内容...

    五年级语文下册 勤奋自学成大器 3教案 沪教版.doc

    这正是“勤奋自学成大器”主题的核心要义——无论遇到多大的挑战,都不应放弃追求知识和梦想。 在教案的结尾,我们可以引导学生讨论海伦·凯勒的故事给他们的启示。通过小组讨论或者个人反思的方式,让学生思考海伦...

    大器新闻采集2.0.1 FOR Discuz!X2 UTF8版

    第三步:把darqi目录下的子目录images读写权限设成777,这个是为图片本地化用的,如果设置不同目录存放,则要将该目录读写权限设置成777; 第四步:将压缩包中cron目录下的文件cron_darqi_auto.php上传到你的论坛...

    动力电池-国之大器,锂电崛起.zip

    总而言之,动力电池作为国之大器,其发展不仅关系到新能源汽车的未来,更与国家的能源安全和环境可持续发展息息相关。锂电崛起的故事,是一部技术创新、产业升级和市场驱动交织的生动篇章。我们期待着在不断突破技术...

    ios-大器建筑.zip

    "ios-大器建筑.zip"这个压缩包可能包含了一个关于智能硬件App开发的项目或者教程资源,尽管具体内容无法直接查看,但我们可以根据其标题和描述推测其中可能涵盖的关键知识点。 1. **iOS开发基础**:首先,理解并...

    五年级语文下册 勤奋自学成大器 1教案 沪教版.doc

    在小学五年级的语文课堂上,学生们迎来了一堂别开生面的课——《勤奋自学成大器》。这一课不仅是一次语文知识的学习,更是一次关于自学精神和人格力量的教育。教案的设计紧贴沪教版五年级语文下册的教学要求,旨在...

Global site tag (gtag.js) - Google Analytics