匡蕾 劉進(jìn)鋒
摘要:服務(wù)器端編程方式JSP和Servlet已經(jīng)成為當(dāng)今開發(fā)電子商務(wù)應(yīng)用程序的首選方式。在應(yīng)用程序中的一些復(fù)雜問題例如緩存問題、持久性問題和系統(tǒng)響應(yīng)速度問題等可以借助MVC(Model-view-Controller)架構(gòu)加以緩解。該文在分析JSP,Servlet和MVC基本原理和交互過程的基礎(chǔ)上,以電子商務(wù)中的模塊為例,利用Servlet+JSP實(shí)現(xiàn)模塊設(shè)計,MVC架構(gòu)實(shí)現(xiàn)展示層和邏輯層分離,減少了模塊與模塊之間的耦合性,在某一模塊功能發(fā)生變化的時候不會迫使其他代碼改變。
關(guān)鍵詞:電子商務(wù);Servlet;JSP;MVC框架
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)33-0265-03
1 Web開發(fā)技術(shù)概述
Web資源不再是靜態(tài)的更多的是動態(tài)的,當(dāng)請求Web資源時,必須在帶有請求參數(shù)的服務(wù)器上運(yùn)行程序并生成相應(yīng)地內(nèi)容與正在與系統(tǒng)通信的用戶進(jìn)行持續(xù)交互,這會產(chǎn)生大量的數(shù)據(jù)。這些數(shù)據(jù)的復(fù)雜性可以借助框架加以緩解,如果沒有框架程序員的大部分時間都花在編碼標(biāo)準(zhǔn)服務(wù)上,如緩存,持久性和安全性。MVC三層架構(gòu)模型的一些功能是能夠輕松存儲訪問應(yīng)用程序的數(shù)據(jù)、保證數(shù)據(jù)的完整性、會話管理、用戶認(rèn)證等操作。而服務(wù)器端編程語言有ASP.NET、JSP+Servlet,其主要功能都是向網(wǎng)站添加動態(tài)功能。JSP+Servlet技術(shù)是J2EE ( TM)平臺的基礎(chǔ),它提供Web客戶端和服務(wù)器端之間的連接,并且分離了Java代碼和HTML,對于構(gòu)建交互式Web應(yīng)用程序是非常好的選擇,并且已經(jīng)成為當(dāng)今最流行的企業(yè)應(yīng)用程序服務(wù)器端編程方式。而ASP則在小型站點(diǎn)中占主導(dǎo)地位。
2 MVC架構(gòu)介紹
MVC架構(gòu)把交互系統(tǒng)組件分為模型、視圖、控制器三種:處理應(yīng)用程序數(shù)據(jù)的模型(Service層)、呈現(xiàn)用戶界面的視圖(Web層)以及處理用戶輸入的控件(DAO層)。
1)業(yè)務(wù)邏輯層是由JavaBean、Servlet和推薦系統(tǒng)組成,JavaBean管理客戶端和服務(wù)器上運(yùn)行的數(shù)據(jù)流,并調(diào)用相對應(yīng)的方法來封裝數(shù)據(jù)。Servlet從客戶端接收數(shù)據(jù)、處理數(shù)據(jù)并將其發(fā)送到數(shù)據(jù)訪問層進(jìn)行存儲,業(yè)務(wù)邏輯層是系統(tǒng)的至關(guān)重要的一部分,擁有推薦系統(tǒng)的核心代碼。
2)表示層是Web層方面的開發(fā),Web層由html+css+js+bootstrap+JSP組成,首先由html+css+js搭建靜態(tài)頁面,接著JSP校驗(yàn)數(shù)據(jù)并把用戶信息傳給業(yè)務(wù)邏輯層。業(yè)務(wù)邏輯層的Service層將數(shù)據(jù)處理完成后呈現(xiàn)給用戶并觀察業(yè)務(wù)邏輯層進(jìn)行更新。Web層是用戶能看到的最直觀的一層。
3)數(shù)據(jù)訪問層是由大量的接口來實(shí)現(xiàn)訪問/操作數(shù)據(jù)的地方,實(shí)現(xiàn)處理數(shù)據(jù)的增刪改查,并把所有操作封裝成接口返回一個結(jié)果集供業(yè)務(wù)邏輯層調(diào)用,安全性較高。
采用MVC設(shè)計思想完成三層體系結(jié)構(gòu)實(shí)現(xiàn)展示層和邏輯層分離,使得一個模型可以具有多個顯示視圖,當(dāng)模型數(shù)據(jù)發(fā)生變化,控制器都會通知所有的視圖顯示的更新。同時實(shí)現(xiàn)了數(shù)據(jù)層與表示層的分離,在需要替換或更新某一模塊時不需要改動其他模塊。這樣一方面有助于設(shè)計在需求分析改變時可重復(fù)使用,減少再次設(shè)計的成本。另一方面減少類與類之間的耦合性,在某一模塊功能發(fā)生變化的時候不會迫使其他模塊代碼改變。
3 Servlet交互過程
Servlet 是由Sun公司提出的動態(tài)Web資源服務(wù)器開發(fā)技術(shù),Servlet通過HTTP協(xié)議與Web瀏覽器進(jìn)行信息交互,交互完成后Servlet將生成響應(yīng)返回給Web服務(wù)器。首先瀏覽器通過用戶輸入的URL訪問Web服務(wù)器的資源,Web服務(wù)器在收到HTTP請求后進(jìn)行分析:
1)分析host請求當(dāng)前請求是由哪臺虛擬主機(jī)發(fā)出的,如果沒有host請求則訪問缺省虛擬主機(jī)。
2)分析GET請求頭要訪問的是該虛擬主機(jī)的哪個Web資源。
3)在Web.xml中找到該Web資源的虛擬路徑,訪問該虛擬路徑對應(yīng)Servlet。
使用這個模型可以同時處理很多請求,而只有在第一次請求Servlet時會創(chuàng)建一個新的Servlet實(shí)例,此后無需實(shí)例化任何新對象,創(chuàng)建出Servlet對象會一直駐留在內(nèi)存中為該Servlet訪問服務(wù)。
后續(xù)訪問Servlet中的service(request,response)方法之前,確保Servlet中的初始化方法init()和代表請求的request對象、代表響應(yīng)的response對象已經(jīng)創(chuàng)建完成,request對象封裝著請求頭和請求體,但response對象此時是空的。Web瀏覽器有需要打給服務(wù)器的內(nèi)容在放在response對象中的響應(yīng)頭和響應(yīng)體中,接著服務(wù)器取出響應(yīng)頭和響應(yīng)體中的所有內(nèi)容并組織成HTTP響應(yīng)消息打給瀏覽器。瀏覽器解讀HTTP響應(yīng),根據(jù)HTTP響應(yīng)的內(nèi)容在界面上做一個展示,核心過程如圖1所示。
4 JSP技術(shù)分析
4.1 JSP技術(shù)簡介
JSP+Servlet技術(shù)是J2EE (TM)平臺的基礎(chǔ),它提供Web客戶端和服務(wù)器端程序之間的連接。Servlet是在Java中嵌套HTML其本質(zhì)上是一段Java程序,獲得了Java語言的所有優(yōu)勢包括可移植性、可重用性和崩潰保護(hù)。JSP是Servlet技術(shù)的服務(wù)器端擴(kuò)展,JSP引擎包含在Servlet引擎中,程序執(zhí)行之前JSP引擎將JSP頁面轉(zhuǎn)換/編譯為Servlet。目前JSP技術(shù)已成為創(chuàng)建動態(tài)Web網(wǎng)頁的主流開發(fā)技術(shù)之一,具有分離動態(tài)和靜態(tài)內(nèi)容、支持腳本和標(biāo)簽、跨平臺、可使用重用組件和標(biāo)簽的優(yōu)點(diǎn)。
1)分離動態(tài)和靜態(tài)內(nèi)容:JSP頁面將應(yīng)用程序邏輯與內(nèi)容呈現(xiàn)分開,帶給瀏覽器呈現(xiàn)時又可以完美結(jié)合,使設(shè)計人員在不更改底層動態(tài)內(nèi)容的情況下更改整體頁面布局,靈活性高。
2)支持腳本和標(biāo)簽:JSP技術(shù)支持基于Java腳本元素和標(biāo)簽,標(biāo)簽允許以特定的形式將任意合法的Java代碼進(jìn)行封裝。同時也可以使用自定義標(biāo)簽庫,實(shí)現(xiàn)在不嵌套Java語言的前提下仍可以運(yùn)行使用服務(wù)器端Java的功能。腳本可以在網(wǎng)頁中展示豐富的多媒體動態(tài)效果,另外JSP也可支持部分非基于Java編程的腳本語言。
3)跨平臺:JSP是完全獨(dú)立于平臺的,無論是在Web頁面、Web服務(wù)器還是底層服務(wù)器都可創(chuàng)建JSP頁面。運(yùn)行環(huán)境也是獨(dú)立的,Web服務(wù)器或啟用Web的應(yīng)用程序服務(wù)器上都可運(yùn)行,并從任何瀏覽器訪問。
4)重用組件和標(biāo)簽:組件可以用于組件開發(fā)和頁面組合,這為程序的編寫節(jié)省了大量的時間,同時為用戶提供了Java和其他腳本語言的跨平臺功能和靈活性。
4.2 JSP執(zhí)行過程
當(dāng)一個JSP頁面被客戶端訪問時,它被的JSP引擎解析、驗(yàn)證、傳譯成一個Servlet并最終執(zhí)行,其中傳譯包括將自定義標(biāo)簽轉(zhuǎn)換為Java代碼并設(shè)置腳本變量的過程。傳譯成Servlet后產(chǎn)生一個發(fā)送給客戶端瀏覽器的響應(yīng)。傳譯的過程分為三步如圖2所示:
1)JSP引擎將來自客戶端的請求request傳給JSP頁面,首次傳譯時調(diào)用JSPInit()方法來準(zhǔn)備頁面,傳譯階段通常會創(chuàng)建一個類去實(shí)現(xiàn)Javax.Servlet.Servlet接口來將JSP頁面變成Servlet源文件。
2)接著將Servlet源程序文件翻譯成相應(yīng)的.class文件,裝載執(zhí)行該.class 文件。
3)JSP頁面被傳譯成Servlet之后,JSP頁面根據(jù)給定HTTP的協(xié)議創(chuàng)建一個響應(yīng)對象或一些其他的對象來響應(yīng)客戶端。同時,JSP引擎可以隨時調(diào)用JSPDestroy()方法來回收J(rèn)SP頁面所使用的所有資源結(jié)束其生命,這與Servlets的生命周期是一樣的。
5 MVC架構(gòu)下JSP+Servlet實(shí)現(xiàn)
MVC設(shè)計思想完成Web應(yīng)用程序開發(fā)時,JavaBean和Servlet組成了業(yè)務(wù)邏輯層(Service層),JavaBean管理客戶端和服務(wù)器上運(yùn)行的數(shù)據(jù)流,并調(diào)用相對應(yīng)的方法來封裝數(shù)據(jù),Servlet從客戶端接收數(shù)據(jù)、處理數(shù)據(jù)并將其發(fā)送到數(shù)據(jù)訪問層進(jìn)行存儲。業(yè)務(wù)邏輯層是系統(tǒng)的至關(guān)重要的一部分,上有表現(xiàn)層(Web層)下有數(shù)據(jù)訪問層(DAO層),如需改變視圖則改變表示層,如需改變數(shù)據(jù)則改變數(shù)據(jù)訪問層。JSP是Web層方面的開發(fā),Web層將Service層數(shù)據(jù)呈現(xiàn)給用戶,并觀察Service層進(jìn)行更新,是用戶能看到的最直觀的一層。數(shù)據(jù)訪問層(DAO層)是由大量的接口來實(shí)現(xiàn)訪問/操作數(shù)據(jù)的地方,處理數(shù)據(jù)的增刪改查并把所有操作封裝成接口返回一個結(jié)果集供業(yè)務(wù)邏輯層調(diào)用,安全性較高,維護(hù)起來也更加方便。圖3展示了在線商城系統(tǒng)的基于 Jsp+Servlet+Java Bean 的J2EE 中 MVC 模式的實(shí)現(xiàn)過程,整個框架的作用過程為:①瀏覽器的請求被其中一個JSP接收,JSP頁面向程序流轉(zhuǎn)對應(yīng)的Servlet發(fā)送請求。②該Servlet與Java Bean進(jìn)行通信以訪問信息。③Java Bean負(fù)責(zé)信息處理,并返回處理結(jié)果到Servlet;④請求處理完成后,控制流程將轉(zhuǎn)移到的JSP頁面。
以圖4訂單模塊為例,當(dāng)用戶點(diǎn)擊購買的按鈕時訪問MVC表示層的ShopServlet中的showIndent方法,并且?guī)е脩粝胍徺I的商品的id,showIndent方法列出訂單的基本信息,要求用戶提供購買數(shù)量和支付方式如圖4,用戶點(diǎn)擊購買后把商品存到request域中,重定向到表示層,表示層的ShopServlet中g(shù)o方法進(jìn)行四步操作:
1)表示層從request域中拿出訂單號+下單用戶名+下單圖書+下單時間+評論等需要插入indent表中的值。其中訂單金額不能從域中直接獲取到,需要go方法根據(jù)訂單單價*數(shù)量doublesum= Double.valueOf(bookPrice)*Integer.valueOf(num);實(shí)時計算出來。
2)把訂單號+下單用戶名+下單圖書+下單時間+評論+訂單金額這些信息,調(diào)用表示層中的IndentService方法插入到數(shù)據(jù)庫,并從book表中扣除相對應(yīng)的庫存數(shù)量。
3)IndentService調(diào)用數(shù)據(jù)訪問層的IndentDao的方法,對數(shù)據(jù)庫的Indent表和book表進(jìn)行操作,且采用事務(wù)管理的方式,讓兩步操作處在同一個事務(wù)里面,事務(wù)具有原子性不可分割要么同時完成要么同時不完成,有一步操作中斷全部事務(wù)回滾。
4)重定向回表示層。理想情況下用戶不應(yīng)該直接訪問JSP頁面,請求直接發(fā)送到Servlet。該Servlet負(fù)責(zé)處理請求的實(shí)際處理,然后將該控制轉(zhuǎn)移到適當(dāng)?shù)腏SP頁面。 JSP頁面然后將顯示對用戶的響應(yīng),隨后的請求在用戶填寫表單并單擊提交按鈕之后再次被引導(dǎo)到一個Servlet進(jìn)行處理。系統(tǒng)的用戶根本不應(yīng)該知道任何JSP頁面的存在。
6 結(jié)束語
本文采用 JSP+Servlet的MVC三層架構(gòu)技術(shù),實(shí)現(xiàn)了視圖層、邏輯層、數(shù)據(jù)層的分離,使得系統(tǒng)具有良好的擴(kuò)展性,減少了類與類之間的耦合性。Servlet可訪問調(diào)用HTTP的庫,對于構(gòu)建交互式Web應(yīng)用程序是非常好的選擇。JSP具有分離動態(tài)和靜態(tài)內(nèi)容,支持腳本和標(biāo)簽,跨平臺,可使用重用組件和標(biāo)簽的優(yōu)點(diǎn)。因此,有利于大型項(xiàng)目開發(fā)管理。
參考文獻(xiàn):
[1] 孫衛(wèi)琴. Tomcat 與 Java Web 開發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2010.
[2] 王文新.基于模型-視圖-控制器的 Web 應(yīng)用程序框架設(shè)計[J].信息與電子工程,2009,7(4):358-360.
[3] 王棟.一種簡易 Web 服務(wù)器的設(shè)計與實(shí)現(xiàn)[J].電子科技,2016,29(1) : 121-123.
[4] 李莉,高峰.WEB Service 技術(shù)綜述[J]. 信息系統(tǒng)工程,2014(1) : 36.
[5] 胡輝. IOS 環(huán)境下使用 MVC 模式進(jìn)行 APP 開發(fā)的設(shè)計思路探索[J].數(shù)字技術(shù)與應(yīng)用,2015(6) : 204-206.
[6] 梁弼.基于MVC 的高??蒲谐晒芾硐到y(tǒng)的設(shè)計與實(shí)現(xiàn)[J].計算機(jī)技術(shù)與發(fā)展,2011,21( 10) : 161 -163.
[7] 馮玉萍. 基于MVC的設(shè)計與開發(fā)[J].科技風(fēng),2010(5):25.
[8] 張志瑜. 論述PHP實(shí)現(xiàn)MVC框架[J].科技視界,2016(13):218-219.
【通聯(lián)編輯:代影】