999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于Servlet的控制層軟件框架設(shè)計(jì)

2017-04-13 01:34:40史夢(mèng)安
軟件導(dǎo)刊 2017年3期
關(guān)鍵詞:系統(tǒng)設(shè)計(jì)

史夢(mèng)安,馬 壯

(淮安信息職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)與通信工程學(xué)院,江蘇 淮安 223003)

一種基于Servlet的控制層軟件框架設(shè)計(jì)

史夢(mèng)安,馬 壯

(淮安信息職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)與通信工程學(xué)院,江蘇 淮安 223003)

使用“IOC模式”以及“單例模式”等設(shè)計(jì)思想設(shè)計(jì)了一種以Servlet作為Http請(qǐng)求入口的非侵入式控制層軟件框架,通過Java反射技術(shù)建立了“IOC容器”并對(duì)其運(yùn)行效率進(jìn)行了研究。該框架可以針對(duì)不同請(qǐng)求,動(dòng)態(tài)實(shí)例化控制器對(duì)象,實(shí)現(xiàn)控制反轉(zhuǎn)和請(qǐng)求分發(fā),從而有效降低模塊間耦合,提升系統(tǒng)的可擴(kuò)展性及開發(fā)效率。

Servlet;控制層軟件框架;Java反射技術(shù);IOC;非侵入式

0 引言

Servlet是Java編程語言的Web服務(wù)器端編程技術(shù),運(yùn)行在 Java-enabled Web Server 中。Servlet基于請(qǐng)求/響應(yīng)模式提供Web服務(wù),可針對(duì)不同請(qǐng)求作出不同響應(yīng),常作為MVC模式中的Control模塊[1]進(jìn)行請(qǐng)求的分發(fā)。Spring MVC、Struts等企業(yè)級(jí)應(yīng)用開發(fā)框架即以Servlet為核心,但Spring MVC、Struts等框架幾乎封裝了一般Web項(xiàng)目涉及的所有領(lǐng)域:控制器、過濾器,甚至標(biāo)簽庫(kù)。小型應(yīng)用的開發(fā)可能只需要框架的請(qǐng)求分發(fā)功能,但必須搭建一個(gè)完整框架,令含小型應(yīng)用的開發(fā)流程過于臃腫。本文設(shè)計(jì)了一種“輕量級(jí)”、非侵入式的基于Servlet的控制層軟件框架,以降低小型應(yīng)用開發(fā)難度,提高開發(fā)效率。

1 基于Servlet的請(qǐng)求分發(fā)

Servlet中定義有doGet()和doPost()兩個(gè)處理請(qǐng)求的方法,即每個(gè)Servlet可以接收兩個(gè)不同的Http請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)至相應(yīng)的業(yè)務(wù)邏輯中進(jìn)行處理。在業(yè)務(wù)邏輯稍微復(fù)雜、需要服務(wù)端同時(shí)處理多種請(qǐng)求時(shí),Servlet功能的局限性便凸顯出來。Servlet處理多種請(qǐng)求有兩種方式:①建立多個(gè)Servlet;②傳遞參數(shù)。建立多個(gè)Servlet會(huì)提高代碼冗余度和耦合度,降低功能內(nèi)聚。傳參方式只需一個(gè)Servlet,通過獲取請(qǐng)求中傳入的方法參數(shù)來配合邏輯分支語句。理論上一個(gè)Servlet可處理多個(gè)不同請(qǐng)求,如圖1所示。

通過傳參方式所實(shí)現(xiàn)的Servlet響應(yīng)多請(qǐng)求,會(huì)導(dǎo)致代碼冗余度高,耦合度提升,不利于團(tuán)隊(duì)開發(fā),且系統(tǒng)靈活性和可擴(kuò)展性差[2]。為降低耦合、提升系統(tǒng)性能,本文設(shè)計(jì)了一種基于Servlet的控制層軟件框架,可提升開發(fā)效率。

圖1 傳參實(shí)現(xiàn)Servlet響應(yīng)多請(qǐng)求

2 基于Servlet的控制層軟件框架設(shè)計(jì)

基于請(qǐng)求/響應(yīng)的傳統(tǒng)開發(fā)模式是由Consumer(在Web應(yīng)用中一般指代處理用戶請(qǐng)求的線程)管理控制層和業(yè)務(wù)層對(duì)象之間的依賴關(guān)系,每次接受請(qǐng)求時(shí)都需要Consumer進(jìn)行實(shí)例化對(duì)象,導(dǎo)致系統(tǒng)的耦合度高,性能低,可擴(kuò)展性較差。可以使用“控制反轉(zhuǎn)設(shè)計(jì)模式(IOC)”[3]對(duì)原有的技術(shù)框架進(jìn)行改進(jìn),使用RESTful風(fēng)格設(shè)計(jì)HTTP請(qǐng)求的URL,將需要訪問的業(yè)務(wù)對(duì)象名和操作名融入U(xiǎn)RL路徑。

2.1 “IOC容器”設(shè)計(jì)

“IOC”(控制反轉(zhuǎn))即反轉(zhuǎn)依賴對(duì)象的獲得過程[4]。通過建立“IOC容器”,使獲取依賴對(duì)象的方式由傳統(tǒng)的Consumer主動(dòng)實(shí)例化對(duì)象,轉(zhuǎn)變?yōu)镃onsumer向“IOC容器”申請(qǐng)對(duì)象。由“IOC容器”實(shí)例化依賴對(duì)象,可有效降低系統(tǒng)耦合。

“IOC容器”使用反射技術(shù)進(jìn)行具體實(shí)現(xiàn),本文基于“工廠設(shè)計(jì)模式”、結(jié)合Java反射技術(shù)建立“Method對(duì)象工廠”[5]作為“IOC容器”的核心。Consumer提交所需對(duì)象的類名和方法名,向“IOC容器”申請(qǐng)依賴對(duì)象,“IOC容器”控制“Method對(duì)象工廠”使用類名和方法名動(dòng)態(tài)生成對(duì)象,并調(diào)用方法以實(shí)現(xiàn)具體業(yè)務(wù)邏輯(見圖2),完成控制反轉(zhuǎn)。

圖2 IOC容器實(shí)現(xiàn)

以Servlet作為容器入口,接收到客戶端Http請(qǐng)求而不作數(shù)據(jù)處理,可直接將請(qǐng)求轉(zhuǎn)發(fā)至“IOC容器”[6]。該“IOC容器”可以有效接管Servlet的請(qǐng)求分發(fā)工作,削減系統(tǒng)耦合,提升系統(tǒng)的可擴(kuò)展性。但類名和方法名參數(shù)采用GET方式傳遞時(shí),會(huì)暴露系統(tǒng)架構(gòu),降低系統(tǒng)安全性。

2.2 URL路徑設(shè)計(jì)

為提升系統(tǒng)的安全性和易用性,客戶端不使用URL GET方式提交數(shù)據(jù)。使用RESTful風(fēng)格設(shè)計(jì)HTTP請(qǐng)求的URL路徑如下:

http://host:port/path/類名/方法名/參數(shù)1/參數(shù)2/...

“IOC容器”對(duì)請(qǐng)求RESTful風(fēng)格的URL進(jìn)行解析,根據(jù)解析出的兩個(gè)資源名對(duì)應(yīng)本次請(qǐng)求需調(diào)用的類名和方法名。為隱藏真實(shí)類名、提升反射性能,“IOC容器”使用HashMap表映射控制器的Class類結(jié)構(gòu)對(duì)象。根據(jù)自定義類名,“IOC容器”從HashMap中獲取對(duì)應(yīng)的Class對(duì)象,通過Method對(duì)象工廠,動(dòng)態(tài)獲取類的帶參構(gòu)造器并傳入HttpRequest和HttpResponse參數(shù)實(shí)例化對(duì)象,然后由容器調(diào)用相應(yīng)的方法。系統(tǒng)通過“IOC容器”掌握對(duì)象的調(diào)用權(quán),實(shí)現(xiàn)系統(tǒng)的控制反轉(zhuǎn),工作流程如圖3所示。

圖3 IOC容器工作流程

通過構(gòu)建非侵入式的“IOC容器”,對(duì)Servlet轉(zhuǎn)發(fā)的不同Http請(qǐng)求動(dòng)態(tài)創(chuàng)建所需的對(duì)象和方法,解決了代碼間的高耦合問題,有利于功能復(fù)用,提高了系統(tǒng)的可擴(kuò)展性,便于團(tuán)隊(duì)開發(fā)。但Java反射技術(shù)所占用的大量計(jì)算機(jī)資源需進(jìn)一步優(yōu)化。

3 框架優(yōu)化與改進(jìn)

3.1 “對(duì)象緩存池”設(shè)計(jì)

當(dāng)通過該框架實(shí)現(xiàn)系統(tǒng)控制層時(shí),所有請(qǐng)求都由Method對(duì)象工廠通過Java反射技術(shù)分發(fā)至具體控制器[7],每個(gè)請(qǐng)求都會(huì)在Method對(duì)象工廠中通過newInstance()方法創(chuàng)建新對(duì)象,導(dǎo)致大量的計(jì)算機(jī)資源被Java反射機(jī)制占用。為提升系統(tǒng)性能、降低Java反射機(jī)制的資源消耗,可以設(shè)計(jì)一個(gè)“對(duì)象緩存池”緩存控制器對(duì)象,僅第一次調(diào)用該對(duì)象時(shí)會(huì)通過newInstance()方法實(shí)例化對(duì)象,之后調(diào)用都從“對(duì)象緩存池”中取用。

在使用“對(duì)象緩存池”時(shí),每次Http請(qǐng)求對(duì)應(yīng)不同的HttpRequest和HttpResponse,首次緩存對(duì)象時(shí)直接傳入HttpRequest來實(shí)例化對(duì)象,會(huì)導(dǎo)致緩存池中Object對(duì)象的參數(shù)一成不變,導(dǎo)致程序陷入死循環(huán)。為解決這一問題,使用“單例設(shè)計(jì)模式”[8]封裝Http請(qǐng)求,將Http對(duì)象作為參數(shù)代入構(gòu)造器并實(shí)例化對(duì)象,此時(shí)Http作為形參傳入的僅是對(duì)象的首地址,即可解決Request請(qǐng)求的更新問題。改進(jìn)后的框架工作流程如圖4所示。

圖4 “對(duì)象緩存池”和Http單例對(duì)象

3.2 性能測(cè)試

實(shí)際測(cè)試硬件設(shè)備選用的CPU為:Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz,單核,內(nèi)存2G。通過測(cè)試程序訪問框架中的同一個(gè)控制器,測(cè)試結(jié)果取1 000次的平均值。

首次運(yùn)行newInstance()創(chuàng)建對(duì)象時(shí),緩存池為空,所以二者運(yùn)行性能相近,此時(shí)對(duì)象存入緩存池時(shí)比直接使用newInstance()多出一個(gè)操作步驟,運(yùn)行耗時(shí)略高(見圖5,單位:ns)。

圖5 首次運(yùn)行NewInstance()耗時(shí)對(duì)比

在第一次創(chuàng)建對(duì)象后,若使用之前已創(chuàng)建過的對(duì)象,可直接從“緩存”中讀取,使用newInstance()創(chuàng)建對(duì)象和使用“緩存池”緩存對(duì)象兩種方式耗時(shí)相差一個(gè)數(shù)量級(jí),使用緩存時(shí)效率平均提升了23.8倍(見圖6,單位:ns)。

4 結(jié)語

本文首先基于“控制反轉(zhuǎn)設(shè)計(jì)模式(IOC)”設(shè)計(jì)了“IOC容器”,使用Java反射技術(shù)建立Method對(duì)象工廠實(shí)現(xiàn)控制反轉(zhuǎn),并利用該容器設(shè)計(jì)了一個(gè)基于Servlet的控制層軟件框架。之后利用“對(duì)象緩存池”以及“單例設(shè)計(jì)模式”對(duì)框架進(jìn)行性能優(yōu)化,使框架運(yùn)行效率大幅提升,并降低資源占用。該框架具有較好的擴(kuò)展性及穩(wěn)定性,提高了模塊的健壯性和功能內(nèi)聚性,可為各類中小型應(yīng)用項(xiàng)目的研發(fā)提供借鑒。

圖6 非首次運(yùn)行NewInstance()耗時(shí)對(duì)比

[1] 馮錫煒,侯彤璞,張飛俠.Servlet技術(shù)在Web應(yīng)用中的實(shí)現(xiàn)[J].遼寧工學(xué)院學(xué)報(bào),2005(1):13-16.

[2] 史夢(mèng)安,王志勃.基于Android系統(tǒng)的TCP/IP客戶端異步通信模塊研究[J].軟件導(dǎo)刊,2014(10):115-118.

[3] RICHARD EG,RALPH H,JOHNSON R,et al.Design paterns:elements of reusable object-oriented software[M].Beijing:China Machine Press,2013.

[4] 魏學(xué)松,張育平.IOC框架的研究與設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006(3):213-216.

[5] 尹松強(qiáng),傅鸝.Java反射機(jī)制探究[J].軟件導(dǎo)刊,2008(11):85-87.

[6] 馮鐵,李文錦,張家晨,等.面向Java語言的設(shè)計(jì)模式抽取方法的研究[J].計(jì)算機(jī)工程與應(yīng)用,2005(25):23-38.

[7] 吳東慶,胡小健,楊逢建.反射機(jī)制下類工廠模式的實(shí)現(xiàn)與研究[J].計(jì)算機(jī)應(yīng)用,2006(3):705-707.

[8] 陳翠娥.Java單例模式應(yīng)用研究[J].長(zhǎng)沙民政職業(yè)技術(shù)學(xué)院學(xué)報(bào),2010(1):114-116.

(責(zé)任編輯:黃 健)

Design of a Kind of Controller Layer Software Framework Based on Servlet

This article use “IOC” and singleton pattern to design a kind of controller layer software framework based on servlet,and built an IOC container by Java reflection techniques and a research are made on it’s running efficiency.This framework can dynamically instantiate controller objects for different requests,and distributes the requests through implementation of IOC,it can effectively reduce the coupling of modules and improve system expansibility and development efficiency.

Servlet; Controller Layer Software Framework; Java Reflection Techniques; IOC; Non-intrusive

江蘇省淮安市重點(diǎn)研發(fā)計(jì)劃項(xiàng)目(HAN2015035-2)

史夢(mèng)安(1985-),男,山東臨沂人,碩士,淮安信息職業(yè)技術(shù)學(xué)院計(jì)算機(jī)與通信工程學(xué)院講師、工程師,研究方向?yàn)檐浖こ獭⒁苿?dòng)互聯(lián)應(yīng)用與物聯(lián)網(wǎng)技術(shù)。

10.11907/rjdk.162851

TP319

A

1672-7800(2017)003-0083-03

猜你喜歡
系統(tǒng)設(shè)計(jì)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機(jī)系統(tǒng)
ZC系列無人機(jī)遙感系統(tǒng)
何為設(shè)計(jì)的守護(hù)之道?
《豐收的喜悅展示設(shè)計(jì)》
流行色(2020年1期)2020-04-28 11:16:38
基于PowerPC+FPGA顯示系統(tǒng)
半沸制皂系統(tǒng)(下)
瞞天過海——仿生設(shè)計(jì)萌到家
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
設(shè)計(jì)秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
主站蜘蛛池模板: www.精品视频| 亚洲综合天堂网| 精品国产成人国产在线| 亚洲男人天堂2020| 久久精品国产精品青草app| 精品国产毛片| 日韩成人在线一区二区| 人人爽人人爽人人片| 狠狠操夜夜爽| 亚洲Aⅴ无码专区在线观看q| 亚洲婷婷六月| 国产午夜人做人免费视频中文| 精品人妻一区二区三区蜜桃AⅤ| 国产福利小视频在线播放观看| 在线综合亚洲欧美网站| 国产高潮流白浆视频| 久久久久国产精品嫩草影院| 99国产精品国产| 91国内在线观看| 国产欧美精品专区一区二区| 亚洲婷婷丁香| 国产综合另类小说色区色噜噜| 亚洲国产欧美目韩成人综合| 国产尤物jk自慰制服喷水| 亚洲欧美自拍一区| 91人妻在线视频| 欧美在线视频不卡第一页| 国产成人精品午夜视频'| 极品国产一区二区三区| 国产小视频a在线观看| 91午夜福利在线观看| 久久伊伊香蕉综合精品| 2021精品国产自在现线看| 精品国产成人三级在线观看| 国产二级毛片| 99久久国产自偷自偷免费一区| 国产精品一区不卡| 97国内精品久久久久不卡| 国产精品久久久久无码网站| 特级精品毛片免费观看| 国产精品毛片一区| 成人av专区精品无码国产| 九色综合伊人久久富二代| 欧美激情,国产精品| 一区二区三区四区在线| 一本大道视频精品人妻| 黑人巨大精品欧美一区二区区| 精品视频91| 亚洲成a人片77777在线播放| 国产精品第页| 亚洲一区毛片| 日韩一级二级三级| 色欲色欲久久综合网| 狠狠v日韩v欧美v| 国产精品亚洲综合久久小说| 国产在线自在拍91精品黑人| 风韵丰满熟妇啪啪区老熟熟女| 2022精品国偷自产免费观看| 久久精品无码中文字幕| 国产99免费视频| 国产成人一级| 亚洲国产在一区二区三区| 91免费国产在线观看尤物| 国产女人18水真多毛片18精品| 午夜精品影院| 精品国产免费观看| 一边摸一边做爽的视频17国产| 国产免费羞羞视频| 一级一级一片免费| 色综合天天视频在线观看| 婷婷六月综合网| 亚洲天堂.com| 国产精品无码在线看| 国禁国产you女视频网站| 免费a级毛片视频| 欧美黑人欧美精品刺激| 澳门av无码| 成人年鲁鲁在线观看视频| 中国一级毛片免费观看| 亚洲香蕉久久| 久久这里只精品热免费99| 精品99在线观看|