淺談STRUTS框架應(yīng)用對于Web服務(wù)擴(kuò)展的作用
出處:王力生 沈 駿 發(fā)布于:2011-08-28 09:54:08
STruts是開源軟件。使用Struts的目的是為了幫助我們減少在運(yùn)用MVC設(shè)計(jì)模型來開發(fā)Web應(yīng)用的時(shí)間。如果我們想混合使用Servlets和JSP的優(yōu)點(diǎn)來建立可擴(kuò)展的應(yīng)用,struts是一個(gè)不錯(cuò)的選擇。
1 Struts框架應(yīng)用模式
1)建立在MVC這種公認(rèn)的好的模式上的,struts在M,V,C上都有涉及,但它主要是提供一個(gè)好的控制器和一套定制的標(biāo)簽庫,也就是說它的著力點(diǎn)在C和V上,有mvc的一系列有點(diǎn),如:結(jié)構(gòu)層次分明,高可重用性,增加了程序的健壯性和可伸縮性,便于開發(fā)與設(shè)計(jì)分工,提供集中統(tǒng)一的權(quán)限控制、校驗(yàn)、國際化、日志等。
2)開源項(xiàng)目,并且經(jīng)受了實(shí)戰(zhàn)的檢驗(yàn),使其功能越來越強(qiáng)大,體系也日漸完善。
3)與其他技術(shù)和框架具有很好的融合性
4)提高了開發(fā)速度
Struts其實(shí)是一個(gè)MVC設(shè)計(jì)模式的J2EE表現(xiàn)。它通過把一組相互協(xié)作的類(組件)、Java Servlet以及JSP tag lib結(jié)合在一個(gè)統(tǒng)一的框架內(nèi)(其中ActionServlet處理客戶請求),利用配置的ActionMapping對象把請求映射到Action處理器對象進(jìn)行處理。Action處理對象訪問ActionForm中的數(shù)據(jù),處理和響應(yīng)客戶請求,調(diào)用后臺(tái)封裝了具體業(yè)務(wù)邏輯的Bean組件。Action處理器對象根據(jù)處理結(jié)果通知Controller,由Controller進(jìn)行下一步的處理。Struts的體系結(jié)構(gòu)如圖1 所示。

下面通過圖1所示的體系結(jié)構(gòu)圖分析Struts框架的Web應(yīng)用模式。
(1)模型部分。在Struts中,模型(Model)由一系列的JavaBean和EJB組件構(gòu)成,用來設(shè)計(jì)和實(shí)現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯。根據(jù)不同的請求從Action派生具體Action處理對象。使用“做什么”的任務(wù)來調(diào)用由Bean構(gòu)成的業(yè)務(wù)組件。創(chuàng)建由ActionForm的派生類實(shí)現(xiàn)對客戶端表單數(shù)據(jù)的封裝。
(2)控制器部分。Struts中的Controller 主要是其自身提供的ActionServlet,而ActionServlet 的就是struts-config.xml配置文件,它包含了所有頁面導(dǎo)航的定義。ActionServlet 接受請求并根據(jù)配置文件中的定義將控制轉(zhuǎn)移到適當(dāng)?shù)腁ction 類。其余的控制邏輯以及對Model的訪問由Action類負(fù)責(zé)完成。
(3)視圖部分。Struts中的View主要由JSP技術(shù)實(shí)現(xiàn),并利用自定義的標(biāo)記庫方便地和系統(tǒng)的Model部分交互。這些自定義標(biāo)記創(chuàng)建的JSP表單,可以實(shí)現(xiàn)和Model部分中的ActionForm的映射,完成對用戶數(shù)據(jù)的封裝,同時(shí)這些自定義標(biāo)記還提供了很多定制頁面的功能。
2 STRUTS框架擴(kuò)展Web服務(wù)模型
2.1 MVC模型特征的Web服務(wù)體系結(jié)構(gòu)
通常有二種基于J2EE實(shí)現(xiàn)Web服務(wù)的方式:一種是把Servlet作為Web服務(wù)端點(diǎn)進(jìn)行開發(fā);另一種是公開無狀態(tài)EJB組件作為Web服務(wù)端點(diǎn)進(jìn)行開發(fā)。相比較而言,把EJB作為Web服務(wù)端點(diǎn)進(jìn)行開發(fā)具有明顯的優(yōu)勢。
通過無狀態(tài) EJB 組件把各種服務(wù)和業(yè)務(wù)流程公開為 Web 服務(wù)的SOA框架如圖2所示。圖中所示的Web服務(wù)的體系結(jié)構(gòu)是一種典型的MVC model2的框架。

客戶端(Client):用戶通過 Web 瀏覽器與不同的應(yīng)用程序交互。
應(yīng)用程序控制器(Application controller):對應(yīng)于Struts框架中的Controller部分,提供主控制器 servlet。它負(fù)責(zé)初始化、委派請求和響應(yīng)請求處理程序。
請求處理程序(Request processor)、請求執(zhí)行程序(Request handlers)和業(yè)務(wù)定位程序(Business locators):這三部分功能的組合對應(yīng)于Struts框架中的Action部分。其中請求處理程序調(diào)用相應(yīng)的請求執(zhí)行程序完成要求的處理,對請求進(jìn)行預(yù)處理。請求執(zhí)行程序依靠業(yè)務(wù)定位程序發(fā)現(xiàn)相應(yīng)的服務(wù),完成具體的請求活動(dòng)。業(yè)務(wù)定位程序負(fù)責(zé)隱藏查找服務(wù)的復(fù)雜性,并提供緩存邏輯。
會(huì)話 Facades(Session Facades)和EJB Web 服務(wù)(EJB Web services):對應(yīng)于Struts框架中的ActionForm部分,通過聚合來自多個(gè)系統(tǒng)或服務(wù)的方法簡化復(fù)雜對象的視圖。會(huì)話 facades是EJB Web服務(wù)方法的包裝器。根據(jù) EJB 1.4規(guī)范,Web服務(wù)端點(diǎn)可以模型化為無狀態(tài)的會(huì)話 Bean。
2.2 Struts框架擴(kuò)展Web服務(wù)
Web服務(wù)(Web Service)是基于XML和HTTPS的一種服務(wù),其通信協(xié)議主要基于SOAP,服務(wù)的描述通過WSDL,通過UDDI來發(fā)現(xiàn)和獲得服務(wù)的元數(shù)據(jù)。研究一下當(dāng)前的應(yīng)用程序開發(fā),你會(huì)發(fā)現(xiàn)一個(gè)的傾向:人們開始偏愛基于瀏覽器的瘦客戶應(yīng)用程序。這當(dāng)然不是因?yàn)槭菘蛻裟軌蛱峁└玫挠脩艚缑?,而是因?yàn)樗軌虮苊饣ㄔ谧烂鎽?yīng)用程序發(fā)布上的高成本。發(fā)布桌面應(yīng)用程序成本很高,一半是因?yàn)閼?yīng)用程序安裝和配置的問題,另一半是因?yàn)榭蛻艉?a target="_blank">服務(wù)器之間通信的問題。
許多商用程序還面臨另一個(gè)問題,那就是與其他程序的互操作性。如果所有的應(yīng)用程序都是使用COM或.NET語言寫的,并且都運(yùn)行在Windows平臺(tái)上,那就天下太平了。然而,事實(shí)上大多數(shù)商業(yè)數(shù)據(jù)仍然在大型主機(jī)上以非關(guān)系文件(VSAM)的形式存放,并由COBOL語言編寫的大型機(jī)程序訪問。而且,目前還有很多商用程序繼續(xù)在使用C++、Java、Visual Basic和其他各種各樣的語言編寫?,F(xiàn)在,除了簡單的程序之外,所有的應(yīng)用程序都需要與運(yùn)行在其他異構(gòu)平臺(tái)上的應(yīng)用程序集成并進(jìn)行數(shù)據(jù)交換。這樣的任務(wù)通常都是由特殊的方法,如文件傳輸和分析,消息隊(duì)列,還有僅適用于某些情況的的API,如IBM的"程序到程序交流(APPC)"等來完成的。
在用擴(kuò)展構(gòu)建得比較好的Struts應(yīng)用程序支持 Web服務(wù)的時(shí)候,可以利用Web服務(wù)體系結(jié)構(gòu)的MVC模式特性在Struts框架的相應(yīng)部分進(jìn)行修改和擴(kuò)充,從而在不改變原有應(yīng)用架構(gòu)和具體實(shí)現(xiàn)的基礎(chǔ)上方便有效地使應(yīng)用程序具有Web服務(wù)的功能。
本模型通過將Web服務(wù)的控制流程包裝成相應(yīng)的Action類——WSAction類,為企業(yè)應(yīng)用提供Web服務(wù)和定購Web服務(wù)。在Struts框架中,根據(jù)不同的請求從Action派生具體Action處理對象,完成“做什么”的任務(wù)來調(diào)用由Bean構(gòu)成的業(yè)務(wù)組件。在擴(kuò)展Web服務(wù)的框架中,Servlet根據(jù)客戶端的請求是Web服務(wù)的請求而調(diào)用相應(yīng)的WSAction,派生具體的Action處理對象。完成“做什么”的任務(wù)調(diào)用模型服務(wù)部分,模型服務(wù)組件聚集相關(guān)的預(yù)定義數(shù)據(jù)訪問對象,然后將它傳回給 ActionServlet 或者 WSAction 類。所有的錯(cuò)誤或者確認(rèn)信息都會(huì)通知給 ActionServlet 或 WSAction。
Struts框架的Web服務(wù)結(jié)構(gòu)如圖3所示。

WSAction類主要包括以下功能函數(shù)調(diào)用:
(1)請求參數(shù)的預(yù)處理。請求所包含的參數(shù)形式有 Java 對象、Java原始參數(shù)、XML文檔或者SOAP文檔分片(例如SOAP Element對象)。這些類型必須轉(zhuǎn)化成內(nèi)部所支持的schema(例如預(yù)定義的Java數(shù)據(jù)訪問對象)。
(2)身份驗(yàn)證和授權(quán)使用。為了保護(hù)公開的Web服務(wù),需要對所有訂購者執(zhí)行身份驗(yàn)證。所有想使用Web服務(wù)的客戶都要經(jīng)過這樣的身份驗(yàn)證邏輯??梢允褂没居脩羯矸蒡?yàn)證或者數(shù)字證書來實(shí)現(xiàn)此目的。
(3)錯(cuò)誤處理。錯(cuò)誤都是在WSAction類中處理的,減少了服務(wù)器端的開銷。在向外提供Web服務(wù)時(shí),WSAction拋出諸如SOAPFaultException這樣的異常,檢查新來的請求并且拋出諸如缺少強(qiáng)制字段的異常。在訂閱Web服務(wù)時(shí),WSAction捕捉到由服務(wù)供應(yīng)者所拋出的所有SOAP異常并且將它們更改為WSAction所要求的格式。Trace類用來記錄這些異常。
(4)Web服務(wù)緩存。當(dāng)服務(wù)的請求信息主要是只讀數(shù)據(jù)或者所請求信息比所要求的更新速率變化得還要慢時(shí),WSAction調(diào)用緩存服務(wù),這樣可避免不必要的數(shù)據(jù)庫訪問。
下面的程序給出了一個(gè)簡單的WSAction實(shí)現(xiàn)。
public WSActionForward perform(
ActionMapping mapping,
ActionForm form,
XmlServletRequest request,
XmlServletResponse response)
throws IOException,ServletException {
//對XML請求進(jìn)行預(yù)處理
WSPreTreatment
Pretreat=new(WSPreTreatment);
Pretreat.treat(request);
//抽取所需的屬性和參數(shù)
WsForm wsForm=(WsForm) form;
String parameter=wsForm.getParm( );
WSActionErrors
errors=new WSActionErrors( );
//進(jìn)行服務(wù)
WSAuthentication
Auth=new WSAuthentication( );
If Auth.check(parameter)=″ok″
//調(diào)用model service..
try {
business.db.processaction(parameter);
//服務(wù)結(jié)果緩存
WSCaching
Caching=new WSCaching( );
Caching.Add( );
} catch (Exception e) {
//將錯(cuò)誤回顯給用戶
errors.add(″Web services″,new WSActionError(″db error″));
}
//將控制權(quán)轉(zhuǎn)交給Action.xml中指定的′Next′ URI
return(mapping.findForward(″Next″));
}
3 結(jié)束語
通過分析開源的MVC Model2開發(fā)框架Struts,把分布式應(yīng)用的一種新的形式——Web服務(wù)引入現(xiàn)有的、構(gòu)建得較好的Struts框架的Web應(yīng)用中。通過對比Struts框架和Web服務(wù)在體系結(jié)構(gòu)上共有的MVC模式發(fā)現(xiàn):集成的關(guān)鍵是在控制層和模型層之間信息的傳遞和銜接。因此,添加了Struts中的Action類WsAciton,取得了較好的效果,方便地實(shí)現(xiàn)了擴(kuò)展Web服務(wù)。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 工業(yè)5G技術(shù)在智能制造中的應(yīng)用與實(shí)踐解析2025/12/31 10:57:21
- 工業(yè)以太網(wǎng)交換機(jī)選型與現(xiàn)場應(yīng)用技術(shù)指南2025/12/18 10:48:14
- 無線傳輸電路基礎(chǔ),射頻前端設(shè)計(jì)、天線匹配與鏈路預(yù)算計(jì)算2025/10/27 13:55:50
- ASK 解調(diào)的核心要點(diǎn)與實(shí)現(xiàn)方式2025/9/5 16:46:17
- 雙偶極子天線:結(jié)構(gòu)、特性與應(yīng)用全解析2025/9/3 10:29:21









