FilterDispatcher是早期struts2的過濾器,後期的都用StrutsPrepareAndExecuteFilter了,如 2.1.6、2.1.8。StrutsPrepareAndExecuteFilter名字已經很能說明問題了,prepare與execute,前者表示準備,可以說是指filter中的init方法,即配製的導入;後者表示進行過濾,指doFilter方法,即將request請求,轉發給對應的 action去處理。FilterDispatcher是struts2.0.x到2.1.2版本的核心過濾器.!
StrutsPrepareAndExecuteFilter的優勢
StrutsPrepareAndExecuteFilter是自2.1.3開始就替代了FilterDispatcher的,這樣的改革當然是有好處的.!爲什麼這麼說.? 應該知道如果我們自己定義過濾器的話, 是要放在strtus2的過濾器之前的, 如果放在struts2過濾器之後,你自己的過濾器對action的過濾作用就廢了,不會有效!除非你是訪問jsp/html!
那我現在有需求, 我必須使用Action的環境,而又想在執行action之前拿filter做一些事, 用FilterDispatcher是做不到的.!那麼StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在這兩個過濾器之間加上我們自己的過濾器.!
給你打個比喻, 現在有病人要做手術, 現在struts2要做兩件事, 搭病牀(環境),執行手術.! 那麼打麻藥的工作呢.? 不可能要病人站着打吧, 所以必須有病牀的環境,打完麻藥之後再動手術.! 這個比喻非常形象了.!
如果是2.1.3之前的版本,用org.apache.struts2.dispatcher.FilterDispatcher,
否則,用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。
從Struts2.1.3開始,將廢棄ActionContextCleanUp過濾器,而在StrutsPrepareAndExecuteFilter過濾器中包含相應的功能。
三個初始化參數:
1、config參數:指定要加載的配置文件。逗號分割。
2、actionPackages參數:指定Action類所在的包空間。逗號分割。
3、configProviders參數:自定義配置文件提供者,需要實現ConfigurationProvider接口類。逗號分割.
<span style="font-size:14px;"><filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.cjm.web.action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping></span>
如果程序報類找不到異常,且後面有 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter等信息
可能是你的版本問題.解決方法是確定你的struts版本,如果是2.1.3之前的版本,用org.apache.struts2.dispatcher.FilterDispatcher,以後的版本則配置org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter