空間站

          北極心空

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

          公告

          本博客主要是在本人收集網上一些精彩技術文章,有時可能因疏忽轉載的時候沒有說明轉載出處和作者,如果您認為哪篇文章侵犯了你的版權,請通知本人: EMAIL:luwei-80@163.com 歡迎您光臨本博客!

          常用鏈接

          留言簿(15)

          我參與的團隊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          首先,要跟大家道個歉,前一陣子為給客戶個一個DEMO,忙得不可開交,所以很久沒有更新Blog。提到這個DEMO我想順便跟大家分享一下心得——如果大家希望快速開發(fā),一個類似Struts 2這樣的簡單方便的WEB框架必不可少。我們在開發(fā)DEMO使用的還是Struts 1.2.8,而且沒有不使用任何EL(表達式語言),導致頁面出現(xiàn)無數(shù)類似“<%= ((Integer) request.getAttribute("xx")).intValue()%6 %>”的代碼。Struts 1.x的Form Bean的麻煩使得有部分同事直接使用request.getParameter(String arg),繼而引入另一種麻煩。諸如此類的問題,在DEMO這樣時間緊迫的項目凸顯了Struts 1.x對快速開發(fā)的無能為力。不過沒辦法,由于我們項目中的幾個資深員工除了Struts 1.x外,對其它的WEB框架似乎不大感興趣。

          言歸正傳,Interceptor(以下譯為攔截器)是Struts 2的一個強有力的工具,有許多功能(feature)都是構建于它之上,如國際化轉換器校驗等。

          什么是攔截器

          攔截器,在AOP(Aspect-Oriented Programming)中用于在某個方法或字段被訪問之前,進行攔截然后在之前或之后加入某些操作。攔截是AOP的一種實現(xiàn)策略。

          在Webwork的中文文檔的解釋為——攔截器是動態(tài)攔截Action調用的對象。它提供了一種機制可以使開發(fā)者可以定義在一個action執(zhí)行的前后執(zhí)行的代碼,也可以在一個action執(zhí)行前阻止其執(zhí)行。同時也是提供了一種可以提取action中可重用的部分的方式。

          談到攔截器,還有一個詞大家應該知道——攔截器鏈(Interceptor Chain,在Struts 2中稱為攔截器棧Interceptor Stack)。攔截器鏈就是將攔截器按一定的順序聯(lián)結成一條鏈。在訪問被攔截的方法或字段時,攔截器鏈中的攔截器就會按其之前定義的順序被調用。

          實現(xiàn)原理

          Struts 2的攔截器實現(xiàn)相對簡單。當請求到達Struts 2的ServletDispatcher時,Struts 2會查找配置文件,并根據(jù)其配置實例化相對的攔截器對象,然后串成一個列表(list),最后一個一個地調用列表中的攔截器,如圖1所示。

          圖1 攔截器調用序列圖
          圖1 攔截器調用序列圖

          已有的攔截器

          Struts 2已經為您提供豐富多樣的,功能齊全的攔截器實現(xiàn)。大家可以到struts2-all-2.0.1.jar或struts2-core-2.0.1.jar包的struts-default.xml查看關于默認的攔截器與攔截器鏈的配置。

          在本文使用是Struts 2的最新發(fā)布版本2.0.1。需要下載的朋友請點擊以下鏈接:
          http://apache.justdn.org/struts/binaries/struts-2.0.1-all.zip

          以下部分就是從struts-default.xml文件摘取的內容:

          < interceptor name ="alias" class ="com.opensymphony.xwork2.interceptor.AliasInterceptor" />
          < interceptor name ="autowiring" class ="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor" />
          < interceptor name ="chain" class ="com.opensymphony.xwork2.interceptor.ChainingInterceptor" />
          < interceptor name ="conversionError" class ="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor" />
          < interceptor name ="createSession" class ="org.apache.struts2.interceptor.CreateSessionInterceptor"
          posted on 2007-04-19 13:17 蘆葦 閱讀(376) 評論(0)  編輯  收藏 所屬分類: Struts
          主站蜘蛛池模板: 木兰县| 中宁县| 新竹县| 湖北省| 武穴市| 永平县| 安乡县| 厦门市| 洛川县| 论坛| 黄龙县| 福安市| 县级市| 富裕县| 金山区| 中阳县| 华安县| 宁安市| 乌兰察布市| 韶关市| 衡阳县| 陆川县| 霍山县| 民和| 石门县| 乌拉特后旗| 库尔勒市| 巨鹿县| 岳池县| 济阳县| 永寿县| 山东省| 梓潼县| 会宁县| 长岛县| 枝江市| 正阳县| 南雄市| 巧家县| 若尔盖县| 淳化县|