在web.xml filter 顺序中配置多个filter是怎么执行的

在web.xml中添加多个filter
我的图书馆
在web.xml中添加多个filter
&多个筛选器的运行顺序取决于下列规则: 将 filter-mapping 元素包含与请求匹配的 url-pattern的筛选器按其在 web.xml 部署描述符中出现的顺序添加到链中。 将 filter-mapping 元素包含与请求匹配的 servlet-name 的筛选器添加在链中与 URL 模式匹配的筛选器之后。 链上先进先出的,链中最后的项目往往是最初请求的资源。 也就是说:
1.以url-pattern方式配置的filter运行时肯定先于以servlet-name方式配置的filter2.以url-partern方式配置的filter中,如果有多个与当前请求匹配,则按web.xml中filter-mapping出现的顺序来运行3.对于以servlet-name方式配置的filter,如果有多个与当前请求匹配,也是按web.xml中filter-mapping出现的顺序来运行
本文来自CSDN博客,转载请标明出处:
&&&&&&&&encodingFilter&&
&&&&&&&&org.springframework.web.filter.CharacterEncodingFilter&&
&&&&&&&&&&
&&&&&&&&&&&&encoding&&
&&&&&&&&&&&&UTF-8&&
&&&&&&&&&&
&&&&&&&&&&
&&&&&&&&&&&&forceEncoding&&
&&&&&&&&&&&&true&&
&&&&&&&&&&
&&&&&&&&backendFilter&&
&&&&&&&&com.maxwell.help.LoginFilter&&
&&&&&&&&memberFilter&&
&&&&&&&&com.maxwell.help.MemberFilter&&
&&&&&&&&encodingFilter&&
&&&&&&&&/*&&
&&&&&&&&backendFilter&&
&&&&&&&&/backend/*&&
&&&&&&&&memberFilter&&
&&&&&&&&/member/*&&
&&&&&&&!-- 字符编码Filter --&
&filter-name&encodingFilter&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&UTF-8&/param-value&
&/init-param&
&init-param&
&param-name&forceEncoding&/param-name&
&param-value&true&/param-value&
&/init-param&
&!-- 后台用户登录验证Filter --&
&filter-name&backendFilter&/filter-name&
&filter-class&com.maxwell.help.LoginFilter&/filter-class&
&!-- 前台会员登录验证Filter --&
&filter-name&memberFilter&/filter-name&
&filter-class&com.maxwell.help.MemberFilter&/filter-class&
&!-- 字符编码Filter-mapping --&
&filter-mapping&
&filter-name&encodingFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&!-- 后台用户登录验证Filter-mapping --&
&filter-mapping&
&filter-name&backendFilter&/filter-name&
&url-pattern&/backend/*&/url-pattern&
&/filter-mapping&
&!-- 前台会员登录验证Filter-mapping --&
&filter-mapping&
&filter-name&memberFilter&/filter-name&
&url-pattern&/member/*&/url-pattern&
&/filter-mapping&
TA的最新馆藏[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢WEB容器启动之Web.xml加载顺序 - 且听风吟 - ITeye博客
博客分类:
web.xml文件加载顺序
、启动一个
项目的时候,
容器会去读取它的配置文件
&listener&
&context-param&
两个结点。
、紧急着,容创建一个
ServletContext
上下文),这个
项目的所有部分都将共享这个上下文。
&context-param&
转换为键值对,并交给
servletContext
、容器创建
&listener&
中的类实例,创建监听器。
load-on-startup
应用启动的时候指定了
被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该
被调用的时候,加载这个
。如果值是正整数或零,容器在配置的时候就加载并初始化这个
,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。 在
的配置当中,
&load-on-startup&5&/load-on-startup&
的含义是: 标记容器是否在启动的时候就加载这个
时,表示容器在应用启动时就加载这个
; 当是一个负数时或者没有指定时,则指示容器在该
被选择时才加载。 正数的值越小,启动该
的优先级越高。
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰。
首先可以肯定的是,加载顺序与它们在
文件中的先后顺序无关。即不会因为
的前面而会先加载
。最终得出的结论是:
listener -& filter -& servlet
同时还存在着这样一种配置节:
context-param
,它用于向
ServletContext
提供键值对,即应用程序上下文信息。我们的
等在初始化时会用到这些上下文中的信息,那么
context-param
配置节是不是应该写在
配置节前呢?实际上
context-param
配置节可写在任意位置,因此真正的加载顺序为:
context-param -&
listener -& filter -& servlet
对于某类配置节而言,与它们出现的顺序是有关的。以
中当然可以定义多个
相关的一个配置节是
filter-mapping
,这里一定要注意,对于拥有相同
filter-name
filter-mapping
配置节而言,
filter-mapping
必须出现在
之后,否则当解析到
filter-mapping
时,它所对应的
filter-name
还未定义。
容器启动时初始化每个
时,是按照
配置节出现的顺序来初始化的,当请求资源匹配多个
filter-mapping
拦截资源是按照
filter-mapping
配置节出现的顺序来依次调用
doFilter()
类似 ,此处不再赘述。
由此,可以看出,
的加载顺序是:
context-param
-& listener -& filter -& servlet
,而同个类型之间的实际程序调用的时候的顺序是根据对应的
的顺序进行调用的。
浏览: 253161 次
来自: 杭州
,学习了 学习了
不清晰,第二种方法得到的随机数的范围[min,man)而不是[ ...
方法三:index = Math.abs(rd.nextInt ...
一、强依赖分布式缓存 场景下,缓存奖品数量减1的时候是否可以用 ...
w 写道Fragment 写道方法二是不是有 ...posts - 10,&
comments - 35,&
trackbacks - 0
Filter是一个很有用的东西,使用filter可以修改request, response, session, application中的内容。1. javax.servlet.Filter有两个重要的方法&public void init(FilterConfig config)public void doFilter(ServletRequest request, ServletResponse response,&& FilterChain chain)其中init方法用来作一些初始化的方法,而doFilter方法用来执行真正的过滤操作。2. Filter的部署方法&在web.xml中要声明filter元素,并分配需要其处理的url,如下:&filter&&&& &filter-name&Filter1&/filter-name&&&& &filter-class&com.baidu.Filter1&/filter-class&&/filter&&filter&&&& &filter-name&Filter2&/filter-name&&&& &filter-class&com.baidu.Filter2&/filter-class&&/filter&&filter-mapping&&&& &filter-name&Filter1&/filter-name&&&& &url-pattern&/*&/url-pattern&&/filter-mapping&&filter-mapping&&&& &filter-name&Filter2&/filter-name&&&& &url-pattern&/*&/url-pattern&&/filter-mapping&3. doFilter函数的执行顺序&当某个url请求匹配了多个Filter时,应用服务器将多个Filter组织成FilterChain,这个链的执行顺序是由其&filter-mapping&元素在web.xml文件中的顺序决定的。doFilter函数可以过滤请求或者响应,当其过滤完请求后将调用FilterChain的doFilter函数让FilterChain中的下一个Filter来过滤请求。最先过滤请求的Filter将最后过滤相应,下面是个简单的例子。public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException{&&&&&& system.out.println(“filter request here ----”);&&& &&& // todo:&&&&&& chain.doFilter(request,response);&&&&&& system.out.println(“filter response here ----”);&&& &&& // todo:}4.init函数的执行顺序&&&& 对于不同的应用服务器,Filter的init函数的执行时间是不同的,例如:tomcat会在tomcat启动的时候执行init函数,而weblogic等一些其他的应用服务器则会在该Filter匹配的url被首次请求的时候加载。(下面的部分是我通过实验猜想的,不一定正确。)&&&& 对于tomcat而言,tomcat启动时会解析web.xml文件,然后按照&filter&元素的顺序将各个Filter元素加载到一个 HashMap中。解析完成后,会从HashMap中一个个的拿出Filter元素,串行的执行其init函数(这里的执行有先后关系,是在一个线程中执 行的)。所以在tomcat中定义的多个Filter其init函数的执行顺序就是其在HashMap中的散列顺序,具体来说与其在web.xml文件中 的定义位置及其名字有关。&&& 对于HashMap来说,如果其元素固定不变,则其顺序也是固定不变的,但当元素个数发生变化时,便不能保证其顺序(例如:当有两个元素时,A在B的前面,当再加入20个元素的时候A就不一定在B的前面了),所以init函数的执行顺序是无法保证的。
阅读(4395)
你恨一个人是因为你爱他;你喜欢一个人,是因为他身上有你没有的;你讨厌一个人是因为他身上有你有的东西;你经常在别人面前批评某人,其实潜意识中是想接近他。
303112345678910111213141516171819202122232425262728293031123456789
一些简单系统,留着备用!
java技术网站
平时常去的网站
吸血鬼日记第三季
阅读排行榜
评论排行榜在web.xml中配置多个filter是怎么执行的? - ITeye问答
如题:
在web.xml中配置了两个或者多个的filter,他们的执行顺序是什么,是依次执行(也就是按顺序执行,配置在前的先执行,配置在后的后执行),还是怎么回事:
如下代码:
&&&&&&& 这是公司一个项目的架构,我在研究的时候发现的,始终搞不明白:
web.xml的部分配置文件:
&&&&&&& &!--配置的filter--&
&&&&&&& &filter&
&filter-name&struts2Filter&/filter-name&
&filter-class&org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&/filter-class&
&!-- UrlRewrite filter --&
&filter-name&urlRewriteFilter&/filter-name&
&filter-class&org.tuckey.web.filters.urlrewrite.UrlRewriteFilter&/filter-class&
&&&&&&& &!--配置的filtermapping--&
&&&&&&& &filter-mapping&
&filter-name&struts2Filter&/filter-name&
&url-pattern&*.action&/url-pattern&
&dispatcher&REQUEST&/dispatcher&
&dispatcher&FORWARD&/dispatcher&
&/filter-mapping&
&filter-mapping&
&filter-name&urlRewriteFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&dispatcher&REQUEST&/dispatcher&
&dispatcher&FORWARD&/dispatcher&
&/filter-mapping&
就像这两个,到底谁先执行,谁后执行?
采纳的答案
filter的执行类似于栈,执行顺序是按照在配置文件中配置的顺序执行的,比如定义两个filter(f1,f2),过滤的对象为index.jsp,则客户的请求(req)和响应(res)顺序是req-&f1-&f2&index.jsp-&f2-&f1-&res。
已解决问题
未解决问题问:关于Ja实现图片分割并输出关于Ja实现图片分割并输出答:import ja.io.*;import ja.awt.*;import ja.awt.image.*;import ja.awt.Gimport ja.awt.color.ColorSimport jax.imageio.ImageIO;...
问:servlet使用filter找不到filter class这个是我的web.xml配置,配置了一个filter&filter&&deion&&/...答:自己去classes下看看就有没有cn/chenghui/.utils/CharacterEncodingFilter.class,一般是没有成功编译这个,导致不能正常加载。你可以把项目中的...
问:安装CAS出错我按照如下在web.xml里面部署cas&filter&&filter-name&CASFilter&/filter-name&...答:你的问题是 链有问题,它无法被正确建立.你的CASClient上的cacerts配置.请把CAS的 链一下因为CASClient接收到CASServer的 的时候,它无法建立一...
问:不用spring怎么写filter来解决中文的问题,谢谢!等_...答:可以编写一个Filter public class EncodingFilter implementsFilter{/*编码*/String encoding=销毁编码*/public void destroy(){ this.encoding=}/*...
问:mysql中的怎么解决?或者告诉我如何进行对比_ ... mysql有两个需要对比其中的内容,但是不知道如何进行,数据很多,手工的话就...答:很简单啊,只要用 MySQL-Front连接数据库,从那里出来就不是了。当然MySQL-Front要指定utf-编码。
问:.apache.struts.dispatcher.ng.filter.StrutsPrepareAndE_... bug这决定是个bug我用tomcat.运行 SSH项目就给我报这个错...答:过滤器类在tomcat.不支持现在都tomcat了.版本太低了换成.及以上就可以了
问:这个错误怎么解决?ServletNotFoundException:Servlet... I deploy a web app in websphere...My web.xml is Code:&filter-mapping&...答:当前登录 作系统的不是管理员或权限太低,WebSphere登录认证时可能需要访问某些目录的,可能当前没有权限访问这些,换为管理员登录看看是否...
问:struts中不用Filter吗?是不是Filter在struts中不好用呀_...答:能用啊!你要上传吗?那就的导入struts上传的两个必须的jar包…你一下struts上传网上会有详细说明的教程
问:Struts或Servlet系统启动TOMCAT时,执行得顺序?答:tomcat启动只会执行web.xml,在web.xml里配置了struts-config.xml,tomcat才会去读struts-config.xml。你可以仔细看下web.xml,你想要tomcat去...
问:jafilter有关init-param的问题我在网上查了有关filter的问题,有些过滤路径是写在中的,但有些是写在&init-...答:这样配置(web.xml):&filter-mapping&&filter-name&xxxFilter&/filter-name&*.do&/url-pattern&&/filter-mapping&你哪个配置的是filter的初始化参数。初始化...
问:我的中 了,大家帮忙看看在我的的源里,前三行是这样显示的。...答:你的是asp+access的吧,可能有程序 ug,别人用asp 助手入侵你的.解决的方法就是好好一下你的的源,特别是一个上传的地方和一个SQL...
问:filter中如果运行时走 chain.doFilter(req,res)这行码,它...是指定的web.xml中的url吗答:filter如果走chain的话,通过chain.doFilter(request,response)这个方法会立即跳转到被拦截的servlet并且执行完还要再返回filter.chain相当于一扇门,从这扇门出去...
问:普通的ja类从jsp页面传入的中文值,这是它的是... File f=new File(fileToZip[i]);f.getName()此时是?怎样修改。fileToZip[i]...答:要根据你输入的字符编码格式,进行编码格式转化。由于你的页面会很多个,因此每一个输入都要进行格式转换,因此很麻烦,建议你写一个字符编码过滤器,配置到所有...
问:怎么设置filter的init-param?我用的是MyEclipse.编译;我在web.xml中手动输入了这几行:&init-param&...答:过滤器执行顺序:init、doFilter、destroy你本就是继承Filter过滤器的接口,你的CharacterEncoding类只是实现接口的各个方法,里面实行顺是已写好的。
09-1009-0508-1807-01
10-0804-1103-1701-25
◇本站云标签

我要回帖

更多关于 web.xml中filter 的文章

 

随机推荐