filter是什么,如它的字面意思,就是拦截器。它可以在request到达相关资源之前,比如servlet之前先处理requeset,也可以拦截或处理从某个资源比如servlet发出的response。

接口Filter

Filter是个接口,javax.servlet  Interface Filter

里面就三个方法:

生命周期

init方法:

filter在servlet容器(也就是服务器)启动的时候就会初始化,filter的init方法只会在容器实例化一个filter的时候调用一次,只调用一次,这个方法用于初始化filter。

FilterConfig是servlet容器传进init方法中的。

doFilter方法:

当Servlet每次处理Filter相关资源时,都会调用该Filter实例是doFilter方法,这个方法的参数有ServletRequest、ServletResponse、FilterChain三个。

在Filter的实现中,doFilter一定要调用FilterChain的doFilter方法!

一个资源可以被多个Filter关联到,一般我们叫这是Filter链条,这时我们的FilterChain的doFilter会触发Filter链条中的下一个Filter。只有在Filter链条中的最后一个Filter调用FilterChain.doFilter()方法,才会触发处理资源的方法(servlet中的service什么的)。

注意,FilterChain中的doFilter是和Filter中的doFilter不一样的,前者只有两个参数,后者有三个参数。

如果在Filter的实现中,没有调用这个chain的doFilter方法,那么对该request的处理就会终止。

destroy方法:

这个方法在Servlet容器要销毁Filter时触发,一般在应用停止时进行调用。

这里讲一下关于Filter处理response和request:

request来时,会先走每个filter中chain.doFilter方法之前的方法。然后走到chain.doFilter的时候,就走chain中其他filter,一样这样走。

当所有的filter的chain.doFilter方法前的内容都调用完以后,才会调用servlet的service方法。
service方法调用结束后会返回上一次的chain.doFilter方法,并执行doFilter方法后面的代码。接着,返回上上一个chain.doFilter方法……
因此,我们的Filter都是在chain.doFilter方法调用之前来处理request请求,在chain.doFilter方法调用之后处理response响应。

(图片转自博客:https://www.cnblogs.com/wuchaodzxx/p/6063530.html)

Filter的执行顺序

只有在部署描述符中,也就是web.xml中才能自定义filter的触发顺序,在web.xml中,哪个filter放在前面,就哪个先触发。

如果是用注解来配置的filter,那么它的触发顺序是根据Filter的类型字符排序,比如如果两个Filtrer类,一个是Filter0,一个是Filter1,那么这个Filter0就先于Filter1进行拦截……

记录一下filter的更多相关文章

  1. java Servlet中的过滤器Filter

    web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  2. Servlet中的过滤器Filter用法

    1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...

  3. Servlet中的过滤器Filter详解

    加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...

  4. Filter(转载)

    web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  5. Servlet过滤器Filter和监听器

    一.Servlet过滤器的概念: *********************************************************************************** ...

  6. asp.net core系列 68 Filter管道过滤器

    一.概述 本篇详细了解一下asp.net core filters,filter叫"筛选器"也叫"过滤器",是请求处理管道中的特定阶段之前或之后运行代码.fil ...

  7. JavaWeb学习篇之----Servlet过滤器Filter和监听器

    首先来看一下Servlet的过滤器内容: 一.Servlet过滤器的概念: ************************************************************** ...

  8. Lucene搜索方式大合集

    package junit; import java.io.File; import java.io.IOException; import java.text.ParseException; imp ...

  9. lucene 搜索demo

    package com.ljq.utils; import java.io.File; import java.util.ArrayList; import java.util.List; impor ...

随机推荐

  1. 机器学习: Canonical Correlation Analysis 典型相关分析

    Canonical Correlation Analysis(CCA)典型相关分析也是一种常用的降维算法.我们知道,PCA(Principal Component Analysis) 主分量分析将数据 ...

  2. 物理机装kali复盘

    复盘总结 最近把旧电脑想刷成kali的单系统,便下载了最新版本的kali 2018.1 的镜像文件.由此出现了很多问题. 首先在制作启动盘的时候,我用了很多软件,比如Ultriso,rufus,uni ...

  3. cordova 使用H5混合开发APP

    cordova 中文官网 http://cordova.axuer.com/docs/zh-cn/latest/

  4. AutoIt中ControlFocus的使用

    在使用AutoIt最控件做自动化操作的时候,经常性的会碰到无法使用Windows Info工具获取控件的属性,但是我们又需要获取该控件的焦点,我们该怎么办呢? 方法1: 应用controlFocus方 ...

  5. opencv 知识点笔记

    1.Opencv中cvScalar是CV_RGB的宏,cvScalar的储存顺序是B-G-R,而CV_RGB的储存顺序是R-G-B

  6. activeMQ:java消息机制初试(一)

    前言:自打学习编程以来,就知道activeMQ这么个东西,但是仅仅限于只知其名,不闻其详.现在加入到新的项目组,项目中使用了这个.现在想重新去学习和了解.最后整合成一个完成的demo,在网上看的Dem ...

  7. 1.7-1.12 MapReduce Wordflow

    一.案例运行MapReduce Wordflow 1.准备examples [root@hadoop-senior oozie-4.0.0-cdh5.3.6]# pwd /opt/cdh-5.3.6/ ...

  8. c++函数模板二栈实现

    1 没有使用模板的栈实现 #include <iostream> #include <string> using namespace std; class Stack { pu ...

  9. 【Linux学习】Linux系统管理1—进程管理

    Linux系统管理1-进程管理 一.Linux的三种进程 Linux包括3中不同类型的进程: 交互进程:由一个shell启动的进程.交互进程可以在前后台运行 批处理进程:该进程和终端无联系,是一个进程 ...

  10. C#读写Access数据库、表格datagridview窗体显示代码实例

    C#读写Access数据库.表格datagridview窗体显示代码实例 最近项目中用到C#对于Access数据库表读写.mdb操作,学习了下相关的东西,这里先整理C#对于Access数据库的操作,对 ...