日期:2014-05-18  浏览次数:20738 次

Filter为什么会在一次请求执行doFilter()多次呢?
本帖最后由 zhb200621 于 2013-04-02 14:10:41 编辑
SSH项目,
log4j打出的线程名为http-apr-8080-exec-1,http-apr-8080-exec-2,...,http-apr-8080-exec-n等,
debug看这些线程于org.apache.catalina.startup.Bootstrap下均为Daemon Thread。
这些线程主要作用是什么?
浏览器访问http://127.0.0.1:8080/project时,页面一次请求调用自定义Filter(如编码过滤器)的次数是1次;
当访问系统的其他链接时,一次请求调用Filter的次数都在一次以上。为什么?
filter-mapping的url-pattern配的是/* 
filter thread

------解决方案--------------------
log4j打出的线程名为http-apr-8080-exec-1,http-apr-8080-exec-2,...,http-apr-8080-exec-n等
这个请你在描述清楚下。Tomcat会根据配置,决定提供服务的线程数量。应该就是上面这些线程。我用到过 Tomcat 6 只是线程名称和你的不同罢了。

至于Filter调用的话,一个HTTP请求过来,你自己的Filter会被调用一次,但是返回去的HTML页面中也会包含你引用的js啊 CSS,这时候浏览器就又发HTTP请求过来了,让服务器传送这些js
css给他。因为你配置了/*,所以Filter就又执行了下。