在Struts2开发中,很多人问到,声明过滤器的时候,为什么有的时候用"FilterDispatcher",而有的时候用"StrutsPrepareAndExecuteFilter"?两者都可以正常工作,那区别是什么呢?


1. FilterDispatcher 例子 



Struts2中的FilterDispatcher和StrutsPrepareAndExecuteFilter的区别_.net

...

<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>

</filter-mapping>

Struts2中的FilterDispatcher和StrutsPrepareAndExecuteFilter的区别_.net


2. StrutsPrepareAndExecuteFilter 例子



Struts2中的FilterDispatcher和StrutsPrepareAndExecuteFilter的区别_.net

...

<filter>

  <filter-name>struts2</filter-name>

  <filter-class>

        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

  </filter-class>

</filter>

 

<filter-mapping>

   <filter-name>struts2</filter-name>

   <url-pattern>/*</url-pattern>

</filter-mapping>

Struts2中的FilterDispatcher和StrutsPrepareAndExecuteFilter的区别_.net


 


答案


FilterDispathcerorg.apache.struts2.dispatcher.FilterDispatcher)  在早期的Struts2开发中使用,从Struts 2.1.3开始,它已不推荐使用。


如果你使用的Struts的版本 >= 2.1.3,推荐升级到新的Filter-StrutsPrepareAndExecuteFilter  (org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)。