java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序
2016-10-24 23:32
477 查看
过滤器拦截到响应url的请求后会先执行doFilter()方法中chain.doFilter()之前的代码,然后执行下一个过滤器或者servelt。紧接着执行chain.doFilter()之后的代码。
一下为两个过滤器的执行顺序:
过滤器一:
过滤器二:
要执行的servlet:
web.xml配置内容如下:
filter的执行顺序如同web.xml中的配置的顺序,在浏览器输入http://localhost:8080/index 控制台将打印如下内容:
一下为两个过滤器的执行顺序:
过滤器一:
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基础(30) Java代码finally语句到底是在return之前还是之后执行?
- java-过滤器Filter_多个Filter的执行顺序
- 一个关于继承关系中静态快、成员变量、构造体代码的执行顺序的Java代码
- Java父子类静态代码/非静态代码/构造函数执行顺序
- Java代码执行顺序-简单版
- java finally语句到底是在return之前还是之后执行?
- Jquery $.ajax函数外之后又有一段Jquery 代码 执行顺序
- java代码执行顺序
- Java代码执行顺序
- java中,return是在finally之前还是之后执行。
- Java finally语句到底是在return之前还是之后执行?
- [java起步]构造函数、构造代码快、静态代码块的执行顺序
- Java finally语句到底是在return之前还是之后执行?
- helper.joinRoom之后的java代码就没有执行
- Java中代码快执行的顺序
- Java中创建对象的时候代码执行顺序
- java代码执行的顺序
- Java类代码执行顺序
- Java代码执行顺序(初始化块-成员变量(static、fianl)-构造)
- Java代码的执行顺序