Struts2的FilterDispatcher和StrutsPrepareAndExecuteFilter有什麼不同?


在Struts2的開發時,很多人會問為什麼有些宣告過濾器類是 「FilterDispatcher「; 而有一些又是「StrutsPrepareAndExecuteFilter「? 但兩者都可以正常使用,並有什麼區別?

1. FilterDispatcher 範例

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

2. StrutsPrepareAndExecuteFilter 範例

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

回答:

The FilterDispatcher (org.apache.struts2.dispatcher.FilterDispatcher) 被用在早期的Struts2開發,並且在 Struts 2.1.3中它就被廢棄了。

如果使用Struts版本 >= 2.1.3, 它總是建議升級到新的過濾器類 –StrutsPrepareAndExecuteFilter (org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter).

參考

  1. FilterDispatcher 文件
  2. StrutsPrepareAndExecuteFilter 文件