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

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

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

WSAction類(lèi)主要包括以下功能函數(shù)調(diào)用:
(1)請(qǐng)求參數(shù)的預(yù)處理。請(qǐng)求所包含的參數(shù)形式有 Java 對(duì)象、Java原始參數(shù)、XML文檔或者SOAP文檔分片(例如SOAP Element對(duì)象)。這些類(lèi)型必須轉(zhuǎn)化成內(nèi)部所支持的schema(例如預(yù)定義的Java數(shù)據(jù)訪問(wèn)對(duì)象)。
(2)身份驗(yàn)證和授權(quán)使用。為了保護(hù)公開(kāi)的Web服務(wù),需要對(duì)所有訂購(gòu)者執(zhí)行身份驗(yàn)證。所有想使用Web服務(wù)的客戶都要經(jīng)過(guò)這樣的身份驗(yàn)證邏輯。可以使用基本用戶身份驗(yàn)證或者數(shù)字證書(shū)來(lái)實(shí)現(xiàn)此目的。
(3)錯(cuò)誤處理。錯(cuò)誤都是在WSAction類(lèi)中處理的,減少了服務(wù)器端的開(kāi)銷(xiāo)。在向外提供Web服務(wù)時(shí),WSAction拋出諸如SOAPFaultException這樣的異常,檢查新來(lái)的請(qǐng)求并且拋出諸如缺少?gòu)?qiáng)制字段的異常。在訂閱Web服務(wù)時(shí),WSAction捕捉到由服務(wù)供應(yīng)者所拋出的所有SOAP異常并且將它們更改為WSAction所要求的格式。Trace類(lèi)用來(lái)記錄這些異常。
(4)Web服務(wù)緩存。當(dāng)服務(wù)的請(qǐng)求信息主要是只讀數(shù)據(jù)或者所請(qǐng)求信息比所要求的更新速率變化得還要慢時(shí),WSAction調(diào)用緩存服務(wù),這樣可避免不必要的數(shù)據(jù)庫(kù)訪問(wèn)。
下面的程序給出了一個(gè)簡(jiǎn)單的WSAction實(shí)現(xiàn)。
public WSActionForward perform(
ActionMapping mapping,
ActionForm form,
XmlServletRequest request,
XmlServletResponse response)
throws IOException,ServletException {
//對(duì)XML請(qǐng)求進(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中指定的′N(xiāo)ext′ URI
return(mapping.findForward(″Next″));
}
3 結(jié)束語(yǔ)
通過(guò)分析開(kāi)源的MVC Model2開(kāi)發(fā)框架Struts,把分布式應(yīng)用的一種新的形式——Web服務(wù)引入現(xiàn)有的、構(gòu)建得較好的Struts框架的Web應(yīng)用中。通過(guò)對(duì)比Struts框架和Web服務(wù)在體系結(jié)構(gòu)上共有的MVC模式發(fā)現(xiàn):集成的關(guān)鍵是在控制層和模型層之間信息的傳遞和銜接。因此,添加了Struts中的Action類(lèi)WsAciton,取得了較好的效果,方便地實(shí)現(xiàn)了擴(kuò)展Web服務(wù)。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?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)場(chǎng)應(yīng)用技術(shù)指南2025/12/18 10:48:14
- 無(wú)線傳輸電路基礎(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
- 編碼器的工作原理及作用1
- 超強(qiáng)整理!PCB設(shè)計(jì)之電流與線寬的關(guān)系2
- 三星(SAMSUNG)貼片電容規(guī)格對(duì)照表3
- 電腦藍(lán)屏代碼大全4
- 國(guó)標(biāo)委發(fā)布《電動(dòng)汽車(chē)安全要求第3部分:人員觸電防護(hù)》第1號(hào)修改單5
- 通俗易懂談上拉電阻與下拉電阻6
- 繼電器的工作原理以及驅(qū)動(dòng)電路7
- 電容單位8
- 跟我學(xué)51單片機(jī)(三):?jiǎn)纹瑱C(jī)串口通信實(shí)例9
- 一種三極管開(kāi)關(guān)電路設(shè)計(jì)10
- PCB電源完整性(PI)設(shè)計(jì)核心實(shí)操規(guī)范
- 多層PCB疊層設(shè)計(jì)核心實(shí)操規(guī)范
- 提高M(jìn)OSFET效率的電路優(yōu)化方法
- 電源管理IC在智能家居中的應(yīng)用
- 差分信號(hào)連接器設(shè)計(jì)要點(diǎn)
- PCB焊盤(pán)與過(guò)孔設(shè)計(jì)核心實(shí)操規(guī)范(含可焊性與可靠性保障)
- 汽車(chē)電子常用電子元器件選型指南
- MOSFET驅(qū)動(dòng)與隔離方案設(shè)計(jì)
- 高溫環(huán)境下電源IC選型建議
- 安防監(jiān)控設(shè)備連接器應(yīng)用分析









