岳紹敏+王國春+董亞則+成錦暉
摘要:傳統(tǒng)的電子商務(wù)網(wǎng)站的開發(fā)周期比較長,而且運(yùn)營之后經(jīng)常出現(xiàn)難以擴(kuò)展、可維護(hù)性不高等問題。論文對(duì)Spring MVC進(jìn)行了深入的研究,并基于它來構(gòu)建了一個(gè)電子商務(wù)網(wǎng)站,使得電商網(wǎng)站具有良好的框架結(jié)構(gòu),對(duì)以后的維護(hù)和擴(kuò)展工作提供了方便。
關(guān)鍵詞:spring MVC;estore;電子商務(wù);freemarker
中圖分類號(hào):TP39 文獻(xiàn)標(biāo)識(shí)碼:A
The Research and Design of Electric Business Platform Based on Spring MVC Framework
YUE Shaomin,WANG Guochun,DONG Yaze,CHENG Jinhui
(College of Computer Science and Engineering,Changchun University of Technology,Changchun 130012,China)
Abstract:Traditional development cycle of ecommerce website is long.And it is difficult to extend,low maintainability after operation usually.Paper makes a deep study of Spring MVC,and based on which builds an ecommerce site,which makes ecommerce sites have good frame structure,and convenience is provided for future maintenance and extension work.
Keywords:spring MVC;estore;electronic commerce;freemarker
1 引言(Introduction)
隨著互聯(lián)網(wǎng)寬帶技術(shù)應(yīng)用的成熟,以及物流和支付系統(tǒng)的完善,電子商務(wù)成為互聯(lián)網(wǎng)普及應(yīng)用的主流,影響著千家萬戶的生活和經(jīng)濟(jì)行為,并日益成為社會(huì)商業(yè)活動(dòng)的重要形式。因此,各行業(yè)均希望可以快速展開網(wǎng)上營銷渠道。新形式下,電商網(wǎng)站開發(fā)人員如何縮短開發(fā)周期,進(jìn)一步提高工作效率,是每一個(gè)程序員所面臨的問題。各大WEB框架的出現(xiàn),使得電商網(wǎng)站服務(wù)器端邏輯的設(shè)計(jì)非常便利,利用它進(jìn)行網(wǎng)站的開發(fā),可以節(jié)省很多的時(shí)間和精力。本文基于Spring MVC來構(gòu)建一個(gè)電子商務(wù)網(wǎng)站,希望可以對(duì)讀者學(xué)習(xí)和使用Spring MVC建站產(chǎn)生一些幫助。
2 網(wǎng)上電商平臺(tái)Estore(Online electric business
platform estore)
2.1 Estore簡(jiǎn)介
Estore是采用Java技術(shù)設(shè)計(jì)開發(fā)的網(wǎng)上電子商務(wù)平臺(tái),采用了Spring MVC3、Hibernate3和Freemarker相結(jié)合的技術(shù)架構(gòu)。繼承了Java高效、跨平臺(tái)、穩(wěn)定且安全等多方面的優(yōu)點(diǎn)[1],能夠支持Oracle、Sqlserver、Mysql等數(shù)據(jù)庫,統(tǒng)一在后臺(tái)管理網(wǎng)站的模板,用戶可利用標(biāo)簽自定義顯示內(nèi)容和方式。
2.2 Estore的運(yùn)行環(huán)境
Estore原則上支持全系列JAVA運(yùn)行環(huán)境、數(shù)據(jù)庫,主要使用以下環(huán)境:
(1)WEB服務(wù)器:Weblogic、Tomcat、WebSphere、JBoss等。
(2)數(shù)據(jù)庫服務(wù)器:Oracle、Mysql、SqlServer、DB2等。
(3)操作系統(tǒng):Windows、Linux、Unix等。
3 基于Spring MVC的電商平臺(tái)的設(shè)計(jì)與開發(fā)
(The design and development of electric business
platform based on the spring MVC )
3.1 Spring MVC簡(jiǎn)介
3.1.1 Spring MVC架構(gòu)
Spring MVC的整體架構(gòu)如圖1所示[2],視圖層采用Html或Jsp實(shí)現(xiàn);控制層采用Servlet實(shí)現(xiàn),整個(gè)框架采用同一個(gè)Servlet,以實(shí)現(xiàn)請(qǐng)求的中轉(zhuǎn);模型層采用Java實(shí)現(xiàn),主要決定用來做什么;在模型層后面添加了一個(gè)DAO,目的是將決定做什么和具體怎么做分開。
圖1 Spring MVC的架構(gòu)
Fig.1 The architecture of spring MVC
整個(gè)Web框架大致的流程是:首先客戶端發(fā)送請(qǐng)求,提交Html或Jsp頁面給中轉(zhuǎn)器(Servlet);中轉(zhuǎn)器按照客戶的請(qǐng)求,選擇相應(yīng)的模型層,即Logic進(jìn)行相應(yīng)的邏輯處理;如果需要使用數(shù)據(jù)庫,則通過DAO進(jìn)行相應(yīng)的數(shù)據(jù)庫操作。
3.1.2 Spring MVC重要組件
圖2 Spring MVC的組件
Fig.2 The component of spring MVC
Spring MVC的組件如圖2所示[3]。
(1)Spring MVC將所有的請(qǐng)求都提交給DispatcherServlet,它會(huì)委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)對(duì)請(qǐng)求進(jìn)行真正的處理工作。
(2)DispatcherServlet查詢一個(gè)或多個(gè)HandlerMapping,找到處理請(qǐng)求的Controller。
(3)DispatcherServlet把請(qǐng)求提交到目標(biāo)Controller。
(4)Controller進(jìn)行業(yè)務(wù)邏輯處理后,會(huì)返回一個(gè)ModelAndView。
(5)Dispathcher查詢一個(gè)或多個(gè)ViewResolver視圖解析器,找到ModelAndView對(duì)象指定的視圖對(duì)象。
(6)視圖對(duì)象負(fù)責(zé)渲染并返回給客戶端。
3.2 Hibernate框架
3.2.1 Hibernate簡(jiǎn)介
Hibernate是一個(gè)開源免費(fèi)的Java包,它使得程序與數(shù)據(jù)庫的交互變得十分容易,更加符合面向?qū)ο蟮脑O(shè)計(jì)思想[4]。Hibernate使開發(fā)者可以專注于應(yīng)用程序的對(duì)象和功能,而不用關(guān)心如何保存它們或查找這些對(duì)象。
在對(duì)SQL語句完全不了解的情況下,使用Hibernate仍然可以開發(fā)出優(yōu)秀的包含數(shù)據(jù)庫訪問的應(yīng)用程序。
3.2.2 Hibernate運(yùn)行過程
圖3 Hibernate運(yùn)行過程
Fig.3 The running process of hibernate
Hibernate的運(yùn)行過程如圖3所示。
應(yīng)用程序先調(diào)用Configuration類,該類讀取Hibernate配置文件及映射文件中的信息,并用這些信息生成一個(gè)SessionFactory對(duì)象,然后從SessionFactory對(duì)象生成一個(gè)Session對(duì)象,并用Session對(duì)象生成Transaction對(duì)象??赏ㄟ^Session對(duì)象的get()、load()、save()、update()、delete()和saveOrUpdate()等方法對(duì)PO(persistent object持久對(duì)象)進(jìn)行加載、保存、更新、刪除等操作。
在查詢的情況下,可通過Session對(duì)象生成一個(gè)Query對(duì)象,然后利用Query對(duì)象執(zhí)行查詢操作:如果沒有異常,Transaction對(duì)象將提交這些操作到數(shù)據(jù)庫中;如果有異常,則執(zhí)行回滾操作。
endprint
3.3 Freemarker簡(jiǎn)介
FreeMarker是一個(gè)模板引擎[5],它由Java語言編寫而成,基于模板來生成文本輸出。FreeMarker與Web容器沒有關(guān)系,即Web運(yùn)行時(shí),并不知道HTTP或Servlet。它不僅能夠用于表現(xiàn)層的實(shí)現(xiàn),而且還可以用于生成Xml、Jsp或Java等。FreeMarker允許Java servlet保持圖形設(shè)計(jì)與應(yīng)用程序邏輯的分離,這是通過在模板中封裝Html完成的。模板用Servlet提供的數(shù)據(jù)動(dòng)態(tài)地生成Html。模板語言是直觀且強(qiáng)大的,編譯器的速度快,輸出接近靜態(tài)HTML頁面的速度。
雖然FreeMarker具有一些編程的能力,但通常由Java程序負(fù)責(zé)要顯示的數(shù)據(jù),由FreeMarker生成頁面,通過模板來顯示數(shù)據(jù)。
下面是用Freemarker來做的一個(gè)顯示頁面:
3.4 按Spring MVC框架分層設(shè)計(jì)電商平臺(tái)
3.4.1 Dao層
Dao層分析模塊所要涉及的表,確定表之間的關(guān)系,編寫Hibernate Mapping文件和持久化類,它使用Hibernate連接數(shù)據(jù)庫、操作數(shù)據(jù)庫(增刪改查)。根據(jù)模塊需要的各種持久化操作,確定對(duì)應(yīng)的方法,據(jù)此來編寫Dao接口和實(shí)現(xiàn)類。
3.4.2 Entity層
Entity層是實(shí)體類層,也屬于MVC中的model層,它的主要功能是把用戶提交過來的參數(shù)封裝成一個(gè)對(duì)象給Dao層也就是Hibernate操作。
3.4.3 Service層
引用對(duì)應(yīng)的Dao數(shù)據(jù)庫操作,在這里可以編寫自己需要的代碼(比如簡(jiǎn)單的判斷、校驗(yàn)等操作)。
3.4.4 Action層
引用對(duì)應(yīng)的Service層,在這里依據(jù)配置文件,跳轉(zhuǎn)到指定的頁面,當(dāng)然也能接受頁面?zhèn)鬟f的請(qǐng)求數(shù)據(jù),也可以做些計(jì)算處理。
3.4.5 顯示層
一個(gè)或多個(gè)HTML頁面為模型提供數(shù)據(jù)顯示,HTML頁面主要使用HTML標(biāo)記和Freemarker標(biāo)簽來顯示數(shù)據(jù)。
綜上所述,各層之間的關(guān)系為:action調(diào)用service中的方法,service調(diào)用dao中的方法,調(diào)用時(shí)的參數(shù)使用entity傳遞,最后把結(jié)果顯示在HTML界面,以響應(yīng)用戶請(qǐng)求。
4 Estore的個(gè)性化功能(Personalization capabilities
of estore )
4.1 Estore標(biāo)簽的執(zhí)行流程
標(biāo)簽是Estore中的一個(gè)重要概念,利用它可以執(zhí)行許多操作,比如對(duì)搜索結(jié)果分頁、獲得商品品牌的列表、獲得商品子欄目的列表等,它的執(zhí)行流程如下:
(1)訪問某個(gè)頁面(如:頁頭導(dǎo)航欄.html),瀏覽器執(zhí)行解析代碼,執(zhí)行到標(biāo)簽時(shí)跳轉(zhuǎn)到后臺(tái)estore-context.xml文件。
(2)estore-context.xml文件中,假如有
(3)到后臺(tái)執(zhí)行CategoryListDirective類中默認(rèn)方法execute(如:[@shop_Category parentId=category.id],參數(shù):父類別ID parentId)。
(4)CategoryListDirective類鏈接數(shù)據(jù)庫,獲取目標(biāo)數(shù)據(jù)并放入Map集合:
如:Map
(5)將獲取的目標(biāo)數(shù)據(jù)返回給前臺(tái),通過標(biāo)簽展示:
[@shop_Category]
[#list tag_list as ctg]
[/#list]
[/@shop_Category]
4.2 制作“商業(yè)廣告位”
一幅色彩絢麗、形象生動(dòng)的廣告作品,能以其非同凡響的美感力量增強(qiáng)廣告的感染力,使消費(fèi)者沉浸在商品和服務(wù)形象給予的愉悅中,使其自覺接受廣告的引導(dǎo)。在Estore平臺(tái)上,可以為網(wǎng)站的首頁添加一個(gè)“商業(yè)廣告位”,具體步驟如下:
(1)在系統(tǒng)后臺(tái)的“輔助”中的菜單“廣告版位”,添加一個(gè)“版位”,(如:頁中廣告)。
注意:記錄下此時(shí)的“ID”(如ID=6)。
(2)“廣告管理”中,修改“頁中廣告”,選擇圖片之后,改一下圖片地址,去掉“/u”(如:把‘/u/201403/231829044ug5.jpg變?yōu)椤?201403/231829044ug5.jpg)。
(3)在“WEB-INF store plinclude”下,新建文件“頁中廣告位.html”,內(nèi)容如下:
注意:此處的ID,其值取自第(1)步中的ID。
(4)在“首頁”相應(yīng)的廣告位置,加入如下語句:[#include "../include/頁中廣告位.html"/]。
至此,即在網(wǎng)站首頁添加了一個(gè)“商業(yè)廣告位”,根據(jù)客戶的需求,只需要更改后臺(tái)的廣告圖片,即可在網(wǎng)站首頁看到客戶的廣告宣傳。
4.3 Estore的后臺(tái)處理流程
當(dāng)用戶剛接觸Estore時(shí),可能對(duì)其后臺(tái)的處理流程有點(diǎn)頭痛,不知道應(yīng)該如何學(xué)習(xí),常常會(huì)感覺到無從下手,本文以訪問后臺(tái)的主界面為例,特在此做出一個(gè)簡(jiǎn)要的介紹,用戶可以按照以下步驟來了解其處理過程:
(1)用戶查看瀏覽器端的訪問請(qǐng)求路徑,看要訪問資源的后綴名,如“http://localhost:8080/storeOracle/eadmin/estore/index.do”的后綴名為“*.do”。
注意:“eadmin/estore/”是虛擬訪問路徑,它在web.xml中設(shè)置。
(2)web.xml文件的重要標(biāo)簽:
注意:①因?yàn)閿U(kuò)展名為“.do”,所以找到值為“/eadmin/estore/*”的
②“eadmin/estore/”是虛擬訪問路徑,在此處設(shè)置。
(3)去所有的action文件里找到相應(yīng)“@RequestMapping”的value等于“index.do”的方法,看該方法返回什么字符串(如:“l(fā)ogin”)。
(4)去estore-servlet-admin.xml中找到id="freemarkerViewResolver"的bean,該bean中name分別為“prefix”、“suffix”的
(5)登錄頁login.html會(huì)向名叫“index.do”的action發(fā)送請(qǐng)求,按照步驟(3)和(4)操作后,可以直接訪問文件“/estore_sys/index.html”。
(6)文件“/estore_sys/index.html”里嵌套有“主體框架”:
(7)在main.html里,又有左右兩部分frame:
至此,Estore系統(tǒng)后臺(tái)的主界面全部形成。
5 結(jié)論(Conclusion)
通過研究可以證明,利用Spring MVC可以快速地開發(fā)一個(gè)具有良好架構(gòu)的電子商務(wù)網(wǎng)站,并且易于維護(hù)、支持?jǐn)U展,這大大地提高了建站的效率,節(jié)省了大量的時(shí)間和精力。同時(shí),電子商務(wù)網(wǎng)站的開發(fā)還應(yīng)考慮安全支付、快速物流等問題,這是今后需要研究的對(duì)象。
參考文獻(xiàn)(References)
[1] Java 2 Platform,Enterprise Edition Specification Version l.2[EB/0L].http://java.sun.com/J2ee/docus.Htm,2014-05-23.
[2] 陸榮幸,等.J2EE平臺(tái)上MVC設(shè)計(jì)模式的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2003,3:144-146.
[3] 何成萬,余秋惠.MVC模型2及軟件框架Struts的研究[J].計(jì)算機(jī)工程,2002,6:274-281.
[4] 高昂,衛(wèi)文學(xué).基于Hibernate與Struts框架的數(shù)據(jù)持久化應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用,2005,12:2817-2820.
[5] 冷威龍.Freemarker[EB/OL].http://baike.baidu.com/view/1278430.htm,2014-05-23.
作者簡(jiǎn)介:
岳紹敏(1988-),男,碩士研究生在讀.研究領(lǐng)域:智能系統(tǒng).
王國春(1978-),男,碩士,講師.研究領(lǐng)域:軟件工程與智能系統(tǒng).
董亞則(1982-),女,碩士,講師.研究領(lǐng)域:軟件工程.
成錦暉(1989-),男,碩士研究生在讀.研究領(lǐng)域:軟件工程,智能計(jì)算.
注意:此處的ID,其值取自第(1)步中的ID。
(4)在“首頁”相應(yīng)的廣告位置,加入如下語句:[#include "../include/頁中廣告位.html"/]。
至此,即在網(wǎng)站首頁添加了一個(gè)“商業(yè)廣告位”,根據(jù)客戶的需求,只需要更改后臺(tái)的廣告圖片,即可在網(wǎng)站首頁看到客戶的廣告宣傳。
4.3 Estore的后臺(tái)處理流程
當(dāng)用戶剛接觸Estore時(shí),可能對(duì)其后臺(tái)的處理流程有點(diǎn)頭痛,不知道應(yīng)該如何學(xué)習(xí),常常會(huì)感覺到無從下手,本文以訪問后臺(tái)的主界面為例,特在此做出一個(gè)簡(jiǎn)要的介紹,用戶可以按照以下步驟來了解其處理過程:
(1)用戶查看瀏覽器端的訪問請(qǐng)求路徑,看要訪問資源的后綴名,如“http://localhost:8080/storeOracle/eadmin/estore/index.do”的后綴名為“*.do”。
注意:“eadmin/estore/”是虛擬訪問路徑,它在web.xml中設(shè)置。
(2)web.xml文件的重要標(biāo)簽:
注意:①因?yàn)閿U(kuò)展名為“.do”,所以找到值為“/eadmin/estore/*”的
②“eadmin/estore/”是虛擬訪問路徑,在此處設(shè)置。
(3)去所有的action文件里找到相應(yīng)“@RequestMapping”的value等于“index.do”的方法,看該方法返回什么字符串(如:“l(fā)ogin”)。
(4)去estore-servlet-admin.xml中找到id="freemarkerViewResolver"的bean,該bean中name分別為“prefix”、“suffix”的
(5)登錄頁login.html會(huì)向名叫“index.do”的action發(fā)送請(qǐng)求,按照步驟(3)和(4)操作后,可以直接訪問文件“/estore_sys/index.html”。
(6)文件“/estore_sys/index.html”里嵌套有“主體框架”:
(7)在main.html里,又有左右兩部分frame:
至此,Estore系統(tǒng)后臺(tái)的主界面全部形成。
5 結(jié)論(Conclusion)
通過研究可以證明,利用Spring MVC可以快速地開發(fā)一個(gè)具有良好架構(gòu)的電子商務(wù)網(wǎng)站,并且易于維護(hù)、支持?jǐn)U展,這大大地提高了建站的效率,節(jié)省了大量的時(shí)間和精力。同時(shí),電子商務(wù)網(wǎng)站的開發(fā)還應(yīng)考慮安全支付、快速物流等問題,這是今后需要研究的對(duì)象。
參考文獻(xiàn)(References)
[1] Java 2 Platform,Enterprise Edition Specification Version l.2[EB/0L].http://java.sun.com/J2ee/docus.Htm,2014-05-23.
[2] 陸榮幸,等.J2EE平臺(tái)上MVC設(shè)計(jì)模式的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2003,3:144-146.
[3] 何成萬,余秋惠.MVC模型2及軟件框架Struts的研究[J].計(jì)算機(jī)工程,2002,6:274-281.
[4] 高昂,衛(wèi)文學(xué).基于Hibernate與Struts框架的數(shù)據(jù)持久化應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用,2005,12:2817-2820.
[5] 冷威龍.Freemarker[EB/OL].http://baike.baidu.com/view/1278430.htm,2014-05-23.
作者簡(jiǎn)介:
岳紹敏(1988-),男,碩士研究生在讀.研究領(lǐng)域:智能系統(tǒng).
王國春(1978-),男,碩士,講師.研究領(lǐng)域:軟件工程與智能系統(tǒng).
董亞則(1982-),女,碩士,講師.研究領(lǐng)域:軟件工程.
成錦暉(1989-),男,碩士研究生在讀.研究領(lǐng)域:軟件工程,智能計(jì)算.
注意:此處的ID,其值取自第(1)步中的ID。
(4)在“首頁”相應(yīng)的廣告位置,加入如下語句:[#include "../include/頁中廣告位.html"/]。
至此,即在網(wǎng)站首頁添加了一個(gè)“商業(yè)廣告位”,根據(jù)客戶的需求,只需要更改后臺(tái)的廣告圖片,即可在網(wǎng)站首頁看到客戶的廣告宣傳。
4.3 Estore的后臺(tái)處理流程
當(dāng)用戶剛接觸Estore時(shí),可能對(duì)其后臺(tái)的處理流程有點(diǎn)頭痛,不知道應(yīng)該如何學(xué)習(xí),常常會(huì)感覺到無從下手,本文以訪問后臺(tái)的主界面為例,特在此做出一個(gè)簡(jiǎn)要的介紹,用戶可以按照以下步驟來了解其處理過程:
(1)用戶查看瀏覽器端的訪問請(qǐng)求路徑,看要訪問資源的后綴名,如“http://localhost:8080/storeOracle/eadmin/estore/index.do”的后綴名為“*.do”。
注意:“eadmin/estore/”是虛擬訪問路徑,它在web.xml中設(shè)置。
(2)web.xml文件的重要標(biāo)簽:
注意:①因?yàn)閿U(kuò)展名為“.do”,所以找到值為“/eadmin/estore/*”的
②“eadmin/estore/”是虛擬訪問路徑,在此處設(shè)置。
(3)去所有的action文件里找到相應(yīng)“@RequestMapping”的value等于“index.do”的方法,看該方法返回什么字符串(如:“l(fā)ogin”)。
(4)去estore-servlet-admin.xml中找到id="freemarkerViewResolver"的bean,該bean中name分別為“prefix”、“suffix”的
(5)登錄頁login.html會(huì)向名叫“index.do”的action發(fā)送請(qǐng)求,按照步驟(3)和(4)操作后,可以直接訪問文件“/estore_sys/index.html”。
(6)文件“/estore_sys/index.html”里嵌套有“主體框架”:
(7)在main.html里,又有左右兩部分frame:
至此,Estore系統(tǒng)后臺(tái)的主界面全部形成。
5 結(jié)論(Conclusion)
通過研究可以證明,利用Spring MVC可以快速地開發(fā)一個(gè)具有良好架構(gòu)的電子商務(wù)網(wǎng)站,并且易于維護(hù)、支持?jǐn)U展,這大大地提高了建站的效率,節(jié)省了大量的時(shí)間和精力。同時(shí),電子商務(wù)網(wǎng)站的開發(fā)還應(yīng)考慮安全支付、快速物流等問題,這是今后需要研究的對(duì)象。
參考文獻(xiàn)(References)
[1] Java 2 Platform,Enterprise Edition Specification Version l.2[EB/0L].http://java.sun.com/J2ee/docus.Htm,2014-05-23.
[2] 陸榮幸,等.J2EE平臺(tái)上MVC設(shè)計(jì)模式的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2003,3:144-146.
[3] 何成萬,余秋惠.MVC模型2及軟件框架Struts的研究[J].計(jì)算機(jī)工程,2002,6:274-281.
[4] 高昂,衛(wèi)文學(xué).基于Hibernate與Struts框架的數(shù)據(jù)持久化應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用,2005,12:2817-2820.
[5] 冷威龍.Freemarker[EB/OL].http://baike.baidu.com/view/1278430.htm,2014-05-23.
作者簡(jiǎn)介:
岳紹敏(1988-),男,碩士研究生在讀.研究領(lǐng)域:智能系統(tǒng).
王國春(1978-),男,碩士,講師.研究領(lǐng)域:軟件工程與智能系統(tǒng).
董亞則(1982-),女,碩士,講師.研究領(lǐng)域:軟件工程.
成錦暉(1989-),男,碩士研究生在讀.研究領(lǐng)域:軟件工程,智能計(jì)算.