一、Servlet过滤器:

1、介绍:

Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用。

Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request Header和Request内容;

在Servlet被调用之后检查Response对象,修改Response Header和Response内容。Servlet过滤器负责过滤的Web组件可以是Servlet、JSP或HTML文件。

过滤器的工作流程:

 2、接口:

init(FilterConfig):这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取web.xml 文件中Servlet过滤器的初始化参数。

doFilter(ServletRequest, ServletResponse,FilterChain):这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器。

注意:在doFilter中一定要调用chain.doFilter()调用后续过滤器以及调用servlet.service,否则会导致其他过滤器和servlet.service方法得不到执行;

destroy():Servlet容器在销毁过滤器实例前调用该方法,在这个方法中可以释放Servlet过滤器占用的资源。

3、配置:

使用过滤器还需要进行在web应用的WEB-INF/web.xml文件中进行配置,一般需要配置filter和filter-mapping,当有多个过滤器串联时就需要多个这样的配置;示例如下:

<filter>

<filter-name>authority</filter-name>

<filter-class>com.util.AuthorityFilter</filter-class>

<init-param>

<param-name>blacklist</param-name>

<param-value>someone</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>authority</filter-name>

<url-pattern>/pages1/*</url-pattern>

</filter-mapping>

二、Tomcat实现源码分析:

1、FilterDef类示例代表了一个过滤器的配置定义,配置定义文件WEB-INF/web.xml中定义了过滤器的相关信息,webRuleSet.java中就有对这个配置进行解析的代码,如下:

2、ApplicationFilterConfig实现了FilterConfig接口,封装了一个FilterDef类的实例,在getFilter方法返回一个过滤器Filter的实例,根据FilterDef信息创建Filter实例;

3、ApplicationFilterChain实现了FilterChain接口,表示过滤器链,FilterChain接口只定义了doFilter一个方法,ApplicationFilterChain.doFilter方法中调用了internalDoFilter方法,internalDoFilter方法依次调用过滤器链中的所有过滤器的doFilter方法,调用完成后再调用servlet.service方法;

在过滤器的doFilter方法中要调用chain.doFilter方法调用链中的下一个过滤器,否则后面的过滤器均无法得到执行;

过滤器链执行完后再调用servlet.service方法执行servlet;

4、StandardWrapperValve.invoke方法中创建ApplicationFilterChain实例,并调用其doFilter方法完成对过滤器链的调用和servlet.service调用;在createFilterChain中首先创建ApplicationFilterChain实例,然后从context中查找与当前request路径相符或者servlet名称相符的过滤器,添加到这个ApplicationFilterChain实例中并返回,代码如下:

tomcat源码阅读之过滤器的更多相关文章

  1. SpringMVC源码阅读:过滤器

    1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...

  2. Tomcat源码阅读(二)初始化

    近来,我开始阅读tomcat的源码,感觉还挺清晰易懂:为了方便理解,我参考了网上的一些文章,把tomcat的组成归纳一下:整个tomcat的组成如下图所示: Tomcat在接收到用户请求时,将会通过以 ...

  3. tomcat源码阅读

    1      工具准备 需要SVN.Maven.JDK.Eclipse.Eclipse M2插件 2      下载源码及发布包 源码在这里:http://svn.apache.org/repos/a ...

  4. tomcat源码阅读之SingleThreadModel

    一.接口简介: 实现了SingleThreadModel接口的servlet类只能保证在同一时刻,只有一个线程执行该servlet实例的service方法,在tomcat实现中会创建多个servlet ...

  5. tomcat源码阅读之载入器(Loader)

    一.Java类的载入器: 双亲委派模型: 1.JVM提供了三种类型的类加载器:引导类载入器(bootstrap class loader).扩展类载入器(extension class loader) ...

  6. tomcat源码阅读之BackupManager

    一. 配置: <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOpti ...

  7. tomcat源码阅读之安全机制

    一.领域(Realm): 1.Principal接口代表角色信息,包含了三个成员:用户名.密码.role列表(以逗号分隔),对应了tomcat-users.xml文件中一行user信息: Generi ...

  8. tomcat源码阅读之容器(Container)

    一. 实现容器的接口是Container接口,Tomcat中共有四种类型的容器: 1.Engine:表示整个Catalina Servlet引擎: 2.Host:表示含有一个或者多个Context容器 ...

  9. tomcat源码阅读之集群

    一. 配置: 在tomcat目录下的conf/Server.xml配置文件中增加如下配置: <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. clas ...

随机推荐

  1. 『PyTorch』第七弹_nn.Module扩展层

    有下面代码可以看出torch层函数(nn.Module)用法,使用超参数实例化层函数类(常位于网络class的__init__中),而网络class实际上就是一个高级的递归的nn.Module的cla ...

  2. 『Numpy』常用方法记录

    numpy教程 防止输出省略号 import numpy as np np.set_printoptions(threshold=np.inf) 广播机制 numpy计算函数返回默认是一维行向量: i ...

  3. NuGet 控制台代码

    安装 Bootstrap 包:Install-package -version 3.0.0 bootstrap -projectname SportsStore.WebUI 这三句常常连用,在不同项目 ...

  4. 清除mac出现的.DS_Store文件

    一.什么是.DS_Store文件 在 Mac OS X 系统下,大部分文件夹中都包含 .DS_Store 隐藏文件,这里保存着针对这个目录的特殊信息和设置配置,例如查看方式.图标大小以及这个目录的一些 ...

  5. 快速切题 sgu118. Digital Root 秦九韶公式

    118. Digital Root time limit per test: 0.25 sec. memory limit per test: 4096 KB Let f(n) be a sum of ...

  6. Prism 4 文档 ---第11章 部署Prism应用程序

        要成功移动Prism应用到生产中,需要对部署计划为应用程序的设计过程的一部分.本章介绍了注意事项和你需要采取的准备以部署应用程序,以及你要在用户手中获得部署程序所需要采取的行动.     Si ...

  7. 使用 ADOX 将 Table 添加到 Catalog 时报“类型无效”的原因和解决方法

    http://blog.csdn.net/kfhzy/article/details/6020283 http://blog.csdn.net/kfhzy/article/details/602054 ...

  8. 玩转X-CTR100 l STM32F4 l WS2812全彩LED灯

    更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      WS2812B RGB全彩LED灯珠,只需通过一根信号线控制多个 ...

  9. 亚马逊Kindle正式进入中国

    6月7日下午消息,亚马逊Kindle今天下午4点正式发售.其中,Kindle电子阅读器和Kindle Fire平板电脑同步销售.Paperwhite售价最低849元,Kindle Fire HD售价最 ...

  10. mdadm 创建md 删除md步骤

    最近在使用mdadm创建和删除RAID设备.但是在创建和删除过程中会出现创建md0重启后变成md127,删除md127重启后又重新出现的状况.在网上搜索了一下,总结如下:   创建: 1.  mdad ...