楊 懌,陳卓妮
(1.湖北師范學院 計算機科學與技術學院,湖北 黃石 435002;2.黃石市教育局,湖北 黃石 435000)
Java Web應用底層數據傳遞模式的分析與研究
楊 懌1,陳卓妮2
(1.湖北師范學院 計算機科學與技術學院,湖北 黃石 435002;2.黃石市教育局,湖北 黃石 435000)
在Java Web應用開發中,底層數據傳遞的模式和傳統本地應用有著不小的區別,對底層數據傳遞模式的了解和數據傳遞流程的設計決定了應用開發的復雜程度,影響著整個Java Web應用程序的開發效率和后期維護的難易度。筆者從開發模型入手對Java Web應用中的底層數據傳遞模式進行了分析,并詳細說明了底層數據流程和方法。
Web應用;Java;數據傳遞
Web應用程序已成為現代應用軟件的一個重要分支。伴隨著網絡基礎設施的不斷完善,網絡帶寬的不斷提升,給了Web應用更大更廣闊的發展空間。加上Web應用在網絡上發布和使用的便捷性,越來越多的應用程序采用了Web應用的模式來進行開發。而Web應用的軟件結構和傳統的依附于操作系統的本地應用不同,其底層數據傳遞方式多樣且復雜。隨著越來越多的Java Web開發開始使用第三方框架,這些框架對底層數據傳遞的機制或多或少的做了一定的封裝,使得一部分開發者并沒有完全接觸到底層的代碼,不了解底層數據傳遞的模式,因而對項目的開發造成了影響。相反,對底層模式的熟悉可以更快的掌握框架的核心功能,來減輕數據發送、傳遞和獲取時重復代碼的編寫。Java Web應用中客戶端與服務器進行數據傳遞和服務器端內部數據流的處理時機制完全不同,前者使用網絡協議在網絡上傳輸數據最終使用Java代碼接受數據,而后者完全采用Java EE技術在服務器端的應用服務器軟件的支持下進行傳遞,見圖1.

圖1 Java Web應用底層數據傳遞模式
Java Web應用程序數據傳遞的發起始于客戶端一個瀏覽器向Web應用服務器發出請求,應用服務器把請求中需要程序處理的數據放在由服務器生成的request對象中,接著調用相應程序處理后將最終結果放在response對象中發送給客戶端的用戶瀏覽器。不斷往返的請求和響應構成了客戶端到服務器的數據傳遞。
從客戶端向服務器傳遞數據常用兩種方式。簡單的數據可以直接放在請求URL的后面加上問號接著寫上參數名等于參數值的值對。例如:請求的URL是"abc?x=1&y=2",會把x和y這兩個參數值傳遞給了URL"abc"所對應的程序代碼。在程序代碼中使用request對象的getParameter()方法即可接受到參數值。第二種方式采用表單從客戶端提交數據給服務器,在提交數據之前需先向服務器請求一個表單頁,可以把這個服務器返回的表單頁看做數據的載體,在這個載體中填好數據后,再次提交時,數據就會傳遞給表單中指明的處理程序,在程序中同樣適用request對象的getParameter()方法來取得表單中的各項數據。使用此方法取得的數據都是字符串類型,如果原始數據是基本數據類型,則要進行一次數據類型轉化。
從服務器向客戶端發送數據也有兩種形式,第一種方式中服務器中的程序會直接把最終的數據結果插入到顯示頁面上,一起作為HTML頁面響應發給瀏覽器顯示。另一種則把數據放在response對象中傳遞給頁面的JavaScript來處理。
Java Web應用程序的底層技術是Servlet,因為JSP在運行時也要轉化為Servlet,他們兩者的實質是一樣的,都需要使用URL來調用。當服務器端的程序接收客戶端的數據以后,往往不僅僅是由一個Servlet或JSP來處理,因此會在多個Servlet或JSP中進行傳遞。他們之間的數據傳遞與傳統的本地應用中直接通過函數調用時通過函數的參數來傳遞數據的形式完全不同。
首先把需要傳遞的數據通過request對象的setAttribute()方法與一個屬性名綁定保存在request對象中。然后通過語句request.getRequestDispatcher(name).forward(request, response)轉發到另一個Servlet或JSP,其中第一個括號中的參數值是轉發目標的URL。最后再在目標代碼中使用request對象getAttribute()方法通過保存時的屬性名來取得數據值。
除了以線性方式傳遞數據以外,在服務器端很多時候還需要以一種離散的方式來保存和傳遞數據。例如在一些需要用戶登錄的Web應用中,很多界面都需要顯示用戶信息,那么在第一次取得用戶信息以后,這一數據需要一直存在并多次被讀取。Java Web編程中提供了幾個對象來完成這些工作,session對象可以在一個會話即打開瀏覽器到關閉瀏覽器的整個過程中一直存在,這個對象也使用setAttribute()和getAttribute()方法來保存和取得數據。
需要注意的是,傳遞過程中數據是作為object對象類型來保存的,取得數據對象以后需要做一次強制類型轉換,將object類型對象轉換成傳遞前的對象類型。有時客戶端頁面需要展示從數據庫讀取的多行數據,或者若干的獨立的對象數據,為了方便數據的傳遞,在傳遞之前可以把數據保存在一個集合類對象中。
為了讓數據傳遞處理更加高效,在Java Web應用開發中經常使用的MVC開發模式將整個Web應用分為了Model邏輯層,View表示層和Control控制層三個部分,其中控制層的主要作用之一就是負責整個應用程序的數據傳遞。控制層的獨立把用于數據傳遞的代碼分離出來,讓數據傳遞的流程成為了應用程序的血管,同時也讓表示層和邏輯層的任務更加明確,整個Web應用構架更加清晰。
控制層的作用是從客戶端接受數據請求,然后根據請求,把客戶端數據傳遞給相關的邏輯處理代碼,待數據被邏輯層處理完畢后,再將處理完成的數據傳遞給表示層展示給客戶端用戶。控制層不僅是數據流的管道,同時也扮演這一個數據控制中心的角色,負責數據在業務邏輯和展示界面之間的調度。這樣的開發模型能讓開發者把更多的時間投入到業務邏輯和用戶體驗的設計當中。
雖然Java EE的版本不斷升級,新的框架不斷出現,但底層數據傳遞始終是開發Java Web應用中的重要一環。采用各自針對性的模式來處理客戶端到服務器的數據傳遞和服務器內部數據傳遞,在應用服務器內部選擇不同的對象來保存生命周期不同的數據,同時在開發模式中建立控制層獨立的處理數據流,不但可以讓數據傳遞流程的設計更加合理,也是Java Web應用程序運行穩定和高效的保證。
[1]馬衛華,馬滿增,劉文慧.Web應用系統設計與實現的原理[J]. 電腦編程技巧與維護,2008,15:48~49.
[2]姜宇鳴,劉瑞玲.基于MVC模式的B/S架構系統的開發與探討[J]. 科技致富向導, 2012,18:19~21.
[3]郝玉龍.Java EE編程技術[M].北京:清華大學出版社,北京交通大學出版社,2008.
[4]李 剛.瘋狂Java第二版[M].北京 :電子工業出版社,2012.
[5]鄧子云.Java Web輕量級應用開發[M]. 北京:電子工業出版社,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— ),男,湖北黃石人,碩士,實驗師,研究方向為Java Web應用、軟件工程.
TP311
A
1009-2714(2014)01- 0027- 03
10.3969/j.issn.1009-2714.2014.01.006