国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Struts2框架技術(shù)研究

2016-10-21 19:09:29黃玲
科技創(chuàng)新與應(yīng)用 2016年7期
關(guān)鍵詞:控制器

黃玲

摘 要:Struts從推出以來得到了廣泛應(yīng)用,是一種優(yōu)秀的MVC開發(fā)框架,卻隨著應(yīng)用的不斷擴(kuò)大,也逐漸暴露出了一些不足。Struts2框架是基于WebWork推出的一個(gè)新的MVC框架,他與Struts相比,具有較大變化。文章介紹了Struts框架與WebWork框架,系統(tǒng)得分析了Struts2框架的體系結(jié)構(gòu),通過他與Struts框架對比,重點(diǎn)探討了Struts2控制器的實(shí)現(xiàn)原理,從而總結(jié)出Struts2較之Struts框架的優(yōu)勢。

關(guān)鍵詞:WebWork;Struts2;控制器;面向切面編程

Struts1框架雖然用的比較廣泛,也比較成熟,但在面對其他的MVC的框架來說,雖然有自己的不足之處。為了彌補(bǔ)這些不足,Struts1進(jìn)行了一些更新,之后就產(chǎn)生了現(xiàn)在的Struts2。

1 Struts1框架

Struts1由兩部分控制器組成,他們分別是核心控制器和業(yè)務(wù)邏輯控制器,核心控制器是有Struts1框架自身提供的,而業(yè)務(wù)邏輯則是有用戶自定義的,由開發(fā)者提供。

應(yīng)用是由請求驅(qū)動(dòng)的,是由客戶端的瀏覽器發(fā)送請求,然后被Struts1的核心控制器進(jìn)行攔截,核心控制器再根據(jù)請求來決定是否調(diào)用業(yè)務(wù)邏輯控制器處理請求,當(dāng)用戶請求處理完后,其處理結(jié)果通過 jsp現(xiàn)給用戶。

Struts1的缺陷:

(1)支持的前臺表現(xiàn)比較少。Struts1推出時(shí)只能夠支持jsp作為前臺的表現(xiàn)。

(2)與Servlet API嚴(yán)重耦合,對測試非常不友好。一旦離開了Web容器,測試會非常困難。因?yàn)镾truts1是完全是基于Servlet API的,所以在Struts1的業(yè)務(wù)邏輯控制器內(nèi)部,充滿了大量的Servlet API action中的參數(shù),嚴(yán)重依賴Web服務(wù)器。

2 WebWork框架

WebWork是建立在名叫Xwork基礎(chǔ)之上的框架,他是來自另一個(gè)優(yōu)秀的開源組織opensymphony。Xwork是一個(gè)標(biāo)準(zhǔn)的Command模式,簡便、靈活且功能強(qiáng)大,而且完全從web層脫離出來。

WebWork采用相互關(guān)聯(lián)較低的設(shè)計(jì),系統(tǒng)的action和servlet API不在相互依賴,允許系統(tǒng)從B/S結(jié)構(gòu)向C/S結(jié)構(gòu)轉(zhuǎn)換 WebWork能夠支持更多的前臺技術(shù)。他可以脫離Web應(yīng)用,通過IOC控制反轉(zhuǎn)與控制反轉(zhuǎn)容器,能讓測試更簡單。

相對于Struts1,WebWork優(yōu)點(diǎn)如下:

(1)action無需與Servlet API耦合,使測試更加簡便。

(2)action無需與WebWork耦合,代碼重用率高。

還可以繼承一個(gè)父類;但一旦已經(jīng)繼承了一個(gè)父類,則僅僅實(shí)現(xiàn)WebWork的action接口,包含了一個(gè)execute方法。用一個(gè)接口來代替繼承是一個(gè)非常好的優(yōu)化,用一個(gè)接口來實(shí)現(xiàn)框架行為,對類的影響較小,繼承任意味著該類不能在繼承其他父類。

(3)支持更多的前臺技術(shù),讓畫面表現(xiàn)更加靈活。

3 Struts2框架

Struts2是從WebWork繼承而來,而非Struts1。因此Struts2框架與WebWork框架相比,只是更改了一些在WebWork框架里的名稱。而我們研究他的處理流程,Struts2與Struts1相似,它們都是優(yōu)控制器構(gòu)成核心而成的。Struts2的控制器也由兩部分組成:核心控制器ServletDispatcher和業(yè)務(wù)邏輯控制器Action。

Struts2的業(yè)務(wù)處理流程大致如下:

首先用戶從客戶端的瀏覽器輸入數(shù)據(jù),提交頁面,向服務(wù)器發(fā)送請求。例如 /test/login.action、/reg/register.action;

然后Struts2得到用戶請求和數(shù)據(jù)后,會根據(jù)具體的請求來調(diào)用合適的Action;

再然后通過攔截器自動(dòng)對請求應(yīng)用通用功能,例如:i18n、頁面校驗(yàn)等其他功能;

之后調(diào)用Action的execute方法,該execute方法將得到用戶提交的數(shù)據(jù)然后進(jìn)行具體的業(yè)務(wù)邏輯處理;

最后,處理結(jié)果將以各種不同的方式返回到瀏覽器中,前臺頁面技術(shù)可由開發(fā)者自由選擇。

我們來看看Struts2的核心控制器ServletDispatcher。

核心控制器其實(shí)是一個(gè)Filter,由Struts2的框架供給。他會將用戶的請求進(jìn)行篩選,過濾,當(dāng)客戶的請求以.Action結(jié),則Struts2框架會接受該請求,進(jìn)行處理。Struts2框架會根據(jù).Action的前面部分來分配調(diào)用的Action。而我們需要在配置文件struts.xml定義Action與他的實(shí)現(xiàn)類之間的一一對應(yīng)關(guān)系。Struts2框架還提供了一系列攔截器,這些攔截器負(fù)責(zé)傳遞參數(shù)到Action中,并調(diào)用Action的execute方法來處理用戶請求。

AOP即面向切面編程,也就是所謂的攔截器,在執(zhí)行開發(fā)者業(yè)務(wù)邏輯之前,或者之后,處理一些共通的功能需求。這樣就可以分離出許多跟具體業(yè)務(wù)邏輯不相關(guān),或者關(guān)系并不大的功能,比如說校驗(yàn)用戶是否登陸,攔截用戶的含有非法字符的請求等等。這樣開發(fā)者就不需要為這些通用功能分心,只需要將重心放在自己的業(yè)務(wù)邏輯上便可。增加了代碼的重用性,減少了代碼的冗余,提高了性能和代碼的質(zhì)量,提高了開發(fā)的效率。攔截器可以實(shí)現(xiàn)許多功能,使用攔截器只需要在struts.xml,也就是配置文件中配置到需要的攔截器,這樣的話安裝配置的順序,攔截器就看在Action執(zhí)行前后執(zhí)行。這樣具有很好的維護(hù)性,如果需求有了變化,則只要修改這個(gè)攔截器就可以。

4 Action業(yè)務(wù)邏輯控制器

Action業(yè)務(wù)邏輯控制器,由用戶自己實(shí)現(xiàn)。與Struts1的Action不同,Struts2的Action完全與ServletAPI分離,更加靈活,易于提高效率和質(zhì)量。Struts2中的Action可以不需要Struts1中的Action那樣繼承Action父類。

Struts2的action有一個(gè)execute方法,這個(gè)方法沒有參數(shù)。在Action中有個(gè)不帶參數(shù)的execute方法,為什么要設(shè)計(jì)一個(gè)不帶參數(shù)的方法呢, 因?yàn)檫@樣的話我們開發(fā)的應(yīng)用不需要部署到Web容器中,即可進(jìn)行測試,更加靈活,易于提高效率和質(zhì)量。由于它不依賴于servlet請求,有更強(qiáng)的可移植、可重用性。

Struts2中Action的屬性可以實(shí)現(xiàn)和Struts1中ActionForm的屬性類似的,但實(shí)現(xiàn)的方式是不同的功能。在Struts2中,是利用框架提供的攔截器來分析請求,并將請求值賦給Action的對應(yīng)屬性。

用戶自己開發(fā)的Action類可以不繼承任何父類,這樣雖然自由,但是很有可能會不規(guī)范,或者是增加開發(fā)的難度和代碼量。所以為了規(guī)范這些Action類,Struts2為開發(fā)者提供了一個(gè)接口,規(guī)范了類這個(gè)Action類得實(shí)現(xiàn)。同時(shí),為了處理一些Web應(yīng)用中常用的功能,比如國際化網(wǎng)頁上的文字,頁面數(shù)據(jù)的有效性的校驗(yàn),數(shù)據(jù)的類型轉(zhuǎn)換和數(shù)據(jù)裝載等。用戶的Action類繼承該類后,大大地簡化了Action的開發(fā)。

為了能夠訪問Web應(yīng)用的原來的ServletAPI,Struts2提供了ActionContext,還有另外一些接口,如ServletContextAware、ServletRequestAware、Servle-tResponseAware。當(dāng)Action類實(shí)現(xiàn)了這些接口,就可以通過這些接口訪問ServletAPI實(shí)例。

參考文獻(xiàn)

[1]飛思科技產(chǎn)品研發(fā)中心.Web服務(wù)應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社,2002:189-199.

[2]袁文雯.GSM無線數(shù)據(jù)傳輸?shù)难芯亢蛻?yīng)用[D].杭州:浙江大學(xué),2003:6.

[3]趙佳玉,鮑慧.藍(lán)牙技術(shù)及其與相關(guān)技術(shù)的比較[J].電力系統(tǒng)通信,2003(12):15.

[4]王金濤.一種新型分布式無線監(jiān)測系統(tǒng)[J].計(jì)算機(jī)工程與應(yīng)用,2002(13):55-57.

猜你喜歡
控制器
工商業(yè)IC卡控制器改造為物聯(lián)網(wǎng)控制器實(shí)踐
現(xiàn)代有軌電車軌旁控制器的研究
基于DSP的復(fù)合跟蹤控制器的設(shè)計(jì)
基于FPGA的異步通信控制器設(shè)計(jì)與實(shí)現(xiàn)
基于自抗擾控制的VSC-HVDC控制器設(shè)計(jì)
電測與儀表(2014年8期)2014-04-04 09:19:34
基于FPGA的可控硅移相觸發(fā)控制器的實(shí)現(xiàn)
電測與儀表(2014年3期)2014-04-04 09:08:36
模糊PID控制器設(shè)計(jì)及MATLAB仿真
MOXA RTU控制器ioPAC 5542系列
倍福 CX8091嵌入式控制器
紅獅控制 PID控制器PXU系列
望城县| 二连浩特市| 米脂县| 玉田县| 开远市| 邹平县| 桓仁| 荆门市| 安新县| 安丘市| 巍山| 蒙自县| 庄浪县| 嘉善县| 开原市| 山东省| 濮阳市| 西吉县| 盐池县| 读书| 安新县| 南郑县| 云龙县| 合江县| 通河县| 读书| 大姚县| 定远县| 子长县| 石城县| 南充市| 长治市| 壤塘县| 汶上县| 石泉县| 柳林县| 来宾市| 桓仁| 抚顺市| 泊头市| 绥中县|