生活随笔
收集整理的這篇文章主要介紹了
Struts2的Interceptor和Listener以及Plugin
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Struts2的Interceptor和Listener以及Plugin
Struts2的攔截器 在struts-default.xml中定義了很多攔截器,這些攔截器就是用來完成許多強勁功能的保證 而且可以根據已定義的若干攔截器中的某幾個攔截器構建成interceptor-stack攔截器棧 其實攔截器棧還可以由攔截器棧組成。即從Struts2高層的角度來看,二者沒有什么區 別 我們可以在<package/>中增加這樣一行<default-interceptor-ref name="攔截器的名字"/> 即表示將該攔截器作為整個包的默認攔截器,它會自動附加到我們的每一個Action中 并且在一個<package/>中只能使用<default-interceptor-ref/>定義一個默認的攔截器 若<action/>沒有引用任何一個攔截器,那么默認的defaultStack會自動附加到<action/>中 若<action/>手工引用任何一個攔截器,那么默認的defaultStack就不會附加到<action/>中 若還想使用默認攔截器,則只能再通過手工方式導入<interceptor-ref name="defaultStack"/> 如果沒有引用Struts2的默認攔截器,那么就會影響到整體的輸入校驗即其它的一些功能 Struts2攔截器的配置和使用都很easy,這得益于其底層的良好架構以及它的AOP的思想 該攔截器即標準的AOP思想,代碼不寫死到Action里,而是根據配置靈活附加到Action中 使用上,Struts2攔截器并不復雜。但實現上,是很復雜的,其底層用到了動態代理的機制 Struts2常用的內置攔截器 alias:實現不同請求中相似參數別名的轉換 autowiring:自動裝配。主要用于Struts2和Spring整合時,Struts2可以使用自動裝配的方式訪問Spring容器中的Bean chain:構建一個Action鏈,使當前Action可以訪問前一個Action的屬性。一般與<result type="chain"….../>一起使用 conversionError:處理類型轉換錯誤。負責將類型轉換錯誤從ActionContext中取出,并轉換成Action的FieldError錯誤 createSession:負責創建一個HttpSession對象,主要用于那些需要提供HttpSession對象才能正常工作的攔截器中 debugging:當使用Struts2的開發模式時,該攔截器會提供更多的調試信息 execAndWait:后臺執行Action,負責將等待畫面發送給用戶 exception:負責處理異常。它會將異常映射為結果 fileUpload:用于文件上傳。負責解析表單中文件域的內容 i18n:支持國際化。它負責把所選的語言和區域放入用戶Session中 logger:負責日志記錄。主要是輸出Action的名字 modelDriven:用于模型驅動。當Action實現了ModelDriven接口時,它負責把getModel()方法的結果推入ValueStack中 scopedModelDriven:若Action實現ScopedModelDriven接口,它負責從指定生存范圍中找出指定Model,并通過setModel()將該Model傳給Action實例 params:最基本的一個攔截器,它負責解析HTTP請求中的參數,并將參數值設置成Action對應的屬性值 ??????????????主要用于在提交表單后,將表單中的參數自動賦值到Action的屬性中 prepare:如果Action實現了Preparable接口,將會調用該攔截器的prepare()方法 staticParams:負責將XML中<action/>標簽下<param/>標簽中的參數傳入Action scope:范圍轉換攔截器,可以將Action狀態信息保存到HttpSession范圍或ServletContext范圍內 servletConfig:如果某個Action需要直接訪問Servlet API,就是通過該攔截器實現的 ????????????????????????用于將HTTP請求中的HttpServletRequest和HttpServletResponse對象傳遞給Action對象 roles:JAAS攔截器。Java授權和認證服務Java Authentication and Authorization Service ??????????只有當瀏覽者取得合適的授權后,才可以調用被該攔截器攔截的Action timer:負責輸出Action的執行時間。它在分析Action的性能瓶頸時比較有用 token:阻止表單重復提交。它檢查傳到Action中的token,從而防止多次提交 tokenSession:作用與token基本類似,只是它把token保存在HttpSession中 validation:通過執行在XxxAction-validation.xml中定義的校驗器,從而完成數據校驗 workflow:負責調用Action類的validate()方法。如果校驗失敗,則返回input邏輯視圖 使用timer攔截器可以測試Action執行的時間 我們可以用它來測試網站優化前后執行某Action所需的時間,再對比查看優化效果 這里使用timer攔截器測試LoginAction執行所需的時間,注意引用params攔截器接收表單參數 [xhtml]?view plaincopyprint? <action?name="login"?class="com.jadyer.action.LoginAction">?? ????<interceptor-ref?name="timer"?/>?? ????<interceptor-ref?name="defaultStack"?/>?? </action>?? 登錄正確用戶名密碼時,控制臺就會輸出類似Executed action [//loginvo!execute] took 16 ms.的信息 若不引用params而引用defaultStack攔截器棧,則LoginAction的執行時間會變得長一些 這是因為defaultStack包含了許多攔截器,它們都需一一執行,所以花費的時間要多些 Struts2的監聽器 Struts2還有個的監聽器,即com.opensymphony.xwork2.interceptor.PreResultListener接口 該接口中僅定義一個方法,即void beforeResult(ActionInvocation invocation, String resultCode) 觀察該監聽器的名字,就可以知道,Pre就是在...之前的意思,也就是在結果之前進行監聽 它的監聽點是:在執行完execute()或者自定義的方法之后 ????????????????????真正轉到視圖資源之前,會自動調用監聽器的beforeResult()方法 Struts2的這個監聽器,平時用到的不是很多 在上傳文件時可能會用到,比如在返回到result之后 ,可以修改一下文件的后綴名,等等.. Struts2的插件 Struts2同樣支持插件,但與Struts1支持插件的方式不太一樣 它需要我們定義好自己的一些類和接口等等,然后封裝到一個Jar包里面 再把這個JAR包丟到WEB-INF的lib目錄下,Web應用啟動時,Jar包就被加載進來了 在JAR包中必須要有一個配置文件,它的標準命名方式必須是struts-plugin.xml 該XML文件中的具體的配置與struts.xml是一樣的,它們的DTD都是相同的 我們可以在http://struts.apache.org/2.0.11/index.html頁面查看Struts2的眾多插件 點擊網站的Plugin Registry大按鈕后便可跳轉到http://cwiki.apache.org/S2PLUGINS/home.html具體查看 |
總結
以上是生活随笔為你收集整理的Struts2的Interceptor和Listener以及Plugin的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。