Java技術(shù)專區(qū)--Hilly

          http://blog.duyouyou.com
             :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理
          1. 只在必要的時候才考慮擴(kuò)展Struts框架

            一個好的framework有很多優(yōu)點(diǎn),首先,它必須能夠滿足用戶的可預(yù)見的需求。為此 Struts為Web 應(yīng)用提供了一個通用的架構(gòu),這樣開發(fā)人員可以把精力集中在如何解決實際業(yè)務(wù)問題上。其次,一個好的framework還必須能夠在適當(dāng)?shù)牡胤教峁U(kuò)展接口,以便應(yīng)用程序能擴(kuò)展該框架來更好的適應(yīng)使用者的實際需要。

            如果Struts framework在任何場合,任何項目中都能很好的滿足需求,那真是太棒了。但是實際上,沒有一個框架聲稱能做到這一點(diǎn)。一定會有一些特定的應(yīng)用需求是框架的開發(fā)者們無法預(yù)見到的。因此,最好的辦法就是提供足夠的擴(kuò)展接口,使得開發(fā)工程師能夠調(diào)整struts來更好的符合他們的特殊要求。

            在Struts framework中有很多地方可供擴(kuò)展和定制。幾乎所有的配置類都能被替換為某個用戶定制的版本,這只要簡單的修改一下Struts的配置文件就可以做到。

            其他組件如ActionServlet和 RequestProcessor 也能用自定義的版本代替. 甚至連Struts 1.1里才有的新特性也是按照擴(kuò)展的原則來設(shè)計的。例如,在異常處理機(jī)制中就允許用戶定制異常處理的句柄,以便更好的對應(yīng)用系統(tǒng)發(fā)生的錯誤做出響應(yīng)。

            作為框架的這種可調(diào)整特性在它更適合你的應(yīng)用的同時也在很大的程度上影響了項目開發(fā)的效果。首先,由于您的應(yīng)用是基于一個現(xiàn)有的成熟的、穩(wěn)定的framework如Struts,測試過程中發(fā)現(xiàn)的錯誤數(shù)量將會大大減少,同時也能縮短開發(fā)時間和減少資源的投入。因為你不再需要投入開發(fā)力量用于編寫基礎(chǔ)框架的代碼了。

            然而, 實現(xiàn)更多的功能是要花費(fèi)更大的代價的。我們必須小心避免不必要的濫用擴(kuò)展性能, Struts是由核心包加上很多工具包構(gòu)成的,它們已經(jīng)提供了很多已經(jīng)實現(xiàn)的功能。因此不要盲目的擴(kuò)展Struts框架,要先確定能不能采用其他方法使用現(xiàn)有的功能來實現(xiàn)。 在決定編寫擴(kuò)展代碼前務(wù)必要確認(rèn)Struts的確沒有實現(xiàn)你要的功能。否則重復(fù)的功能會導(dǎo)致混亂將來還得花費(fèi)額外的精力清除它。

            2. 使用異常處理聲明

            要定義應(yīng)用程序的邏輯流程,成熟的經(jīng)驗是推薦在代碼之外,用配置的方法來實現(xiàn),而不是寫死在程序代碼中的。在J2EE中,這樣的例子比比皆是。從實現(xiàn)EJB的安全性和事務(wù)性行為到描述JMS消息和目的地之間的關(guān)系,很多運(yùn)行時的處理流程都是可以在程序之外定義的。

            Struts 創(chuàng)建者從一開始就采用這種方法,通過配置Struts的配置文件來定制應(yīng)用系統(tǒng)運(yùn)行時的各個方面。這一點(diǎn)在版本1.1的新特性上得到延續(xù),包括新的異常處理功能。在Struts framework以前的版本中,開發(fā)人員不得不自己處理Struts應(yīng)用中發(fā)生的錯誤情況。在最新的版本中,情況大大的改觀了,Struts Framework提供了內(nèi)置的一個稱為 ExceptionHandler 的類, 用于系統(tǒng)缺省處理action類運(yùn)行中產(chǎn)生的錯誤。這也是在上一個技巧中我們提到的framework許多可擴(kuò)展接口之一。

            Struts缺省的 ExceptionHandler類會生成一個ActionError對象并保存在適當(dāng)?shù)姆秶╯cope)對象中。這樣就允許JSP頁面使用錯誤類來提醒用戶出現(xiàn)什么問題。如果你認(rèn)為這不能滿足你的需求,那么可以很方便的實現(xiàn)你自己的ExcepionHandler類。

            具體定制異常處理的方法和機(jī)制

            要定制自己的異常處理機(jī)制,第一步是繼承org.apache.struts.action.ExceptionHandler類。這個類有2個方法可以覆蓋,一個是excute()另外一個是storeException(). 在多數(shù)情況下,只需要覆蓋其中的excute()方法。下面是ExceptionHandler類的excute()方法聲明:


            正如你看到的,該方法有好幾個參數(shù),其中包括原始的異常。方法返回一個ActionForward對象,用于異常處理結(jié)束后將controller類帶到請求必須轉(zhuǎn)發(fā)的地方去。

            當(dāng)然您可以實現(xiàn)任何處理,但一般而言,我們必須檢查拋出的異常,并針對該類型的異常進(jìn)行特定的處理。缺省的,系統(tǒng)的異常處理功能是創(chuàng)建一個出錯信息,同時把請求轉(zhuǎn)發(fā)到配置文件中指定的地方去。 定制異常處理的一個常見的例子是處理嵌套異常。假設(shè)該異常包含有嵌套異常,這些嵌套異常又包含了其他異常,因此我們必須覆蓋原來的execute()方法,對每個異常編寫出錯信息。

            一旦你創(chuàng)建了自己的ExceptionHandler 類,就應(yīng)該在Struts配置文件中的部分聲明這個類,以便讓Struts知道改用你自定義的異常處理取代缺省的異常處理.

            可以配置你自己的ExceptionHandler 類是用于Action Mapping特定的部分還是所有的Action對象。如果是用于Action Mapping特定的部分就在元素中配置。如果想讓這個類可用于所有的Action對象,可以在 元素中指定。例如,假設(shè)我們創(chuàng)建了異常處理類CustomizedExceptionHandler用于所有的Action類, 元素定義如下所示:


            在元素中可以對很多屬性進(jìn)行設(shè)置。在本文中,最重要的屬性莫過于handler屬性, handler屬性的值就是自定義的繼承了ExceptionHandler類的子類的全名。 假如該屬性沒有定義,Struts會采用自己的缺省值。當(dāng)然,其他的屬性也很重要,但如果想覆蓋缺省的異常處理的話,handler無疑是最重要的屬性。

            最后必須指出的一點(diǎn)是,你可以有不同的異常處理類來處理不同的異常。在上面的例子中,CustomizedExceptionHandler用來處理任何java.lang.Exception的子類. 其實,你也可以定義多個異常處理類,每一個專門處理不同的異常樹。下面的XML片斷解釋了如何配置以實現(xiàn)這一點(diǎn)。


            在這里,一旦有異常拋出,struts framework將試圖在配置文件中找到ExceptionHandler,如果沒有找到,那么struts將沿著該異常的父類鏈一層層往上找直到發(fā)現(xiàn)匹配的為止。因此,我們可以定義一個層次型的異常處理關(guān)系結(jié)構(gòu),在配置文件中已經(jīng)體現(xiàn)了這一點(diǎn)。
          Hold住
          主站蜘蛛池模板: 额济纳旗| 清涧县| 东丽区| 台前县| 原阳县| 东兴市| 喀喇| 宣城市| 上犹县| 汝阳县| 灵武市| 宣威市| 六盘水市| 射洪县| 广州市| 温州市| 永定县| 慈溪市| 麟游县| 阳春市| 泰来县| 镇原县| 柘城县| 葵青区| 武陟县| 沙雅县| 南阳市| 酉阳| 金溪县| 石阡县| 玉树县| 丹寨县| 汾阳市| 方正县| 临清市| 忻城县| 安陆市| 永康市| 祁门县| 兴化市| 睢宁县|