Struts框架的優(yōu)勢(shì)在于允許開發(fā)人員根據(jù)實(shí)際需求來擴(kuò)展框架,定制客戶化的功能.不過作為一個(gè)優(yōu)秀的軟件框架是應(yīng)該具備可擴(kuò)展的功能的.在Struts框架中提供了許多可擴(kuò)展之處,不妨將其稱為擴(kuò)展點(diǎn)(Extension Point),以下是Struts的擴(kuò)展點(diǎn):
1) 一般性擴(kuò)展點(diǎn):Struts插件PlugIn,擴(kuò)展Struts配置類.
2) 控制器擴(kuò)展點(diǎn):擴(kuò)展ActionServlet類,RequestProcessor類和Action類.
3) 視圖的擴(kuò)展點(diǎn):擴(kuò)展Struts客戶化標(biāo)簽.
4) 模型的擴(kuò)展點(diǎn):擴(kuò)展SessionContainer類和ApplicationContainer.
Struts1.1框架提供了動(dòng)態(tài)插入和加載組件的功能,這種組件被稱為Struts插件,實(shí)際
上就是一個(gè)JAVA類,它在Struts應(yīng)用啟動(dòng)的時(shí)候被初始化,在應(yīng)用關(guān)閉的時(shí)候被銷毀.任何作為插件的JAVA類逗應(yīng)該實(shí)現(xiàn)org.apache.struts.action.PlugIn接口,主要包括兩個(gè)方法.init()方法.的參數(shù)是ActionServlet和ApplicationConfig還又一個(gè)就是destroy()方法.注意的是要用implements關(guān)鍵字實(shí)現(xiàn)PlugIn接口.除了創(chuàng)建插件類外,還需要在Struts配置文件中配置插件.在啟動(dòng)的時(shí)候會(huì)啟動(dòng)將根據(jù)相關(guān)的配置信息來初始化插件.與插件對(duì)應(yīng)的配置元素為<plug-in>元素包含一個(gè)<set-property>子元素,它定義了插件的屬性,與之對(duì)應(yīng)的是在具體的實(shí)現(xiàn)了PlugIn接口的類中定義的成員變量的get/set方法.Struts框架加載插件的時(shí)候會(huì)調(diào)用插件類的set()方法,把<set-property>子元素設(shè)置的屬性傳給PlugIn實(shí)例的成員變量.根據(jù)Struts配置文件的DTD定義,在Struts配置文件中,<pulg-in>元素必須位于其他配置元素的后面,此外,如果在配置文件中配置了多個(gè)插件,框架將按照他們的先后順序來依次初始化.
擴(kuò)展Struts的配置類是在Struts應(yīng)用啟動(dòng)的時(shí)候,配置文件中所有的信息都會(huì)被讀到內(nèi)存中,這些信息在org.apache.struts.config包相應(yīng)的配置類的實(shí)例中.這個(gè)一般不推薦使用,除非個(gè)別情況.
控制器擴(kuò)展點(diǎn)在Struts1.1版本以前會(huì)被使用,當(dāng)初都是需要擴(kuò)展ActionServlet類,來實(shí)現(xiàn)各種定制的功能.在Struts1.1版本開始擴(kuò)展ActionServlet已經(jīng)顯的不是必須的了,這也也不推薦使用.如果要擴(kuò)展RequestProcessor類,應(yīng)該在配置文件中通過<controller>元素對(duì)自定義的類進(jìn)行配置.在自定義的RequestProcessor類中,可以覆蓋processPreprocess()方法來執(zhí)行特定的邏輯.如果在某些條件下希望終止處理請(qǐng)求,只需讓processPreprocess()放回false即可.在這種情況下,仍需要以編程的方法來決定如何轉(zhuǎn)發(fā)或者重定向請(qǐng)求.要注意的地方是如果方法返回false,那么應(yīng)該在方法內(nèi)部決定如何轉(zhuǎn)發(fā)請(qǐng)求.而且Struts還可以擴(kuò)展視圖和模型組件,不過這些顯的已經(jīng)沒什么必要了,除非是Struts的客戶化標(biāo)簽不能滿足項(xiàng)目的需求,可以考慮擴(kuò)展視圖組件.
擴(kuò)展Action到是Struts框架中最頻繁的擴(kuò)展點(diǎn),對(duì)于具體的Struts應(yīng)用,可以先為應(yīng)用創(chuàng)建一個(gè)擴(kuò)展StrutsAction類的Action基類,在這個(gè)基類中定義應(yīng)用中所有的Action的一些公共邏輯也就是通用的方法,這種處理方法可以提高代碼的重用性,減少代碼重復(fù).
擴(kuò)展Struts框架可以根據(jù)具體的項(xiàng)目,進(jìn)行具體的處理.大家如果看過我的文章和之前寫的文章希望能給予一些評(píng)價(jià),希望大家能指出我的缺點(diǎn)和不足謝謝! (網(wǎng)友們的支持,是我繼續(xù)寫技術(shù)文章的動(dòng)力!)