404 error-page 不能转到struts2的filter的问题以及解决方法

java web项目通常会针对500和404错误各制作一个页面.
在使用struts2时,404错误需要在web.xml配置页面处理. 因为struts2只拦截.do结尾的url.其他url不会走struts2的filter.

在web.xml中加上如下配置:

<error-page>
		<error-code>404</error-code>
		<location>/pagenotfound.do</location>
</error-page>

上面的配值是希望tomcat将404页面转发到struts2进行处理.但是加上这个配置后没有作用.于是我将/pagenotfound.do改成404.jsp进行测试.发现可以成功转发过去.改成Servlet地址也可以.于是推断是struts2过滤器的问题. 为了验证猜测.我又写了一个filter拦截所有以.do结尾的地址,放在所有filter之前. 运行之后显示转到/pagenotfound.do没有进这个新的filter. 这表明问题和struts2框架没关系,出在filter上面.

struts2的filter配置:

<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>*.do</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
</filter-mapping>

从配置中看到struts2 过滤器是有拦截FORWARD的,但是tomcat404错误转发到/pagenotfound.do确实没进到filter.难道转到/pagenotfound.do这里不是普通的转发,filter针对error-page的转发处理不一样?我查看了一遍Filter的文档,发现还真不一样.
filter-mapping 的dispatcher还有两个选项ERROR和INCLUDE,很明显ERROR就是我们需要的.ERROR就是用于从error-page中过来的请求. 在struts2的filter中加上ERROR这个dispatcher后立刻达到了想要的效果.

<error-page>
		<error-code>404</error-code>
		<location>/pagenotfound.do</location>
</error-page>

<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>*.do</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>ERROR</dispatcher>
</filter-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值