楊 懌,陳卓妮
(1.湖北師范學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,湖北 黃石 435002;2.黃石市教育局,湖北 黃石 435000)
Java Web應(yīng)用底層數(shù)據(jù)傳遞模式的分析與研究
楊 懌1,陳卓妮2
(1.湖北師范學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,湖北 黃石 435002;2.黃石市教育局,湖北 黃石 435000)
在Java Web應(yīng)用開發(fā)中,底層數(shù)據(jù)傳遞的模式和傳統(tǒng)本地應(yīng)用有著不小的區(qū)別,對底層數(shù)據(jù)傳遞模式的了解和數(shù)據(jù)傳遞流程的設(shè)計(jì)決定了應(yīng)用開發(fā)的復(fù)雜程度,影響著整個(gè)Java Web應(yīng)用程序的開發(fā)效率和后期維護(hù)的難易度。筆者從開發(fā)模型入手對Java Web應(yīng)用中的底層數(shù)據(jù)傳遞模式進(jìn)行了分析,并詳細(xì)說明了底層數(shù)據(jù)流程和方法。
Web應(yīng)用;Java;數(shù)據(jù)傳遞
Web應(yīng)用程序已成為現(xiàn)代應(yīng)用軟件的一個(gè)重要分支。伴隨著網(wǎng)絡(luò)基礎(chǔ)設(shè)施的不斷完善,網(wǎng)絡(luò)帶寬的不斷提升,給了Web應(yīng)用更大更廣闊的發(fā)展空間。加上Web應(yīng)用在網(wǎng)絡(luò)上發(fā)布和使用的便捷性,越來越多的應(yīng)用程序采用了Web應(yīng)用的模式來進(jìn)行開發(fā)。而Web應(yīng)用的軟件結(jié)構(gòu)和傳統(tǒng)的依附于操作系統(tǒng)的本地應(yīng)用不同,其底層數(shù)據(jù)傳遞方式多樣且復(fù)雜。隨著越來越多的Java Web開發(fā)開始使用第三方框架,這些框架對底層數(shù)據(jù)傳遞的機(jī)制或多或少的做了一定的封裝,使得一部分開發(fā)者并沒有完全接觸到底層的代碼,不了解底層數(shù)據(jù)傳遞的模式,因而對項(xiàng)目的開發(fā)造成了影響。相反,對底層模式的熟悉可以更快的掌握框架的核心功能,來減輕數(shù)據(jù)發(fā)送、傳遞和獲取時(shí)重復(fù)代碼的編寫。Java Web應(yīng)用中客戶端與服務(wù)器進(jìn)行數(shù)據(jù)傳遞和服務(wù)器端內(nèi)部數(shù)據(jù)流的處理時(shí)機(jī)制完全不同,前者使用網(wǎng)絡(luò)協(xié)議在網(wǎng)絡(luò)上傳輸數(shù)據(jù)最終使用Java代碼接受數(shù)據(jù),而后者完全采用Java EE技術(shù)在服務(wù)器端的應(yīng)用服務(wù)器軟件的支持下進(jìn)行傳遞,見圖1.
圖1 Java Web應(yīng)用底層數(shù)據(jù)傳遞模式
Java Web應(yīng)用程序數(shù)據(jù)傳遞的發(fā)起始于客戶端一個(gè)瀏覽器向Web應(yīng)用服務(wù)器發(fā)出請求,應(yīng)用服務(wù)器把請求中需要程序處理的數(shù)據(jù)放在由服務(wù)器生成的request對象中,接著調(diào)用相應(yīng)程序處理后將最終結(jié)果放在response對象中發(fā)送給客戶端的用戶瀏覽器。不斷往返的請求和響應(yīng)構(gòu)成了客戶端到服務(wù)器的數(shù)據(jù)傳遞。
從客戶端向服務(wù)器傳遞數(shù)據(jù)常用兩種方式。簡單的數(shù)據(jù)可以直接放在請求URL的后面加上問號接著寫上參數(shù)名等于參數(shù)值的值對。例如:請求的URL是"abc?x=1&y=2",會(huì)把x和y這兩個(gè)參數(shù)值傳遞給了URL"abc"所對應(yīng)的程序代碼。在程序代碼中使用request對象的getParameter()方法即可接受到參數(shù)值。第二種方式采用表單從客戶端提交數(shù)據(jù)給服務(wù)器,在提交數(shù)據(jù)之前需先向服務(wù)器請求一個(gè)表單頁,可以把這個(gè)服務(wù)器返回的表單頁看做數(shù)據(jù)的載體,在這個(gè)載體中填好數(shù)據(jù)后,再次提交時(shí),數(shù)據(jù)就會(huì)傳遞給表單中指明的處理程序,在程序中同樣適用request對象的getParameter()方法來取得表單中的各項(xiàng)數(shù)據(jù)。使用此方法取得的數(shù)據(jù)都是字符串類型,如果原始數(shù)據(jù)是基本數(shù)據(jù)類型,則要進(jìn)行一次數(shù)據(jù)類型轉(zhuǎn)化。
從服務(wù)器向客戶端發(fā)送數(shù)據(jù)也有兩種形式,第一種方式中服務(wù)器中的程序會(huì)直接把最終的數(shù)據(jù)結(jié)果插入到顯示頁面上,一起作為HTML頁面響應(yīng)發(fā)給瀏覽器顯示。另一種則把數(shù)據(jù)放在response對象中傳遞給頁面的JavaScript來處理。
Java Web應(yīng)用程序的底層技術(shù)是Servlet,因?yàn)镴SP在運(yùn)行時(shí)也要轉(zhuǎn)化為Servlet,他們兩者的實(shí)質(zhì)是一樣的,都需要使用URL來調(diào)用。當(dāng)服務(wù)器端的程序接收客戶端的數(shù)據(jù)以后,往往不僅僅是由一個(gè)Servlet或JSP來處理,因此會(huì)在多個(gè)Servlet或JSP中進(jìn)行傳遞。他們之間的數(shù)據(jù)傳遞與傳統(tǒng)的本地應(yīng)用中直接通過函數(shù)調(diào)用時(shí)通過函數(shù)的參數(shù)來傳遞數(shù)據(jù)的形式完全不同。
首先把需要傳遞的數(shù)據(jù)通過request對象的setAttribute()方法與一個(gè)屬性名綁定保存在request對象中。然后通過語句request.getRequestDispatcher(name).forward(request, response)轉(zhuǎn)發(fā)到另一個(gè)Servlet或JSP,其中第一個(gè)括號中的參數(shù)值是轉(zhuǎn)發(fā)目標(biāo)的URL。最后再在目標(biāo)代碼中使用request對象getAttribute()方法通過保存時(shí)的屬性名來取得數(shù)據(jù)值。
除了以線性方式傳遞數(shù)據(jù)以外,在服務(wù)器端很多時(shí)候還需要以一種離散的方式來保存和傳遞數(shù)據(jù)。例如在一些需要用戶登錄的Web應(yīng)用中,很多界面都需要顯示用戶信息,那么在第一次取得用戶信息以后,這一數(shù)據(jù)需要一直存在并多次被讀取。Java Web編程中提供了幾個(gè)對象來完成這些工作,session對象可以在一個(gè)會(huì)話即打開瀏覽器到關(guān)閉瀏覽器的整個(gè)過程中一直存在,這個(gè)對象也使用setAttribute()和getAttribute()方法來保存和取得數(shù)據(jù)。
需要注意的是,傳遞過程中數(shù)據(jù)是作為object對象類型來保存的,取得數(shù)據(jù)對象以后需要做一次強(qiáng)制類型轉(zhuǎn)換,將object類型對象轉(zhuǎn)換成傳遞前的對象類型。有時(shí)客戶端頁面需要展示從數(shù)據(jù)庫讀取的多行數(shù)據(jù),或者若干的獨(dú)立的對象數(shù)據(jù),為了方便數(shù)據(jù)的傳遞,在傳遞之前可以把數(shù)據(jù)保存在一個(gè)集合類對象中。
為了讓數(shù)據(jù)傳遞處理更加高效,在Java Web應(yīng)用開發(fā)中經(jīng)常使用的MVC開發(fā)模式將整個(gè)Web應(yīng)用分為了Model邏輯層,View表示層和Control控制層三個(gè)部分,其中控制層的主要作用之一就是負(fù)責(zé)整個(gè)應(yīng)用程序的數(shù)據(jù)傳遞??刂茖拥莫?dú)立把用于數(shù)據(jù)傳遞的代碼分離出來,讓數(shù)據(jù)傳遞的流程成為了應(yīng)用程序的血管,同時(shí)也讓表示層和邏輯層的任務(wù)更加明確,整個(gè)Web應(yīng)用構(gòu)架更加清晰。
控制層的作用是從客戶端接受數(shù)據(jù)請求,然后根據(jù)請求,把客戶端數(shù)據(jù)傳遞給相關(guān)的邏輯處理代碼,待數(shù)據(jù)被邏輯層處理完畢后,再將處理完成的數(shù)據(jù)傳遞給表示層展示給客戶端用戶??刂茖硬粌H是數(shù)據(jù)流的管道,同時(shí)也扮演這一個(gè)數(shù)據(jù)控制中心的角色,負(fù)責(zé)數(shù)據(jù)在業(yè)務(wù)邏輯和展示界面之間的調(diào)度。這樣的開發(fā)模型能讓開發(fā)者把更多的時(shí)間投入到業(yè)務(wù)邏輯和用戶體驗(yàn)的設(shè)計(jì)當(dāng)中。
雖然Java EE的版本不斷升級,新的框架不斷出現(xiàn),但底層數(shù)據(jù)傳遞始終是開發(fā)Java Web應(yīng)用中的重要一環(huán)。采用各自針對性的模式來處理客戶端到服務(wù)器的數(shù)據(jù)傳遞和服務(wù)器內(nèi)部數(shù)據(jù)傳遞,在應(yīng)用服務(wù)器內(nèi)部選擇不同的對象來保存生命周期不同的數(shù)據(jù),同時(shí)在開發(fā)模式中建立控制層獨(dú)立的處理數(shù)據(jù)流,不但可以讓數(shù)據(jù)傳遞流程的設(shè)計(jì)更加合理,也是Java Web應(yīng)用程序運(yùn)行穩(wěn)定和高效的保證。
[1]馬衛(wèi)華,馬滿增,劉文慧.Web應(yīng)用系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的原理[J]. 電腦編程技巧與維護(hù),2008,15:48~49.
[2]姜宇鳴,劉瑞玲.基于MVC模式的B/S架構(gòu)系統(tǒng)的開發(fā)與探討[J]. 科技致富向?qū)? 2012,18:19~21.
[3]郝玉龍.Java EE編程技術(shù)[M].北京:清華大學(xué)出版社,北京交通大學(xué)出版社,2008.
[4]李 剛.瘋狂Java第二版[M].北京 :電子工業(yè)出版社,2012.
[5]鄧子云.Java Web輕量級應(yīng)用開發(fā)[M]. 北京:電子工業(yè)出版社,2012.
ThetransfermodeoftheunderlyingdatainJavaWebapplication
YANG Yi1,CHEN Zhuo-ni2
(1.College of Computer Science &Technology,Hubei Normal University,Huangshi 435002,China;2.Education Bureau,Huangshi 435000,China)
When an Java Web application system developed,the transfer mode of the underlying data is greatly different from that of the traditional local application system.How complicated the application development is depends on the understanding of the transfer mode of the underlying data and the design of the data transfer flow,which effects the development efficiency and the maintenance difficulty in later period.A transfer mode of the underlying data of the Java Web application system is analyzed in this paper,and the way of the data transfer flow is expained in detail.
Web application;Java;data transfer
2013—11—27
楊 懌(1979— ),男,湖北黃石人,碩士,實(shí)驗(yàn)師,研究方向?yàn)镴ava Web應(yīng)用、軟件工程.
TP311
A
1009-2714(2014)01- 0027- 03
10.3969/j.issn.1009-2714.2014.01.006