天天看點

Struts2的FilterDispatcher和StrutsPrepareAndExecuteFilter的使用和差別

FilterDispatcher是struts2.0.x到2.1.2版本的核心過濾器.!

StrutsPrepareAndExecuteFilter是自2.1.3開始就替代了FilterDispatcher的.!

StrutsPrepareAndExecuteFilter的作用及應用

 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接口類。逗号分割.

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

 如果程式報類找不到異常,且後面有 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter等資訊,可能是你的版本問題.解決方法是确定你的struts版本,如果是2.1.3之前的版本,用org.apache.struts2.dispatcher.FilterDispatcher,以後的版本則配置org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

繼續閱讀