java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序
过滤器拦截到响应url的请求后会先执行doFilter()方法中chain.doFilter()之前的代码,然后执行下一个过滤器或者servelt。紧接着执行chain.doFilter()之后的代码。
一下为两个过滤器的执行顺序:
过滤器一:
package com.rskd_yswb.lib.filter; import javax.servlet.*;
import java.io.IOException; public class HttpRequestAndResponseFilter implements Filter {
private FilterConfig filterConfig; public void destroy() {
} public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
resp.setCharacterEncoding(this.filterConfig.getInitParameter("encoding"));
System.out.println("HttpRequestAndResponseFilterBefore");
chain.doFilter(req, resp);
System.out.println("HttpRequestAndResponseFilterAfter");
} public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
} }
过滤器二:
package com.rskd_yswb.lib.filter; import javax.servlet.*;
import java.io.IOException; public class Test2Filter implements Filter {
public void destroy() {
} public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("Test2FilterBefore");
chain.doFilter(req, resp);
System.out.println("Test2FilterAfter");
} public void init(FilterConfig config) throws ServletException { } }
要执行的servlet:
package com.rskd_yswb.servelt; import com.rskd_yswb.javabean.db.ConsumerEntity;
import com.rskd_yswb.lib.db.DBConnection;
import com.rskd_yswb.lib.db.GenerateSqlStatement;
import com.rskd_yswb.lib.freemarker.FreeMarker;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanMapHandler;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.Writer;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map; public class IndexServlet extends javax.servlet.http.HttpServlet {
private static Logger logger = LogManager.getLogger(IndexServlet.class); protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
doGet(request, response);
} protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
String sql = new GenerateSqlStatement().select("*").from("consumer").get();
try {
Map<String, ConsumerEntity> consumer = new QueryRunner().query(DBConnection.getConnection(), sql, new BeanMapHandler<String, ConsumerEntity>(ConsumerEntity.class, "username"));
} catch (Exception e) {
logger.debug("IndexServlet Error:" + e.getMessage());
}
Map<String, Object> root = new HashMap<String, Object>();
try {
FreeMarker.getFreemarker().getTemplate("index.ftl").process(root, response.getWriter());
System.out.println("请求处理中");
} catch (TemplateException e) {
logger.debug("IndexServlet Error:" + e.getMessage());
}
}
}
web.xml配置内容如下:
<web-app>
<filter>
<filter-name>HttpRequestAndResponseFilter</filter-name>
<filter-class>com.rskd_yswb.lib.filter.HttpRequestAndResponseFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
</filter>
<filter>
<filter-name>Test2Filter</filter-name>
<filter-class>com.rskd_yswb.lib.filter.Test2Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpRequestAndResponseFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <filter-mapping>
<filter-name>Test2Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <servlet>
<servlet-name>IndexServlet</servlet-name>
<servlet-class>com.rskd_yswb.servelt.IndexServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>IndexServlet</servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
</web-app>
filter的执行顺序如同web.xml中的配置的顺序,在浏览器输入http://localhost:8080/index 控制台将打印如下内容:
HttpRequestAndResponseFilterBefore
Test2FilterBefore
请求处理中
Test2FilterAfter
HttpRequestAndResponseFilterAfter
java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序的更多相关文章
- php课程 1-3 web项目中php、html、js代码的执行顺序是怎样的(详解)
php课程 1-3 web项目中php.html.js代码的执行顺序是怎样的(详解) 一.总结 一句话总结:b/s结构 总是先执行服务器端的先.js是客户端脚本 ,是最后执行的.所以肯定是php先执行 ...
- Java过滤器Filter使用详解
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6374212.html 在我的项目中有具体应用:https://github.com/ygj0930/Coupl ...
- java过滤器filter使用
一:filter:过滤器,拦截servlet的请求和响应. 1. package jd.com.filter; import javax.servlet.*; import java.io.IOExc ...
- java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
java 过滤器Filter: package com.sun.test.aircraft.filter;import javax.servlet.*;import java.io.IOExcepti ...
- Java过滤器Filter的原理及配置_学习笔记
Filter中文意思为过滤器.顾名思义,过滤器可在浏览器以及目标资源之间起到一个过滤的作用.例如:水净化器,可以看成是生活中的一个过滤器,他可以将污水中的杂质过滤,从而使进入的污水变成净水. 对于WE ...
- 如何在Java的Filter中注入Service???
今天在做用户使用cookie自动登录的时候,发现在LoginFilter中读取到cookie以后要进行查询数据库然后进行用户名和密码的比对,查询数据库肯定要用到Service和Dao,一开始我以为在s ...
- 关于java中构造方法、实例初始化、静态初始化执行顺序
在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class ...
- Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)
继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...
- 创建HttpFilter与理解多个Filter代码的执行顺序
1.自定义的HttpFilter,实现Filter接口 HttpFilter package com.aff.filter; import java.io.IOException; import ja ...
随机推荐
- Selenium 使用方法小结
基本介绍: Selenium工具专门为WEB应用程序编写的一个验收测试工具. Selenium的核心:browser bot,是用JAVASCRIPT编写的. Selenium工具有4种:Sele ...
- MFC对话框
创建对话框步骤: 第一,创建对话框资源,主要包括创建新的对话框模板.设置对话框属性和为对话框添加各种控件: 第二,生成对话框类,主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 创建对话框类 ...
- WAMP下 搭建Zend Framework(Hello World)实例
一.环境搭建 1.下载安装Zend Framework,此步骤不再详细叙述 2.配置php.ini文件 打开php.ini文件,可以找到如下的代码: ; Windows: "\path1;\ ...
- Error starting static Resources java.lang.IllegalArgumentException: Document base D:\Program Files\apache-tomcat-xxx\webapps\xxx does not exist or is not a readable directory
网上的答案大多数如下: 但并没有解决我的问题 经过我的观察: 在tomcat的server.xml有Lottery项目描述,但实际上,该项目已被我删除,不存在于webapps中了 该行Cont ...
- Petshop学习第一天
1.PetShop的体系架构: 2.分层设计的目的: 分散关注.松散耦合.逻辑复用.标准定义 3.一些不明白的地方: item和product是什么关系??? Model类库中的Linq To Sql ...
- hdu 2716 Message Decowding
Message Decowding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- nyoj 44 子串和
子串和 时间限制:5000 ms | 内存限制:65535 KB 难度:3 描述 给定一整型数列{a1,a2...,an},找出连续非空子串{ax,ax+1,...,ay},使得该子序列的和最 ...
- Keil: warning: A1581W: Added 2 bytes of padding at address
KEIL MDK编译警告: warning: A1581W: Added 2 bytes of padding at address xxx 原因: 在Keil 里写汇编代码时如果代码尺寸不对齐, ...
- Delphi- ini文件的读写操作
一.读INI文件示例 procedure TForm1.FormCreate(Sender: TObject); Var MyIni :Tinifile; glAppPath :string; beg ...
- Linux基本操作 9----- 认识与学习bash
一 认识bash这个shell 1 管理整个计算机硬件的其实就是操作系统的内核,这个内核是需要被保护的,所以我们一般用户就只能通过shell来跟内核通信,以让内核达到我们所想打到的工作. 2 只要能够 ...