FilterDispatcher或StrutsPrepareAndExecuteFilter 配置 REQUEST FORWARD INCLUDE作用

本文详细解析了Struts2框架中filter配置如何拦截forward操作,解释了filter-mapping中dispatcher的作用及意义,深入理解filter在处理request和forward请求时的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

web.xml 2.4版本里,默认的filter只拦截request。
如果使用request.getRequestDispatcher("xx").forward(request,response),属于服务器内部forward,不会被拦截器拦截,所以你需要为filter配置拦截forward才行。

struts1用的是servlet,forward也会起作用。struts2里的filter的确是个大问题哟。
用filter配置拦截fowward要写成


<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>


另外:http://www.iteye.com/problems/53932


在filtermapping中定义dispatcher有什么作用啊10
<filter>
<filter-name>struts2Filter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>


在filtermapping中,urlpattern中的意思是拦截所有以Action结尾的请求,但是在后边定义了两个dispatcher我就不是太明白了,为什么要定义这两个dispatcher啊 我知道request是一次服务器请求,forward则是服务器端的跳转,但这样定义就不明白了,难道是请求后全部在服务器端跳转吗?

回答:
在servlet 2.4之后的规范中,加入了对 filter-mapping的dispatch的规范。

意思就是 什么样的请求 会被过滤。

除了通过路径之外还有另外的几种方式。

<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>

这个意思就是,以*.action结尾的请求,并且是通过request dispatcher的forward方法传递过来或者直接从客户端传递过来的,则必须经过这个过滤器。

除了这个之外,

filter

可以作用于直接从客户端过来的request,对应dispatch为REQUEST,默认是这个

通过forward过来的request,lz的例子就是这个意思。

通过include过来的request,处理通过request dispatcher的include方法传递过来的请求。

通过<error-page>过来的request。

具体LZ可以看下servlet 2.4的specification。

一般都是不写,使用默认值,也就是request过来的请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值