日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts2的Interceptor和Listener以及Plugin

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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請求中的HttpServletRequestHttpServletResponse對象傳遞給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-INFlib目錄下,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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。