国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于J2EE網(wǎng)絡(luò)超市平臺建設(shè)中的框架應(yīng)用與設(shè)計

2010-04-11 01:04王紅艷朱全銀沈建春施曉春
淮陰工學院學報 2010年5期
關(guān)鍵詞:代碼頁面框架

王紅艷,朱全銀,沈建春,施曉春

(淮陰工學院計算機工程學院,江蘇淮安223003)

0 引言

在發(fā)達國家,技術(shù)服務(wù)體系建設(shè)是政府公共服務(wù)的基本國策之一。隨著中國經(jīng)濟與社會的進步與發(fā)展,政府的服務(wù)能力加強,各級各類部門都在為行業(yè)或產(chǎn)業(yè)提供相關(guān)的服務(wù)。江蘇省政府就大力支持并建設(shè)了國家級科技服務(wù)平臺2個,省級科技服務(wù)平臺46個,這些科技服務(wù)體系為江蘇省科學技術(shù)與經(jīng)濟發(fā)展起到了非常重要的作用。而面向特色產(chǎn)業(yè)的科技網(wǎng)絡(luò)超市,國內(nèi)很多省份都有相關(guān)的政府投資與政策扶持,如農(nóng)業(yè)科技相關(guān)的服務(wù)超市就非常普及。目前,江蘇省著力打造為民服務(wù)的特色產(chǎn)業(yè)技術(shù)服務(wù)網(wǎng)絡(luò)超市,正是代表著國內(nèi)相關(guān)科技創(chuàng)新服務(wù)體系建設(shè)的新趨勢。

隨著互聯(lián)網(wǎng)技術(shù)的進一步發(fā)展和普及,電子商務(wù)也已經(jīng)變得非常成熟,在B2B的領(lǐng)域中要有兩大技術(shù)體系:基于J2 EE的網(wǎng)絡(luò)開發(fā)和基于.NET的網(wǎng)絡(luò)開發(fā)。J2EE以其開放性、靈活性、安全性和技術(shù)成熟度在企業(yè)級電子商務(wù)系統(tǒng)的開發(fā)中占據(jù)了重要的地位,例如著名的阿里巴巴,因此J2EE技術(shù)以它安全、高效以及可移植性得到了越來越廣泛的應(yīng)用和支持。

1 機械電子產(chǎn)業(yè)的現(xiàn)狀及設(shè)計目標分析

1.1 系統(tǒng)現(xiàn)狀分析

1.1.1 產(chǎn)用傳統(tǒng)營銷模式

傳統(tǒng)市場營銷策略是由邁卡錫教授提出的4P組合,即產(chǎn)品、價格、渠道和促進。這種理論的出發(fā)點是企業(yè)的利潤,而沒有將顧客的需求放到與企業(yè)的利潤同等重要的地位上來。在傳統(tǒng)營銷模式中,制造商生產(chǎn)出成品后往往通過制造商→批發(fā)商→零售商→消費者的營銷渠道對外銷售產(chǎn)品,產(chǎn)品一般需要經(jīng)歷好幾個環(huán)節(jié)才能到達消費者手中,這樣冗長的供應(yīng)鏈不僅降低了產(chǎn)品的時效性,而且增加了產(chǎn)品的成本。傳統(tǒng)營銷的本質(zhì)就是借助市場了解客戶需求,然后生產(chǎn)出他們需要的產(chǎn)品。傳統(tǒng)營銷的特點:①服務(wù)思想急待提升,服務(wù)體系不完整;②服務(wù)流程長,服務(wù)效果差;③一線服務(wù)缺乏力度,整體服務(wù)形象不醒目[1]。

1.1.2 綜合性服務(wù)平臺

目前,信息化日益成熟,各行各業(yè)都在做的信息化技術(shù)的變革,但是我國大多數(shù)企業(yè)信息化程度還是不夠。在技術(shù)信息、咨詢、開發(fā)、試驗、推廣以及產(chǎn)品研制、設(shè)計、加工、檢測等方面沒有得到相互的支持導(dǎo)致資源嚴重浪費。同樣,企業(yè)的服務(wù)支持也存在著問題,服務(wù)支持能夠很好的為客戶與其他企業(yè)提供幫助,能夠為企業(yè)和庫戶建立良好的信息通道。

1.2 平臺系統(tǒng)分析

基于 J2EE(Java 2 Platform,Enterprise Edition)規(guī)范,采用MVC分層設(shè)計思想,同時加入國際上使用比較廣泛的軟件框架,即:數(shù)據(jù)層的Hibernate框架、控制層的 Struts框架、業(yè)務(wù)層的Spring框架與顯示層的JQuery框架,為平臺開發(fā)提供了一整套合理的解決方案,不僅使得系統(tǒng)的開發(fā)變得更加便捷和高效,而且降低了維護系統(tǒng)的難度和成本。系統(tǒng)的前臺采用WEB2.0設(shè)計風格,同時局部采用AJAX異步傳輸模式,使得用戶的使用體驗有了較大程度的提高。此外平臺從語言環(huán)境到軟件配置,所有環(huán)節(jié)都是跨平臺、跨操作系統(tǒng)的,這種開發(fā)方式可以使得系統(tǒng)具有更高的可配置性與兼容性。

1.3 設(shè)計目標的關(guān)鍵問題分析

機械電子特色產(chǎn)業(yè)科技服務(wù)超市(平臺)的設(shè)計涉及五個方面的問題。

1.3.1 客戶端設(shè)計

客戶端的設(shè)計主要是針對系統(tǒng)界面的設(shè)計,是用戶接觸的入口點,界面的親和力、友好程度會直接影響用戶瀏覽系統(tǒng)時的感受。另外客戶端的設(shè)計還要方便用戶操作,盡量滿足客戶的瀏覽需求。

1.3.2 服務(wù)器端設(shè)計

對于服務(wù)器端來說,穩(wěn)定性,可維護性和安全性是最重要的三個要素,而這些都取決于程序設(shè)計的框架,選取合適的框架技術(shù)來搭建服務(wù)器就成為了問題的核心。

1.3.3 數(shù)據(jù)庫設(shè)計

數(shù)據(jù)庫的選擇將直接影響系統(tǒng)處理數(shù)據(jù)的效率,根據(jù)用戶的數(shù)量和并發(fā)量選取合適的數(shù)據(jù)庫技術(shù)是服務(wù)器高效工作的關(guān)鍵因素之一,同時也需要考慮到安全方面和效率方面等多個因素。

1.3.4 系統(tǒng)運行效率

系統(tǒng)運行和響應(yīng)時間直接影響到用戶的感受,因此,一個網(wǎng)站的訪問量和受歡迎程度也大致取決于此。所以,必須設(shè)計高效的信息處理算法并保證客戶端與服務(wù)器端網(wǎng)絡(luò)性能。

1.3.5 系統(tǒng)內(nèi)部搜索效率

作為一個B2B的應(yīng)用系統(tǒng)除了提供較快的訪問速度外還需提供一個速度快并且效率高的產(chǎn)品搜索功能。在用戶查詢產(chǎn)品時,能夠高效的查詢到相關(guān)的產(chǎn)品信息,這樣才能提高平臺的可操作性和用戶訪問量[2]。

1.4 關(guān)鍵技術(shù)及復(fù)雜性分析

對于1.3中所述的問題,相應(yīng)的技術(shù)解決方案有:

1.4.1 J2EE 技術(shù)

J2EE是一種利用Java 2平臺來簡化和完善企業(yè)級的開發(fā)、部署和管理相關(guān)復(fù)雜問題的一個體系方案。方便數(shù)據(jù)庫存取的JDBC API、CORBA技術(shù)以及能夠在Internet應(yīng)用中保護數(shù)據(jù)的安全模式等,同時更全面的提供了對EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技術(shù)的全面支持。其最終目的就是成為一個能夠使企業(yè)開發(fā)者大幅縮短投放市場時間的體系結(jié)構(gòu)。J2EE體系結(jié)構(gòu)提供很多中間層的集成框架用來滿足無需太多費用而又需要高可用性、高安全性以及可擴展性的應(yīng)用的需求。通過提供一個的統(tǒng)一的方案平臺,J2EE降低了開發(fā)系統(tǒng)時的復(fù)雜度,同時提供對現(xiàn)有應(yīng)用程序集成強有力支持,有良好的向?qū)еС执虬筒渴饝?yīng)用,添加目錄支持,增強了安全機制,提高了系統(tǒng)性能[3]。

1.4.2 Unified Modeling Language(UML,統(tǒng)一建模語言)

UML(Unified Modeling Language,統(tǒng)一建模語言)是用來對軟件開發(fā)系統(tǒng)進行可視化建模的一種語言。UML為面向?qū)ο箝_發(fā)系統(tǒng)的產(chǎn)品進行說明、可視化和編制文檔的一種標準語言。UML最適于數(shù)據(jù)建模,業(yè)務(wù)建模,對象建模,組件建模。UML作為一種模型語言,它使開發(fā)人員專注于建立產(chǎn)品的模型和結(jié)構(gòu),而不是選用什么程序語言和算法實現(xiàn)。當模型建立之后,模型可以被UML工具轉(zhuǎn)化成指定的程序語言代碼[4]。

1.4.3 MVC 與 Struts2 框架

MVC(Model-View -Controller),即把一個應(yīng)用的輸入、處理、輸出流程按照 Model、View、Controller的方式進行分離,這樣一個應(yīng)用被分成三個層——模型層、視圖層、控制層。MVC減弱了業(yè)務(wù)邏輯接口和數(shù)據(jù)接口之間的耦合,讓視圖層更富于變化。Struts2是MVC的一種實現(xiàn),它將Servlet和JSP標記用作實現(xiàn)的一部分。Struts2的目的是為了幫助開發(fā)人員減少在運用MVC設(shè)計模型來開發(fā)Web應(yīng)用的時間。開發(fā)人員仍然需要學習和應(yīng)用該架構(gòu),不過Struts2可以完成其中Web開發(fā)中一些繁重的工作[5]。

1.4.4 Hibernate 框架

Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程操縱數(shù)據(jù)庫。Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用。Hibernate不但方便了程序員對數(shù)據(jù)庫的操作,而且提供了許多可配置的功能,如一級緩存,二級緩存等[6]。

1.4.5 Spring 框架

Spring是一個開源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事務(wù)。從簡單性、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。Spring是輕量級的,完整的Spring框架可以在一個大小只有1MB多的JAR文件里發(fā)布。此外,Spring是非侵入式的,Spring應(yīng)用中的對象不依賴于Spring的特定類。Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進了松耦合。Spring允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)進行內(nèi)聚性的開發(fā)。Spring可以將簡單的組件配置組合成為復(fù)雜的應(yīng)用。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你[7]。

1.4.6 FreeMarker框架

FreeMarker是一個用Java語言編寫的模板引擎,它基于模板來生成文本輸出。FreeMarker與Web容器無關(guān),即在 Web運行時,它并不知道Servlet或HTTP。它不僅可以用作表現(xiàn)層的實現(xiàn)技術(shù),而且還可以用于生成 XML,JSP或Java文等。使用FreeMarker可以徹底的分離表現(xiàn)層和業(yè)務(wù)邏輯。使用FreeMarker可以提高開發(fā)效率。使用FreeMarker后,作為界面開發(fā)人員,只專心創(chuàng)建HTML文件、圖像以及Web頁面的其他可視化等方面,而程序開發(fā)人員則專注于系統(tǒng)實現(xiàn),負責為頁面準備要顯示的數(shù)據(jù)。

2 系統(tǒng)平臺設(shè)計

2.1 S2SH 架構(gòu)

對于具有嚴格分層的J2EE體系,Struts2只能作為其中的Web層解決方案,如果不與其它輕量級框架整合,將嚴重影響Struts2功能的發(fā)揮。另一方面,目前各種輕量級框架往往在處理某一層面的問題時表現(xiàn)突出,而在其它層面上表現(xiàn)一般。例如:Struts2在系統(tǒng)的控制和表現(xiàn)層面上具有很強的優(yōu)勢,但在組件的管理和數(shù)據(jù)的持久化等層面上存在不足,Spring借其控制反轉(zhuǎn)容器,在組件的管理和組件依賴注入等層面上表現(xiàn)出色;Hibernate可實現(xiàn)對象到關(guān)系的映射,允許以面向?qū)ο蟮姆绞讲僮麝P(guān)系數(shù)據(jù)庫,在實現(xiàn)數(shù)據(jù)的持久化層面上表現(xiàn)非凡。因此,將Struts2、Hibernate、Spring進行整合是非常必要的。通過整合,可充分發(fā)揮這三種框架的優(yōu)勢,達到優(yōu)勢互補的效果,以進一步提高Web應(yīng)用系統(tǒng)的重用性、靈活性、維護性和擴展性[8]。

S2SH嚴格采用三層結(jié)構(gòu):Web層、業(yè)務(wù)層和持久層,每層又進一步細分為:

(1)Web層包括視圖層和核心控制層,由Struts2構(gòu)建用于攔截用戶的請求,并調(diào)用業(yè)務(wù)層的Action進行處理。

(2)業(yè)務(wù)層包括業(yè)務(wù)邏輯控制層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層,由Struts2和Spring整合構(gòu)建,通過調(diào)用業(yè)務(wù)邏輯組件進行用戶業(yè)務(wù)邏輯請求的處理,并通過數(shù)據(jù)訪問對象(Data Access Object,DAO),調(diào)用持久層的組件進行數(shù)據(jù)持久化操作。

(3)持久層包括數(shù)據(jù)持久層和數(shù)據(jù)庫層,由Spring和Hibernate整合構(gòu)建,進行對象到關(guān)系數(shù)據(jù)庫的映射操作。

在S2SH中Spring處于核心地位。向上整合Struts2,向下整合Spring。Spring充分利用Ioc容器的特性和功能,通過配置文件,將專注于控制業(yè)務(wù)邏輯組件和結(jié)果視圖的Action、專注于業(yè)務(wù)邏輯實現(xiàn)的業(yè)務(wù)邏輯對象(Business Object,BO)、專注于數(shù)據(jù)底層持久化操作的數(shù)據(jù)訪問對象(DAO)、底層數(shù)據(jù)庫內(nèi)存鏡像的會話工廠(SessionFactory)等組件統(tǒng)一在其管理之下,統(tǒng)一管理這些組件生命周期的各個階段,并利用其依賴注入功能,實現(xiàn)可配置編碼的耦合方式,實現(xiàn) Action與 BO、BO與DAO、DAO與SessionFactory的低耦合,使得系統(tǒng)具有良好的解耦性,從而保證利用S2SH開發(fā)的應(yīng)用系統(tǒng)在重構(gòu)時不會發(fā)生“牽一發(fā)而動全身”的效果,提高了系統(tǒng)的可擴展性、可維護性和可復(fù)用性。Struts2、Spring、Hibernate整合的順序如圖1所示。

2.2 FreeMarker+Struts2 構(gòu)架

FreeMarker是一個用Java編寫的模板引擎,能夠?qū)?shù)據(jù)與頁面模板分離,根據(jù)指定的模板輸出多種規(guī)格的文本,如HTML、XML、RTF等。

在設(shè)計模板時不需要關(guān)心所需要的數(shù)據(jù)源,只需預(yù)先在需要填充數(shù)據(jù)地方預(yù)留替換占位符,這樣在模板引擎解析模板時就可以動態(tài)地加載數(shù)據(jù),替換占位符的內(nèi)容。其工作原理如圖1所示。圖中模板文件中預(yù)留${Cus2tomer.Name}充當占位符,當程序運行時,模板解釋引擎解析模板,用程序傳遞 Customer.Name= ”Tom”的值替換${Customer.Name}部分,這樣在終端用戶看到的結(jié)果頁面就是結(jié)果輸出頁面。簡單而言,F(xiàn)reeMarker將數(shù)據(jù)文件和模板文件二者合并后進行輸出[9]。

FreeMarker是Struts2默認的模板技術(shù),支持JSP標簽,內(nèi)嵌XML DOM解析,功能更強大,使用方便快捷。此外,F(xiàn)reeMarker支持控制語言、指令語句及內(nèi)置函數(shù)等功能,這樣處理 Sequence和Hash對象時具有較強的靈活性。

FreeMarker不支持腳本代碼,只提供對數(shù)據(jù)的分析與訪問,這樣就避免在模板頁面出現(xiàn)業(yè)務(wù)邏輯代碼,使程序的業(yè)務(wù)邏輯層與視圖展現(xiàn)層清晰明確,程序設(shè)計員專注于項目業(yè)務(wù)邏輯開發(fā),而美工人員則專注于模板的設(shè)計,使開發(fā)人員分工更明確。

此外,使用FreeMarker生成純文本的靜態(tài)文件有利于減輕服務(wù)器負擔。如果JSP頁面發(fā)布于服務(wù)器,接受用戶的請求時就需要不斷地與服務(wù)器進行交互,服務(wù)器將耗費較大的硬件資源,而如果用戶訪問使用FreeMarker生成的純文本的HTML、XML等文檔時,此時服務(wù)器占用相對較少的硬件資源,而且對用戶的服務(wù)器請求響應(yīng)也尤為迅速。對于具有巨大訪問量的服務(wù)器而言,頁面使用FreeMarker模板輸出為純文本頁面,能夠極大地提高服務(wù)器的響應(yīng)速度,縮短反應(yīng)時間,降低對硬件資源的占用率。

2.3 平臺結(jié)構(gòu)設(shè)計

依照機械電子特色產(chǎn)業(yè)科技超市的需求,將系統(tǒng)整體規(guī)劃為兩大部分:頁面顯示前端和業(yè)務(wù)邏輯后臺,對于整個應(yīng)用程序來說,所有業(yè)務(wù)邏輯的資源(包括所有Java代碼和系統(tǒng)運行時所需要的XML配置文件)歸檔在“src”文件夾中,所有的頁面顯示資源(包括頁面,圖片資源和腳本資源)歸檔在系統(tǒng)的根目錄下,對于一個體系復(fù)雜的平臺系統(tǒng)來說,有必要將各類代碼和文件統(tǒng)一管理,方便系統(tǒng)的維護和擴展。

頁面顯示部分主要負責系統(tǒng)UI設(shè)計,包括軟件界面的整體風格、頁面布局、圖片元素以及腳本特效,這些文件保存在應(yīng)用根目錄下。平臺系統(tǒng)的表現(xiàn)層使用Freemarker模板框架,根目錄下user_case用于存放模板文件,由Freemarker生成的靜態(tài)頁面則全部放在根目錄下,在user_case下分別針對文件的功能建立了對應(yīng)的文件夾,js文件夾存放系統(tǒng)的javacript,css用于存放系統(tǒng)用到的css源文件,images文件夾存放圖片文件,catalog文件夾存放分類信息的頁面源文件,product文件夾存放產(chǎn)品的頁面源文件等等,其中系統(tǒng)主頁面和錯誤頁面在user_case目錄下。另外系統(tǒng)后臺文件存在于根目錄下的單獨文件夾中,頁面顯示部分文件結(jié)構(gòu)如表1所示。

表1 頁面顯示部分文件結(jié)構(gòu)

系統(tǒng)的業(yè)務(wù)邏輯部分主要負責除頁面顯示以外所有的控制操作,其劃分標準按照Java的分層設(shè)計原則分為以下幾個包:entity包(主要編寫實體對象類,用以描述數(shù)據(jù)庫中的表結(jié)構(gòu))、dao.inf包(保存數(shù)據(jù)庫操作類相應(yīng)的接口)dao.impl包(用于實現(xiàn)dao.inf包下的接口,主要編寫數(shù)據(jù)庫操作代碼,與數(shù)據(jù)庫取得連接并進行數(shù)據(jù)讀取和存儲操作,impl是 implement的縮寫)、facade包(存放系統(tǒng)的控制層類實現(xiàn)門面模式)、action包(數(shù)據(jù)流轉(zhuǎn)向的Java代碼在此包中實現(xiàn),運用了struts2框架)、validate包(用于系統(tǒng)用戶提交數(shù)據(jù)時的后臺驗證)、util包(存放系統(tǒng)需要的工具類)。平臺系統(tǒng)的業(yè)務(wù)邏輯部分的文件結(jié)構(gòu)如表2所示。

2.4 jQuery框架

jQuery是一套跨瀏覽器的JavaScript庫,強化HTML與JavaScript之間的操作。由John Resig在2006年1月的BarCamp NYC上釋出第一個版本。目前全球有28%的站臺使用jQuery,是目前最受歡迎的JavaScript庫。

表2 業(yè)務(wù)邏輯部分文件結(jié)構(gòu)

jQuery能夠使用戶的HTML頁面保持JavaS-cript動作與HTML內(nèi)容分離,也就是說,不用再在網(wǎng)頁里面插入一堆JS代碼來調(diào)用命令了,只需為網(wǎng)中的元素定義好id即可。除了能夠更為方便的使用JS外,jQuery還有一個特點就是具有插件機制,程序員可以去網(wǎng)上下載自己喜歡的一些JS特效的插件,完全降低了開發(fā)的難度[9]。

jQuery的使用方法:將下載到的jQuery-1.3.2.min.js文件保存到系統(tǒng)根目錄下的js文件夾中,此外將基于jQuery框架的jQuery-ui-1.8rc3.custom.min.js的UI插件文件放置在同樣的目錄下,這個UI插件提供了許多常用的界面JS方法。

在需要使用jQuery的頁面中加入以下代碼,即可在頁面中使用jQuery框架和插件:

<script type="text/javascript"src="js/jQuery/jQuery -1.3.2.min.js" > < /script>

<script type="text/javascript"src="js/jQueryjQuery-ui-1.8rc3.custom.min.js" > < /script>

使用jQuery的目的主要是規(guī)范和簡化HTML中的JavaScript代碼的編寫,使得JavaScript代碼具有更高的可維護性和代碼重用性。例如,在一份HTML文檔中,有一個 id號為“u_account”,class為“u_name”的div層,使用了jQuery,獲取這個DIV的操作為:

$("#u_account")或者 $(“.u_name”);

在使用了jQuery后,對HTML頁面的控制變得非常簡潔。正如jQuery的宗旨一樣“寫更少的代碼,做更多的事”,代碼量的減少卻沒有削減JavaScript對DOM模型的控制能力,jQuery大量封裝了具有兼容性的API函數(shù),這些腳本代碼可以靈活地實現(xiàn)對頁面的顯示、動作與特效。

2.5 JSON 數(shù)據(jù)傳輸

JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式。在Ajax應(yīng)用中可以用于服務(wù)器向客戶端傳送數(shù)據(jù),提高了客戶端解析的速度并且易于使用。JSON建構(gòu)于兩種結(jié)構(gòu):

1)“名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結(jié)構(gòu)(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關(guān)聯(lián)數(shù)組(associative array)。

2)值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數(shù)組(array)。

這些都是常見的數(shù)據(jù)結(jié)構(gòu)。事實上大部分現(xiàn)代計算機語言都以某種形式支持它們,這使得一種數(shù)據(jù)格式在同樣基于這些結(jié)構(gòu)的編程語言之間交換成為可能[10]。

2.6 Ajax局部刷新

Ajax即“Asynchronous JavaScript and XML”(異步JavaScript和XML),是由 Jesse James Gaiiett創(chuàng)造的名詞,是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。在基于數(shù)據(jù)的應(yīng)用中,用戶需求的數(shù)據(jù),可以從獨立于實際網(wǎng)頁的服務(wù)端取得,并且可以被動態(tài)地寫入網(wǎng)頁中,給緩慢的Web應(yīng)用體驗使之像桌面應(yīng)用一樣。

Struts 2其中的一個重要的功能就是通過Ajax標志增加互動性和靈活性,而且使用這些Ajax標志與普通的Struts標志同樣簡單。基于不重新發(fā)明輪子的原則,Struts 2并沒有開發(fā)新的Ajax框架,而是使用時下Java EE平臺中比較流行的Ajax框架——Dojo和DWR,當然同樣可以采用其他的JS框架進行Ajax的操作。在一些出名的程序員們的無私奉獻下,開發(fā)了Struts 2的JSON插件(Plugin),極大地方便了我們輸出JSON結(jié)果(Result)。因此采用JSON進行Ajax的數(shù)據(jù)傳輸,極大的減少了開發(fā)的復(fù)雜度[11]。

以系統(tǒng)中會員注冊功能為例,Ajax的數(shù)據(jù)驗證方式是:

(1)瀏覽器收集用戶數(shù)據(jù),包括用戶名、密碼。

(2)JavaScript腳本對用戶名和密碼進行簡單的長度、格式等條件的驗證。如果不正確,則在頁面中即時顯示用戶數(shù)據(jù)錯誤信息,提醒用戶修改數(shù)據(jù)。

(3)信息的簡單檢查確認無誤后,瀏覽器將收集到的數(shù)據(jù)整合成JSON數(shù)據(jù)對象,以異步的方式從后臺發(fā)送數(shù)據(jù)給服務(wù)器。

(4)服務(wù)器接收到數(shù)據(jù)后,檢查數(shù)據(jù)庫,判斷是否存在同樣的用戶名。并將結(jié)果反饋給瀏覽器。

(5)瀏覽器接收服務(wù)器傳來的反饋信息,并將結(jié)果立即在頁面中顯示,提示用戶數(shù)據(jù)的合法性。

在采用了jQuery框架以后,使用Ajax技術(shù)的門檻也大大降低了,代碼也變得更加簡潔,jQuery對Ajax的異步操作提供有完善的API接口函數(shù),代碼如下:

這段代碼中type參數(shù)指的傳值類型;url參數(shù)值為”accountVal.action”(這是一個 Struts定義的action地址)處理請求的地址;dataTpye參數(shù)指的是傳值的方式,這里為json傳值;data參數(shù)就是要發(fā)送到服務(wù)端的數(shù)據(jù),success參數(shù)是指服務(wù)器端成功處理完數(shù)據(jù)后客服端將要進行的動作;error參數(shù)是指Ajax處理發(fā)生錯誤時所做的處理。

3 數(shù)據(jù)結(jié)構(gòu)設(shè)計

系統(tǒng)數(shù)據(jù)庫使用MySQL數(shù)據(jù)庫,支持AIX、FreeBSD、HP - UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統(tǒng),并且為多種編程語言提供了API。這些編程語言包括 C、C++ 、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。MySQL支持多線程,可以充分利用CPU資源,其優(yōu)化的SQL查詢算法,能夠有效地提高查詢速度,可以處理擁有上千萬條記錄的系統(tǒng)要求。系統(tǒng)的數(shù)據(jù)庫表結(jié)構(gòu)如圖2所示,共設(shè)有13張表,分別為:管理員表(t_admin)、管理員組表(t_admingroup)、產(chǎn)品類型表(t_catalog)、產(chǎn)品信息表(t_product)、產(chǎn)品評論表(t_evaluate)、友情鏈接表(t_friendlink)、客服信息表(t_clientservice)、會員信息表(t_member)、會員留言表(t_message)、會員-產(chǎn)品收藏關(guān)系表(t_mem_pro)、新聞類型表(t_news_topic)、新聞信息表(t_new)、公告表(t_notice)。其中除t_mem_pro多對多關(guān)系表不含有主鍵以外,每張表的ID字段都設(shè)置為主鍵字段,t_admin表中的gid為外鍵與t_admingroup表為多對一的雙向關(guān)系;t_product表的cid為外鍵與t_catalog為多對一的雙向關(guān)系;t_evaluate表中的pid為外鍵與t_product為多對一的雙向關(guān)系;t_message表中mid為外鍵與t_member表為多對一的雙向關(guān)系;t_new表中的tid為外鍵與t_news_topic表為多對一的雙向關(guān)系;t_mem_pro表為t_member表和t_product表的多對多雙向關(guān)系生成的關(guān)聯(lián)表;t_friendlink表和t_clientservice表相對來說獨立于系統(tǒng)。表的命名方式為:在所有實體表的英文名前加上“t”標識,這樣做的好處是防止系統(tǒng)中表的結(jié)構(gòu)被他人利用黑客字典惡意探測,可以有效提高系統(tǒng)數(shù)據(jù)的安全性。

3.1 Hibernate數(shù)據(jù)庫連接

使用Java連接數(shù)據(jù)庫最常用的方法是使用JDBC(Java Data Base Connectivity)方式,JDBC是一種用于執(zhí)行數(shù)據(jù)庫SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC為JAVA程序員和數(shù)據(jù)庫開發(fā)人員提供了一個標準的API,據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠用純Java API編寫數(shù)據(jù)庫應(yīng)用程序。

Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫[12]。Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用。Hibernate默認提供多級緩存機制,能夠有效提高應(yīng)用程序的運行效率。此外,Hibernate框架的引入,將數(shù)據(jù)庫設(shè)計與Java源代碼開發(fā)隔離開來,大幅度地降低了系統(tǒng)數(shù)據(jù)層的耦合程度,Java代碼中不再關(guān)心數(shù)據(jù)庫的URL地址、數(shù)據(jù)庫的端口、數(shù)據(jù)表名稱等等瑣碎的細節(jié),這些數(shù)據(jù)連接的信息交給Hibernate的XML配置文件,由一系列的配置文件作為數(shù)據(jù)庫與應(yīng)用程序之間的樞紐,從而將數(shù)據(jù)層整合起來。在MVC程序設(shè)計模式中,Hibernate框架是數(shù)據(jù)模型層與系統(tǒng)控制層之間的橋梁。

圖2 系統(tǒng)數(shù)據(jù)結(jié)構(gòu)圖

Hibernate使用Java的反射機制與數(shù)據(jù)庫取得連接,所有的連接信息在Hibernate的XML配置文件中定義,包括:數(shù)據(jù)庫的URL地址、數(shù)據(jù)庫的用戶名/密碼、數(shù)據(jù)庫的連接驅(qū)動器等信息,以下代碼描述了系統(tǒng)的應(yīng)用程序與MySQL數(shù)據(jù)庫取得聯(lián)系的基本配置文件。

在XML配置文件中,首先定義數(shù)據(jù)庫的URL地址,對于本地的測試系統(tǒng),其IP設(shè)置為localhost指向本地計算機,端口號設(shè)置MySQL安裝時默認啟動的3306端口,數(shù)據(jù)庫名為test,使用UTF-8字符集編碼與數(shù)據(jù)庫連接。數(shù)據(jù)庫的用戶名設(shè)為root,這個在MySQL安裝時可以添加其他用戶名。數(shù)據(jù)庫驅(qū)動器名的 Java描述為 com.mysql.jdbc.Driver,這是MySQL與Java連接時所調(diào)用的JDBC驅(qū)動程序入口點,指向一個Class類,驅(qū)動器JAR包可以從MySQL官方網(wǎng)站下載得到。上述代碼在Hibernate 的配置文件 hibernate.cfg.xml中定義,完成與數(shù)據(jù)庫的基本連接,所有參數(shù)在XML配置文檔中描述清楚后,工程代碼中不再重新定義,達到了Java代碼與數(shù)據(jù)庫參數(shù)相互隔離的目的,有效地降低了系統(tǒng)耦合度,從而使得數(shù)據(jù)層的開發(fā)與應(yīng)用層的開發(fā)可以同時進行互不影響。

3.2 Hibernate實體映射

在完成數(shù)據(jù)庫連接后,Java代碼需要能夠操縱數(shù)據(jù)庫中每一張表的記錄,在原生態(tài)的JDBC程序設(shè)計中,JAVA與數(shù)據(jù)庫的通信是面向過程化的SQL語句執(zhí)行,使用數(shù)據(jù)庫事務(wù)將每個SQL命令封裝成集合提交給數(shù)據(jù)庫,而引入了Hibernate框架后,對數(shù)據(jù)庫表的操作不再是程式化的SQL命令操作,而是面向?qū)ο蠡膶︻惖牟僮鳌?/p>

Hibernat要求數(shù)據(jù)庫中每一張實體表在工程文件中都有一個唯一的Class類與之對應(yīng),對表的操作,經(jīng)過Hibernate框架的處理轉(zhuǎn)變成對類的操作。一張表的一個字段就是一個類中的一個私有屬性,對表中記錄的添加、刪除、修改轉(zhuǎn)變成對類的實例的添加、刪除、修改。Hibernate不僅支持標準化的SQL語法,同時支持面向?qū)ο蟮臄?shù)據(jù)查詢語言HQL。使用Hibernate框架的應(yīng)用系統(tǒng),設(shè)計者對數(shù)據(jù)庫的控制完全轉(zhuǎn)化成對工程中類的調(diào)用,不僅使得代碼簡單易懂、層次清晰,而且面向?qū)ο蟮脑O(shè)計思想與人類認知世界的本質(zhì)是類似的,這使得Hibernate應(yīng)用程序的開發(fā)更符合Java程序員的編程習慣,有效地提高開發(fā)效率。

從數(shù)據(jù)庫中的一張表到Java代碼的一個類的轉(zhuǎn)化,Hibernate仍然需要使用XML配置文件來維護它們之間的映射關(guān)系,所以每一張表對應(yīng)一個簡單 Java對象類(POJO,Plain Ordinary Java Objects),每一次映射都需要一個XML配置文檔來幫助Hibernate理解映射過程中的數(shù)值類型定義。系統(tǒng)中一共有13張表,其中有12張式實體表,另外1張是多對多的中間表,所以在Hibernate的配置文件hibernate.cfg.xml中共需要描述12張表的映射關(guān)系,它們分別是管理員表與Admin類的映射、管理員組與AdminGroup類的映射、產(chǎn)品類型表與Catalog類的映射、客服信息表與ClientService類的映射、產(chǎn)品評論表與Evaluate類的映射、友情鏈接表與FriendLink類的映射、會員信息表與Member類的映射、新聞信息表與Message類的映射、新聞類型表與New類的映射、產(chǎn)品信息表與Product類的映射,其配置代碼如下所示:

<mapping resource="com/me/hibernate/entity/Notice.hbm.xml"/>

上述代碼指定了Hibernate啟動時加載的配置文件地址,可以看到一共加載了12個XML配置文檔,分別對應(yīng)了12個POJO類。以新聞信息類為例,啟動時會加載New.hbm.xml文件,在這個文件中有如下定義:

這段配置信息詳細描述了數(shù)據(jù)庫中的t_new表需要以怎樣的方式與POJO類進行字段到類的私有成員變量的一一映射關(guān)系。表3給出了每個獨立字段的映射關(guān)系。

表3 New字段映射關(guān)系

此外New類還需要維護與新聞類型表之間的 多對一的關(guān)系關(guān)系,t_new表的tid字段設(shè)置為一個外鍵,其指向了t_news_topic表的ID字段,所以這兩張表建立了多對一的關(guān)系,故而在Hibernate映射關(guān)系中需要用<mamy-to-one>標簽來描述描述這樣的多對一關(guān)系。

與此類似Hibernate啟動時還需加載另外11張表的配置信息,以便能夠形成JAVA對象控制表中的各個記錄。

4 結(jié)論

機械電子科技服務(wù)超市(平臺)在使用J2EE的整體解決方案上集合了Struts、Hibernate、Spring框架,采用MVC三層架構(gòu)設(shè)計。平臺系統(tǒng)使用了Tomcat服務(wù)器和MySQL數(shù)據(jù)庫運行環(huán)境,可以在大多數(shù)服務(wù)器平臺之上穩(wěn)定運行。系統(tǒng)使用的四個國際標準框架,有效地處理了系統(tǒng)在整體層次上的松耦合狀態(tài),系統(tǒng)的每一層都可獨立于其他層存在,提高了系統(tǒng)的靈活性和可移植性,適合二次開發(fā)和系統(tǒng)擴展,并且使得系統(tǒng)的日后維護成本和難度也大為降低。

[1]孫小英.網(wǎng)絡(luò)營銷與傳統(tǒng)營銷的探究[J].企業(yè)家天地,2009(2):261.

[2]林元元.搜索引擎優(yōu)化技術(shù)(SEO)的應(yīng)用[J].軟件導(dǎo)刊,2009,8(11):147-149.

[3]劉琳瑯,吳清江.J2EE在Web電子交易市場開發(fā)中的應(yīng)用研究[J].福建電腦,2003(11):7-9.

[4]伍小榮,伍慶華.J2EE組件的UML建模[J].微計算機應(yīng)用,2002,23(6):340 -343.

[5]Yanfang Wang,Chunyan Guo,Lei Song.Architecture of E-Commerce Systems Based on J2EE and MVC Pattern[C].ICMeCG,2009:284 -287.

[6]蘇芬平,劉更,王海偉.數(shù)據(jù)庫管理系統(tǒng)持久層的Hibernate解決方案[J].計算機工程與設(shè)計,2008,29(12):2991-2997.

[7]孫丹.Spring框架下Web應(yīng)用系統(tǒng)設(shè)計與實現(xiàn)[J].電腦編程技巧與維護,2009(10):13-26.

[8]溫立輝.SSH框架在軟件工程J2EE三層架構(gòu)體系中的應(yīng)用[J].科技資訊,2009(31):79-80.

[9] FreeMarker project.Freemarker[EB/OL].http://freemarker.org/index.html,2010.6.1

[10]李峰,劉彥隆.基于 SSH框架與 jQuery技術(shù)的 JavaWeb開發(fā)應(yīng)用[J].科技情報開發(fā)與經(jīng)濟,2010(6):106-109.

[11]Trac Power.JSON -RPC 1.0.JSON -RPC 1.1 Specification[EB/OL].http://json-rpc.org/wd/JS ON -RPC -1 -1 - WD -20060807.html,2010.6.1

[12]Nana Qi,Zhimin Yang.Research of Struts2 framework and web application based on Ajax[C].ITIME,2009:903-908.

猜你喜歡
代碼頁面框架
刷新生活的頁面
框架
廣義框架的不相交性
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
關(guān)于原點對稱的不規(guī)則Gabor框架的構(gòu)造
一種基于OpenStack的云應(yīng)用開發(fā)框架
網(wǎng)站結(jié)構(gòu)在SEO中的研究與應(yīng)用