java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4587字,纯文字阅读大概需要7分钟。
内容图文
过滤器拦截到响应url的请求后会先执行doFilter()方法中chain.doFilter()之前的代码,然后执行下一个过滤器或者servelt。紧接着执行chain.doFilter()之后的代码。
一下为两个过滤器的执行顺序:
过滤器一:
package com.rskd_yswb.lib.filter; import javax.servlet.*; import java.io.IOException; publicclass HttpRequestAndResponseFilter implements Filter { private FilterConfig filterConfig; publicvoid destroy() { } publicvoid 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"); } publicvoid init(FilterConfig config) throws ServletException { this.filterConfig = config; } }
过滤器二:
package com.rskd_yswb.lib.filter; import javax.servlet.*; import java.io.IOException; publicclass Test2Filter implements Filter { publicvoid destroy() { } publicvoid doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("Test2FilterBefore"); chain.doFilter(req, resp); System.out.println("Test2FilterAfter"); } publicvoid 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 { privatestatic Logger logger = LogManager.getLogger(IndexServlet.class); protectedvoid doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException { doGet(request, response); } protectedvoid 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
原文:http://www.cnblogs.com/zouyitangzaishuo/p/5995099.html
内容总结
以上是互联网集市为您收集整理的java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序全部内容,希望文章能够帮你解决java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。