StrutsPrepareAndExecuteFilter的作用


FilterDispatcher是早期struts2的過濾器,后期的都用StrutsPrepareAndExecuteFilter了,如 2.1.6、2.1.8。StrutsPrepareAndExecuteFilter名字已經很能說明問題了,prepare與execute,前者表示准備,可以說是指filter中的init方法,即配制的導入;后者表示進行過濾,指doFilter方法,即將request請求,轉發給對應的 action去處理。

  1. FilterDispatcher是struts2.0.x到2.1.2版本的核心過濾器.!
  2. 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM