基于SSH的電子商務(wù)公共服務(wù)平臺的設(shè)計實現(xiàn)分析-系統(tǒng)架構(gòu)及企業(yè)網(wǎng)站子系統(tǒng)_第1頁
基于SSH的電子商務(wù)公共服務(wù)平臺的設(shè)計實現(xiàn)分析-系統(tǒng)架構(gòu)及企業(yè)網(wǎng)站子系統(tǒng)_第2頁
基于SSH的電子商務(wù)公共服務(wù)平臺的設(shè)計實現(xiàn)分析-系統(tǒng)架構(gòu)及企業(yè)網(wǎng)站子系統(tǒng)_第3頁
基于SSH的電子商務(wù)公共服務(wù)平臺的設(shè)計實現(xiàn)分析-系統(tǒng)架構(gòu)及企業(yè)網(wǎng)站子系統(tǒng)_第4頁
基于SSH的電子商務(wù)公共服務(wù)平臺的設(shè)計實現(xiàn)分析-系統(tǒng)架構(gòu)及企業(yè)網(wǎng)站子系統(tǒng)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

.z---.--總結(jié)資料摘要隨著信息化的浪潮席卷全球,傳統(tǒng)的商務(wù)模式受到巨大的沖擊,一種新的商務(wù)模式電子商務(wù)平臺,近年在國內(nèi)逐漸興起,越來越多的企業(yè),特別是中小型企業(yè)開場慢慢轉(zhuǎn)變企業(yè)的營銷策略模式,逐漸向電子商務(wù)這方面進軍。如何充分利用電子商務(wù)快速、方便、靈活的特性,為企業(yè)創(chuàng)造更多的價值,使企業(yè)跟上時代的步伐,在當今劇烈的社會競爭中謀得一席之地,已經(jīng)成為企業(yè)所關(guān)注的重要問題。本系統(tǒng)設(shè)計目的是建立一個以SSH框架為根底,構(gòu)造靈活、可復用、可擴展,開發(fā)快速且輕量的電子商務(wù)公共效勞應(yīng)用平臺。SSH即采用目前社會上比較流行的J2EE框架,Struts2+Spring+Hibernate。此框架是基于MVC根底之上的一種擴展,把程序分為三層架構(gòu),模型層〔M〕,視圖層〔V〕和控制層〔C〕,極大程度地降低了程序的耦合性,使開發(fā)出來的程序更靈活,更強健,更高效。系統(tǒng)架構(gòu)和企業(yè)子系統(tǒng)是本文論述的主要目標。構(gòu)建一個可擴展,可復用,高效,靈活的架構(gòu)和建立一個功能比較齊全的企業(yè)是實現(xiàn)本系統(tǒng)的關(guān)鍵。本文主要論述了采用SSH框架加第三方插件來構(gòu)建系統(tǒng)框架和開發(fā)企業(yè),闡述自己對SSH開框架的一點看法,并提出在程序開發(fā)中融入設(shè)計模式的思想。在構(gòu)造化層次、理清系統(tǒng)業(yè)務(wù)模型和優(yōu)化業(yè)務(wù)模型重用性的根底上,結(jié)合第三方插件設(shè)計開發(fā),簡化開發(fā)模型,降低框架的復雜度,提高開發(fā)效率,讓框架更容易實現(xiàn),同時提高程序的擴展性、靈活性、復用性、強健性,以更好的松耦合方式開發(fā)構(gòu)件,使本系統(tǒng)能適應(yīng)多變的業(yè)務(wù)需求。關(guān)鍵詞SSH,MVC,第三方插件,設(shè)計模式ABSTRACTAstheinformationoftechnologysweepingacrossallovertheword,traditionalbusinesspatternsarehavingahugeshock.Anewbusinessmodel--E-businessplatform,graduallyriseinrecentyears.Moreandmoreenterprises,especiallythesmallandmedium-sizedones,begintochangetheirmarketingstrategymodeintoE-businessbydegrees.MakinggooduseoftheE-businesscharacteroffast,convenient,andagile,wecanhelpenterprisescreatemorevalueandenablethemtokeepupwiththetimesandfindingagoodplaceinthedrasticsociety.ThegoalofthesystemdesignistocreateaE-businesspublicserviceapplicationplatformwhichisagile,reusable,e*tensible,rapiddevelopandlight-weight,baseonSSHframe.SSHisusingtheJ2EEframe,Struts2+Spring+Hibernate,whichisoneofthepopularframeinnowsociety.Theframeisbasedonae*tensibleofMVCanddividetheprocedureintothreelayers:Modellayer(M),Viewlayer(V)andControllayer(C).SSHgreatlyreducestheprocedurecouplingandmakeitmorefle*ible,morerobustandmoreefficient.Themainobjectiveofthisdissertationissystemarchitectureandenterprisewebsitesubsystem.Thekeypointofthesystemistocreateae*tensible,reusable,height-efficient,fle*ibleframeandbuildaenterprisewebsitewithapletefunction.ThisdissertationismainlydiscussabouthowtouseSSHframeandthethird-partplug-intobuildsystemarchitectureanddevelopenterprisewebsite,andIe*poundmylittleviewofSSHframeandputforwardanideathatblendthedesignpatternsinprogramdevelopment.Inordertoadaptthechangingbusinessneeds,Iconsiderthattheframeshouldbepletedmoreeasilyonthebasisofthereusableofstructuringlayer,clearsystembusinessmodelandoptimizebusinessmodel,andbineofthedesigndevelopmentofthethird-partyplug-inboard,simplifydevelopingmodel,reducetheple*ityofframeandimprovee*ploitationefficiency.Andatthesametime,improveprograms’e*tension,fle*ibility,reusability,robustness,usebetterloosecouplingtodevelopconstructionmember.KEYWORDS:SSH;MVC;Third-partyplug-inboard;Designpattern.目錄前言運行環(huán)境硬件環(huán)境效勞器端:效勞器端的最低配置是由建立站點所需的軟件來決定的,本網(wǎng)絡(luò)系統(tǒng)效勞器端的最低配置如下:處理器:InterPentium〔Celeron〕42.4GHz或更高。內(nèi)存:2G硬盤空間:160G顯卡:SVGA顯示適配器客戶端:因為客戶端主要用于瀏覽和操作數(shù)據(jù),所以對客戶端的硬件要求不高,不過現(xiàn)在的電腦有很高的性價比,因此需要的配置應(yīng)該高于下面的配置:處理器:InterPentium〔Celeron〕41.6GHz或更高。內(nèi)存:512MB硬盤空間:160GB顯卡:SVGA顯示適配器軟件環(huán)境效勞器端:操作系統(tǒng):WindowsNT/2000/2003效勞器:Tomcat6.*+jdk6.*數(shù)據(jù)庫管理系統(tǒng):MySQL5.*用戶端:操作系統(tǒng):WindowsNT/2000/2003/*Pprofessional/WindowsSeven系統(tǒng)設(shè)計MVC模式分析MVC是一種將應(yīng)用程序的邏輯層和表現(xiàn)層進展別離的方法。MVC式的出現(xiàn)不僅實現(xiàn)了功能模塊和顯示模塊的別離,同時它還提高了應(yīng)用系統(tǒng)的可維護性、可擴展性、可移植性和組件的可復用性。模型(Model)模型是應(yīng)用程序的主體局部。模型表示業(yè)務(wù)數(shù)據(jù)。通常來說,你的模型類將包含取出、插入、更新、刪除你的數(shù)據(jù)庫信息的功能。視圖(View)視圖是應(yīng)用程序中用戶界面相關(guān)的局部,是用戶看到并與之交互的界面。一個視圖通常是一個網(wǎng)頁,但是在CI中,一個視圖也可以是一個頁面片段,如頁頭、頁尾??刂破?Controller)控制器工作就是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示和更新model對象狀態(tài)。是模型、視圖以及其它任何處理HTTP請求所必須的資源之間的中介,并生成網(wǎng)頁。由于運用MVC的應(yīng)用程序的三個部件是相互對立,改變其中一個不會影響其它兩個,所以依據(jù)這種設(shè)計思想你能構(gòu)造良好的松耦合的構(gòu)件。本系統(tǒng)是在MVC模式根底上來進展分層,由于本系統(tǒng)開發(fā)的工具是MyEclipse,在建立工程時開發(fā)工具就已經(jīng)初步把系統(tǒng)分成MVC三層構(gòu)造。模型層由Models層來充當,該層主要是用來存實體Bean類和Hibernate影射文件。通過該層開發(fā)者很方便地對整個工程下的Bean進展管理,同時也非常方便地對Hibernate配置文件進展影射,極大的提高了開發(fā)的效率,同時對以后系統(tǒng)的維護也非常方便。圖2-1models層V層在本系統(tǒng)中主要是用來數(shù)據(jù)展示,本系統(tǒng)中V層主要是采用JSP技術(shù)。通過JSP技術(shù)可以很方便地把數(shù)據(jù)展示在web瀏覽器上。在JSP技術(shù)根底上,對其進展了改進,把html語言和java語言進展別離,這樣既到達了解耦的目的,也使后續(xù)系統(tǒng)的維護變得很方便。把流程控制都放到Action層,把業(yè)務(wù)邏輯處理放在service層中,充分利用Struts2技術(shù),在html頁面中使用Struts2標簽來展示數(shù)據(jù),盡量減少在html頁面上寫java語句。<tr> <tdnowrapalign="right"width="11%">產(chǎn)品編號:</td> <tdwidth="60%">${product.id}</td> <tdalign="right"width="4%"></td> <tdrowspan="8"width="25%">溫馨提示:假設(shè)無圖片,刪除失敗!<imgsrc="/E-Shop/images/users/enterprise/${product.picture_path}"width="200"height="200"/></td></tr> <tr> <tdnowrapalign="right"width="11%">產(chǎn)品名稱:</td> <tdwidth="50%"><inputtype="te*t"name="productName"id="productName"value="${}"ma*length="50"/><spanclass="red">1~50個字符</span></td> <tdalign="right"width="39%"><inputtype="hidden"value="${product.id}"/></td></tr><tr><tdnowrapalign="right">價格:</td> <td><inputtype="te*t"name="productPrice"id="productPrice"value="${product.price}"ma*length="10"/><spanclass="red">整數(shù)或小數(shù),1-10位</span></td><tdalign="right"></td> </tr>C層主要是用來做流程和邏輯控制,也是整個系統(tǒng)的核心層。所有進出系統(tǒng)的都要經(jīng)過這一層的控制。本系統(tǒng)對C層時行了一些改進,我們把控制層又細分為Action層,service層和Dao層。Action層只管流程控制,Service層只管邏輯控制,Dao層只管與數(shù)據(jù)打交道,各施其職,每個層次只管自己的事情,這樣能使整個系統(tǒng)的層次非常清楚,不會出現(xiàn)功能的混淆。讓開發(fā)者和維護者在編寫代碼的時候非常清晰。圖2-2C層細分MVC模型優(yōu)點顯然,但在實際開發(fā)過程中個人對采用MVC模式有一點點看法。馬克思主義哲學告訴我們,任何事物都有它的局限性,MVC也不例外。MVC不是萬能藥,它并不能醫(yī)治所有的疾病,作為一名醫(yī)術(shù)高超的醫(yī)生應(yīng)該要能對癥下藥。MVC強制性地將業(yè)務(wù)邏輯層和表現(xiàn)層分開,在一定程度上是能很好地松耦合,但這種做法是會帶來開發(fā)和運行的開銷的。首先MVC采用多分層構(gòu)造,這樣就給開發(fā)帶來了難度,增加了開發(fā)的時間,并且如果在層次設(shè)計的時候設(shè)計得不好,反而會降低程序運行的效率。另外多層次構(gòu)造在運行的時間沒有單層次構(gòu)造的程序運行的速度快,采用MVC模式如果分層太多,是會降低程序運行速度??鬃痈嬖V我們要因材施教,我們做開發(fā)的也要因物施用,大炮有大炮的威力,小步槍有小步槍的靈活,并不是說所有的系統(tǒng)都要采用MVC模式來開發(fā)。MVC模式它提出來的初衷就是為大型軟件設(shè)計而提出的,它對那些需要經(jīng)常復用,擴展的大型軟件是非常有好處,但對于那些復用性,擴展性很少的小軟件,特別是對于開發(fā)時間要求比較緊的情況下,采用MVC模式,其實不是一種明智的選擇。SSH分析SSH即Struts+Spring+Hibernate,是典型的J2EE三層構(gòu)造,分為表現(xiàn)層、中間層和數(shù)據(jù)層。三層體系將數(shù)據(jù)表現(xiàn)、業(yè)務(wù)邏輯和數(shù)據(jù)分開。業(yè)務(wù)邏輯、數(shù)據(jù)、權(quán)限攔截及合法性校驗等工作放在中間層處理??蛻舳瞬恢苯优c數(shù)據(jù)庫交互,而是通過組件與中間層建立連接,再由中間層與數(shù)據(jù)庫打交道。表現(xiàn)層主要采用的是JSP+Struts,當然也有采用Struts+Freemarker或其他的結(jié)合,就目前來說,用JSP作為表現(xiàn)層還是占主流,JSP自問世以來,開展到現(xiàn)在,其穩(wěn)定性已經(jīng)得到大多數(shù)開發(fā)者的認同。Struts也可用到表現(xiàn)層,其實就是用它的標簽,Struts強大的標簽庫為我們表現(xiàn)數(shù)據(jù)提供了一個很好的平臺,通過Struts標簽,我們能很好地表現(xiàn)處理后的數(shù)據(jù)。中間層細分開來又分為控制層和業(yè)務(wù)邏輯層??刂茖又饕菍φ麄€系統(tǒng)流程的控制,而業(yè)務(wù)邏輯層主要是對業(yè)務(wù)的控制??刂茖又饕蒘truts來充當,我們通常說的MVC中的C,它作為表現(xiàn)層和數(shù)據(jù)層的中間介質(zhì),主要處理表現(xiàn)層和數(shù)據(jù)層的數(shù)據(jù)交換工作,當然像權(quán)限控制,數(shù)據(jù)校驗,我們也會放在這一層中來進展。業(yè)務(wù)邏輯層主要由Service來控制,它主要封裝的是業(yè)務(wù)邏輯,負責對更底層的DAO層進展封裝。數(shù)據(jù)層主要由Hibernate來充當,它主要包括DAO層和PO層。DAO層封裝好了對數(shù)據(jù)庫的增、刪、改、查的操作,而PO層主要是對實體對象的映射。Hibernate提供的是面向?qū)ο蟮牟僮鞣椒?,使開發(fā)者可以使用面向?qū)ο蟮乃枷雭聿僮鲾?shù)據(jù)庫,在一些層級性比較強的數(shù)據(jù)面前,使用Hibernate是一種很好的選擇,它可以很方便地就能檢出表與表之間的關(guān)系,完全免去了以往用jdbc時的那種寫SQL語句的繁瑣。而且Hibernate還提供了很多關(guān)連和檢出方式,這就極大的提高了程序運行的效率。Spring貫穿整個中間層和數(shù)據(jù)層,它對Struts和Hibernate進展了封裝管理。將Web層、Service層、DAO層及PO無縫整合。Spring提供的IOC和AOP能很好地解決JS22一些老難題。采用IOC〔控制反轉(zhuǎn)〕,很好地提高了對象的生成,提高了系統(tǒng)的內(nèi)存利用率。你不需要找我,有需要時我會找你,這就是SpringIOC的核心。AOP提供的是一種全新的編程模式,切面編程。相對于以往的豎面編程,切面編程無疑是給開發(fā)者一種新的開發(fā)思路。它能夠別離關(guān)注點,且能夠?qū)M切關(guān)注點嵌入到面向?qū)ο蟮能浖到y(tǒng)中,很好地解決了像權(quán)限控制,日志登記,操作記錄等的問題。本系統(tǒng)框架主要采用SSH框架,Struts主要是用來控制整個系統(tǒng)流程。它由三個局部組成,核心控制器FilterDispatcher、業(yè)務(wù)控制器和用戶實現(xiàn)的業(yè)務(wù)邏輯組件。本系統(tǒng)采用的核心控制器為版本〔如圖3-4〕,該控制器作為一個Filter運行在Web應(yīng)用中,它負責攔截所有的用戶請求,當用戶請求到達時,該Filter會過濾用戶請求。如果用戶請求以action結(jié)尾,該請求將被轉(zhuǎn)入Struts2框架處理。Struts2框架獲得了*.action請求后,將根據(jù)*.action請求的前面局部決定調(diào)用哪個業(yè)務(wù)邏輯組件,例如,對于login.action請求,Struts2調(diào)用名為login的Action來處理該請求。<!--struts2配置--> <filter> <filter-name>struts2</filter-name> <filter-class> </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>攔截器也是本系統(tǒng)中使用的一個Struts2重要組件功能,該組件功能提供一個事件攔截的方法,讓你可以對*些動作進展攔截。例如本系統(tǒng)對所有后臺操作都有一個檢查是否登錄的功能,如果沒有登錄則對其操作進展攔截。publicStringintercept(ActionInvocationai)throwsE*ception{Mapsession=ai.getInvocationConte*t().getSession();if(session.get("manager")!=null) {returnai.invoke(); }else{ ActionConte*tac=ai.getInvocationConte*t(); ac.put("tips","您還沒有登錄,請登錄!");returnAction.LOGIN; }}在本系統(tǒng)中Hibernate主要是對數(shù)據(jù)庫的操作進展了封裝。本系統(tǒng)數(shù)據(jù)庫封裝是采用外設(shè)形式。把連接數(shù)據(jù)庫的信息全部寫在外設(shè)的一個文件中,然后用Hibernate提供讀取外設(shè)的功能去讀取文件內(nèi)容。采用此種做法的優(yōu)點在于可以靈活配置數(shù)據(jù)庫和對不同數(shù)據(jù)進展切換,考慮到以后有可能升級數(shù)據(jù)庫,采用此種做法是很好的。<beanid="dataSource"class="org.apache.mons.dbcp.BasicDataSource"destroy-method="close"> <propertyname="driverClassName"value="${driver}"/> <propertyname="url"value="${url}"/> <propertyname="username"value="${username}"/> <propertyname="password"value="${password}"/></bean> 在本系統(tǒng)中Spring主要是對Struts和Hibernate進展了封裝,把兩個框架進展聯(lián)結(jié)起來,采用IOC注入方式來調(diào)用對象,任何時候都對Struts和Hibernate對象進展托管,當有需要的時候自動提交給Struts或Hibernate。本系統(tǒng)對Spring作了一個小小的調(diào)整就是所有執(zhí)行操作都放到Spring統(tǒng)一管理。在以往一些人整合SSH中,Struts的*些操作還是沒有納入到Spring中來,我們本次整合是把所有的操作都統(tǒng)一到Spring中來。<beanid="enterpriseManagerDao"class="org.back.dao.enterpriseWebsite.impl.EnterpriseManagerDaoImpl"> <propertyname="sessionFactory"ref="sessionFactory"></property> </bean> <beanid="enterpriseManagerService"class="org.back.serivce.enterpriseWebsite.impl.EnterpriseManagerServiceImpl"> <propertyname="vipc"ref="enterpriseManagerDao"></property> </bean> <beanid="enterpriseManagerAction"class="org.back.action.enterpriseWebsite.EnterpriseManagerAction"autowire="byName"scope="prototype"> <propertyname="vs"ref="enterpriseManagerService"></property> </bean>SSH框架功能強大毋庸置疑,但它也不是萬金油,并不是所有的開發(fā)都要用這個框架。SSH框架比較適合應(yīng)用于那些業(yè)務(wù)邏輯需求變化大,數(shù)據(jù)表關(guān)聯(lián)較多,但數(shù)據(jù)檢出不復雜,考慮到以后數(shù)據(jù)庫有可能變換或升級,檢出數(shù)據(jù)不頻繁的系統(tǒng)。相對于model1和model2模式,SSH是一個笨重的框架,在開發(fā)上它的效率是比不上model1和model2的,SSH框架采用的層次比較多,在執(zhí)行效率上也不及model1和model2。在數(shù)據(jù)上,Hibernate是以對象的方式來數(shù)據(jù)庫的,相對于jdbcd而言它的效率是比較底的,而且Hibernate關(guān)連的數(shù)據(jù)比較多,如果在配置上控制不好,會有很多冗余的數(shù)據(jù)檢出來,這樣就會加大的效勞器內(nèi)存的負擔,降低了運行的效率。受制于HQL語言的限制,Hibernate對于一些復雜的檢出是比較麻煩的,在這一方面,它遠沒有jdbc來得方便。對于開發(fā)者而言要學好SSH也不是一件容易的事,它是需要花一些時間去研究和學習的,相對于model1和model2,SSH要花相當大的時間去學習才能很好地撐握。插件式設(shè)計分析應(yīng)用程序框架應(yīng)用程序框架插件接口配置文件插件2插件3插件n插件1圖2-3插件式設(shè)計分析插件式設(shè)計比起許多設(shè)計模式更簡單,更靈活,更容易理解和操作。它減輕了開發(fā)者很多的工序,減輕了開發(fā)者開發(fā)的負擔,使開發(fā)者能夠利用現(xiàn)有的插件,很好地完成目標功能。各種基于插件設(shè)計的架構(gòu)都有自己的特色,但從總體架構(gòu)上看,其模型都**小異?;诓寮_發(fā)的應(yīng)用程序都有四局部組成,系統(tǒng)框架、插件接口、配置文件和插件。通過插件接口,系統(tǒng)框架可以非常靈活地使用外部插件,這也非常符合24種設(shè)計模式中的接口別離原則。應(yīng)用程序框架它只負責整個程序流程的調(diào)控,并且可以在程序中嵌入插件接口,但不并不了解插件的實際執(zhí)行情況,只負責接口的接入。插件接口外部插件的入口,它是一個協(xié)議,與程序框架的關(guān)聯(lián)點,外部插件就是通過此入口來接入程序框架,它只負責兩者的整合。至于如何具體實現(xiàn),就交給具體的插件來處理,它只負責接入而不負責具體的實現(xiàn)。配置文件接口配置文件,通過配置注明具體要調(diào)用哪個接口具體插件具體插件,負責實際的功能操作與具體實現(xiàn),通過配置文件的配置被調(diào)用。一般具體的插件都遵循功能單一性,也就是說,是分頁的插件只管分頁,是編輯的插件只管編輯,兩者不能混在一起,否則就會引起接口污染,不符合設(shè)計模式。本系統(tǒng)中采用的插件有FCKEditor、Display-tag、Struts2標簽庫、JQuery。由于SSH開源性,因此在本系統(tǒng)中對于外部插件的引入非常方便,在配置好插件文件的根底上在需要引用的地方再配置一下配置名稱就可以了,非常方便開發(fā)者開發(fā)。FCKEditor對于文章編輯,圖片編輯非常方便,它里面已經(jīng)集成好了很多編輯的功能方法,對字體、段落的格式提供了豐富的選擇,還可以添加表情等,功能極其豐富。開發(fā)者在開發(fā)時只需引入相應(yīng)的模塊即可。<tr> <td> </td> <tdalign="center"width="80%"> <FCK:editorinstanceName="description"value=""height="185pt></FCK:editor> </td> </tr>Display-tag插件對于后臺分頁非常方便,它提供了分頁、打印、導出、排序等功能,對于管理類數(shù)據(jù)的管理非常方便。有了它,開發(fā)者不必花大多的時間去編寫類似以上功能的代碼,可以省出更多的時間去整理業(yè)務(wù)邏輯,極大的提高了開發(fā)效率和開發(fā)時間。<trbgcolor="*EEEEEE"id="displayTableDiv"> <display:tableclass="displayTableShow"name="productsList"requestURI="getAllProductsList.action"id="product"pagesize="10"style="width:100%;"><display:columnproperty="id"title="編號"sortable="true"></display:column> <display:columnproperty="name"title="名稱"sortable="true"></display:column> <display:columnproperty="category.category"title="產(chǎn)品類別"></display:column><display:columnproperty="price"title="價格"></display:column> <display:columnproperty="min_buy"title="最低批發(fā)量"></display:column> <display:columnproperty="type"title="適用型號"></display:column> <display:columnproperty="description"title="產(chǎn)品描述"></display:column> <display:columntitle="圖片"media="html"> <imgsrc="/E-Shop/images/users/enterprise/${product.picture_path}"width="80"height="80"/> </display:column> <display:columntitle="操作"media="html"> <inputtype="button"onclick="window.location='connectionModifyProduct.action?id=${product.id}'"value="修改"/> <inputtype="button"onclick="if(confirm('確定要刪除嗎?'))window.location='deleteProduct.action?id=${product.id}&picturePath=${product.picture_path}'"value="刪除"/> </display:column> </display:table></tr>設(shè)計模式引入模式其實就是前人總結(jié)的一些經(jīng)歷,如果遵循*些規(guī)則會讓開發(fā)者少走很多彎路。在JAVA世界里有一套經(jīng)典的設(shè)計模式,GOF的23種設(shè)計模式,它讓開發(fā)者創(chuàng)造出了很多優(yōu)秀的程序。設(shè)計模式不僅是一種技術(shù),更是一種藝術(shù),采用設(shè)計模式來開發(fā)軟件,會有很多意想不到的效果。本系統(tǒng)引入的設(shè)計模式如下:工廠方法模式本系統(tǒng)數(shù)據(jù)操作就是采用了工廠方法模式,首先定義了一個數(shù)據(jù)連接接口,然后再定義一個數(shù)據(jù)實現(xiàn)類,最后定義一個數(shù)據(jù)連接工廠來返回數(shù)據(jù)庫連接。圖2-4設(shè)計模式引入數(shù)據(jù)庫連接級別圖接口publicinterfaceIDBConnection{publicintgetRowCount(StringstrSql)throwsSQLE*ception; publicResultSetgetRs(Stringsql)throwsSQLE*ception,E*ception; publicintinsert(Stringsql)throwsSQLE*ception; publicintupdate(Stringsql)throwsSQLE*ception; publicintdelete(Stringsql)throwsSQLE*ception;}實現(xiàn)類publicclassDBConnectionimplementsIDBConnection{publicsynchronizedintgetRowCount(StringstrSql){ intintCount=0; try{ stmt=(PreparedStatement)getStmtread("selectcount(*)from"+strSql); rs=stmt.e*ecuteQuery(); if(rs.ne*t()){ intCount=rs.getInt(1); } else{ intCount=0; } }catch(E*ceptione){ intCount=-1; System.err.println(e.getMessage()); e.printStackTrace(); }finally{ close(); } returnintCount;}}采用工廠方法模式可以按批量生產(chǎn)對象,同時也符合單一職責功能,一個工廠只生產(chǎn)一種產(chǎn)品,符合開閉原則,對擴展開放,對修改關(guān)閉,如果以后數(shù)據(jù)庫操作功能需要添加功能,可以很方便添加功能,而不用修改原來的代碼。單例模式本系統(tǒng)數(shù)據(jù)連接采用了單例模式。采用單例模式的好處就是保證了在整個系統(tǒng)內(nèi)只有一個實例存在,因為數(shù)據(jù)連接都是共同的,保證一個共用連接已經(jīng)足夠,這樣就極大的節(jié)省了系統(tǒng)內(nèi)存空間,提高了系統(tǒng)的運行效率。publicclassDBFactory{ privatestaticIDBConnectiondbconnection; privateDBFactory(){ } SuppressWarnings("unused") /** *生成數(shù)據(jù)庫操作唯一實例 */ publicstaticsynchronizedIDBConnectiongetBDConnection(){ if(dbconnection==null){ dbconnection=newDBConnection();//System.out.println("生成數(shù)據(jù)庫操作實例!"); } returndbconnection; }}享元模式享元模式可以防止大量非常相似類的開銷。在程序設(shè)計中,有時需要生成大量細粒度的實例來表示數(shù)據(jù)。如果能發(fā)現(xiàn)這些實例除了幾個參數(shù)外根本上都是一樣的,有時就能夠受大幅度地減少需要實例化的類的數(shù)量。如果能把那些參數(shù)移到類實例外面,在方法調(diào)用時將它們傳遞進來,就可以通過共享大幅度地減少單個實例的數(shù)目。在本系統(tǒng)中我們需要生成大量的企業(yè),但這些企業(yè)的功能框架是都一樣的,只是具體的參數(shù)不一樣,這就非常符合享元模式了。我們把企業(yè)的享元類做好,等需要生成不同企業(yè)時,就把具體的參數(shù)再傳進去,這樣就能到達共享的目標。圖2-5設(shè)計模式引入享元模式圖可以生成無數(shù)個企業(yè)只需調(diào)用以上幾個共用的享元頁面就可以了。通過傳入不同的參數(shù),就可以區(qū)別開來是哪個企業(yè)的。前臺分頁方法改進目前java世界里分頁方法有很多,針對不同的用途分頁也不同,所采用的分頁原理也不一樣。有些分頁方法是一次性把所有數(shù)據(jù)都查詢出來,然后再根據(jù)當前的ID號來確定要顯示哪一頁,此種方法是能實現(xiàn)數(shù)據(jù)分頁,但是每次取數(shù)據(jù)都要把所有的數(shù)據(jù)都查詢出來,這樣做不利于提高查詢的速度。有些分頁方法則是根據(jù)當前頁的首ID和尾ID號來確定上一頁和下一頁的內(nèi)容,每次點擊上一頁或下一頁都去數(shù)據(jù)庫把相應(yīng)的數(shù)據(jù)查詢出來,這種做法是提高了查詢的速度,但是每次查詢都要數(shù)據(jù)庫,增加了數(shù)據(jù)庫效勞器的負擔,運行效率不高。本系統(tǒng)前臺采用的分頁方法原理是,第一次查詢時把所有要查詢的數(shù)據(jù)都從數(shù)據(jù)庫里查詢出來,然后把這些數(shù)據(jù)放到一個session中緩存起來,以后再查詢時就從session緩存中去取需要的數(shù)據(jù),這種做法的優(yōu)點在于,只一次數(shù)據(jù)庫減少了對數(shù)據(jù)庫效勞器的負擔,把數(shù)據(jù)緩存在本地,每次查詢速度比去直接數(shù)據(jù)庫查詢要快得多。采用此種分頁方法既減少于數(shù)據(jù)庫的,又提高了數(shù)據(jù)查詢速度,可謂是一舉兩得。 /** *獲取公司信息 */ publicvoidreturnpanyInfo(){ /* *使用session緩存,第一次加載數(shù)據(jù)時把數(shù)據(jù)放入到session中,以后每次同一頁面時都會從session緩存中取數(shù)據(jù),以減少對數(shù)據(jù)庫的,減輕數(shù)據(jù)庫的負載壓力。 * **/ panyInfo=ServletActionConte*t.getRequest().getSession().getAttribute("panyInfo")==null?null: (panyInfoBean)ServletActionConte*t.getRequest().getSession().getAttribute("panyInfo"); if(panyInfo==null){ panyInfoService=newpanyInfoServiceImpl(); try{ panyInfo=panyInfoService.getOnepanyInfo(1); ServletActionConte*t.getRequest().getSession().setAttribute("panyInfo",panyInfo);//System.out.println("初次!"); }catch(SQLE*ceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }數(shù)據(jù)庫設(shè)計本系統(tǒng)采用的數(shù)據(jù)庫為Mysql5.0,本系統(tǒng)所有與數(shù)據(jù)庫相關(guān)的開發(fā)都遵從Mysql5.0數(shù)據(jù)庫開發(fā)原則。本系統(tǒng)數(shù)據(jù)庫開發(fā)定義名詞如下:‘*’:主關(guān)鍵字符號;‘PK’:主關(guān)鍵字縮寫;‘+’:外關(guān)鍵字符號;‘FK’:外關(guān)鍵字縮寫;‘&’:復合關(guān)鍵字符號;‘CPK’:復合關(guān)鍵字縮寫;‘UNIQUE’:唯一索引;各數(shù)據(jù)表描述表2SEQ表格\*ARABIC\s11數(shù)據(jù)庫表描述數(shù)據(jù)表描述相關(guān)區(qū)域VIP_client企業(yè)客戶信息表AdministratorPANY_CATEGORY公司類型表AdministratorPANY_CULTURE企業(yè)文化表AdministratorPANY_HONOR公司榮譽表AdministratorPRODUCT_CATEGORY產(chǎn)品類別表AdministratorPRODUCT產(chǎn)品表AdministratorPANY_PUCTURE公司相冊表AdministratorORDER_ONE訂單一表VisitorORDER_TWO訂單二表VisitorENTERPRISE_MANAGER管理員表AdministratorLEAVE_MESSAGES留言表Visitor數(shù)據(jù)庫字典表2-2企業(yè)文化表描述列名數(shù)據(jù)類型長度主鍵否允許空默認值約束功能描述IDINT是否自增*編號CLIENT_IDINT否FK(VIPCLIENTID)企業(yè)ID號CONTENTTE*T內(nèi)容表2-3公司榮譽表描述列名數(shù)據(jù)類型長度主鍵否允許空默認值約束功能描述IDINT是否自增*編號CLIENT_IDINT否FK(VIPCLIENTID)企業(yè)ID號CONTENTTE*T內(nèi)容表2-4產(chǎn)品類別表描述列名數(shù)據(jù)類型長度主鍵否允許空默認值約束功能描述IDINT是否自增*編號CLIENT_IDINT否FK(VIPCLIENTID)企業(yè)IDCATEGORYVARCHAR50否類別表2-5產(chǎn)品表描述列名數(shù)據(jù)類型長度主鍵否允許空默認值約束功能描述IDINT是否自增*編號CLIENT_IDINT否FK(VIPCLIENTID)企業(yè)IDCATEGORY_IDINT否FK(PRODUCT_CATAGOORYID)產(chǎn)品類別PANY_CATEGORY_IDINT否FK(PANY_CATEGORYID)公司類型NAMEVARCHAR50否產(chǎn)品名稱TYPEVARCHAR50否適用類型PRICEDOUBLE否單價MIN_BUYINT否最低批發(fā)量DESCRIPTIONVARCHAR1000說明PICTURE_PATHVARCHAR500否圖片路徑MORE_PICTUREVARCHAR1000更多圖片STATEVARCHAR1否00=‘不展示’,1=‘展示’是否在平臺首頁展示表2-6公司相冊表描述列名數(shù)據(jù)類型長度主鍵否允許空默認值約束功能描述IDINT是否自增*編號CLIENT_IDINT否FK(VIPCLIENTID)企業(yè)IDPATHVARCHAR500否相片路徑DESCRIPTIONVARCHAR50描述表2-7訂單一表描述列名數(shù)據(jù)類型長度主鍵否允許空默認值約束功能描述IDINT是否自增編號CLIENT_IDINT否FK(VIPCLIENTID)企業(yè)IDORDERIDVARCHAR50否UNIQUE訂單號NAMEVARCHAR50否**PHONEVARCHAR20否TELEPHONEVARCHAR20否手機EMAILVARCHAR50否EmailADDRESSVARCHAR100否地址QQVARCHAR15QQFINISH_TIMEVARCHAR100完成時間MESSAGESVARCHAR50說明HANDLE_PEOPLE_IDINTFKMANAGERID處理人員HANDLE_TIMEDATETIME處理時間STATEVARCHAR1否00=’沒處理’,1=‘確認訂單’,2=‘取消訂單’狀態(tài)表2-8訂單二表描述列名數(shù)據(jù)類型長度主鍵否允許空默認值約束功能描述IDINT是否自增編號CLIENT_IDINT否FK(VIPCLIENTID)企業(yè)IDORDERIDVARCHAR50否FKORDER_ONE〔ORDERID〕訂單號PRODUCT_IDINT否FKPRODUCT產(chǎn)品IDPRICEDOUBLE否價格QUANTITYINT否數(shù)量SUMDOUBLE否小計TIMEDATATIME否時間CATEGORY_IDINT否FK(PRODUCT_CATEGORYID)類別表2-9管理員表描述列名數(shù)據(jù)類型長度主鍵否允許空默認值約束功能描述IDINT是否自增編號CLIENT_IDINT否FK(VIPCLIENTID)企業(yè)IDEMAILVARCHAR50否EMAILPASSWORDVARCHAR50否密碼ISSUPER_MANAGERVARCHAR1否0是否是超級管理員STATUSVARCHAR111=‘啟用’0=‘禁用’狀態(tài)表2-10留言表描述列名數(shù)據(jù)類型長度主鍵否允許空默認值約束功能描述IDINT是否自增編號CLIENT_IDINT否FK(VIPCLIENTID)企業(yè)IDCONTENTVARCHAR500否留言內(nèi)容PEOPLEVARCHAR50否留言者TIMEDATETIME否留言時間HANDLE_PEOPLE_IDINTFK(ENTERPRISE_MANAGERID)處理者HANDLE_TIMEDATETIME處理時間STATUSVARCHAR100=‘未處理’1=‘通過’2=‘不通過’狀態(tài)表2-11企業(yè)客戶信息表描述列名數(shù)據(jù)類型長度主鍵否允許空默認值約束功能描述IDINT11是否自增*編號EMAILVARCHAR50否EmailPANYNAMEVARCHAR50否公司名稱INDUSTRYVARCHAR50否所屬行業(yè)SCALEVARCHAR50否公司規(guī)模LOGONTIMEVARCHAR50否注冊時間LOGONCOSTDOUBLE0注冊資本REGIONVARCHAR50否所屬地區(qū)ADDRESSVARCHAR200否公司地址LINKMANVARCHAR50否聯(lián)系人TELEPHONEVARCHAR12否手機PHONEVARCHAR20FI*VARCHAR20QQVARCHAR50QQMSNVARCHAR50MSNPOSTVARCHAR10郵政編碼PANYPROPERTYVARCHAR50公司性質(zhì)PANYABOUTTE*T0公司簡介PICTUREVARCHAR50公司LOGOPANY_CATEGORY_IDINT否FK(PANY_CATEGORYID)企業(yè)類型ISREMENDEDVARCHAR100=不推薦,1=推薦是否是推薦企業(yè)STATUSVARCHAR1否‘0’=未處理;‘1’=正常;‘狀態(tài)E-R圖下訂下訂處理1nn1客戶ID訂單ID管理員ID客戶訂單管理員圖STYLEREF1\s2-6客戶-訂單-管理員E-R圖訂單訂單客戶擁有n1客戶ID訂單ID圖STYLEREF1\s27客戶-訂單E-R圖留言留言客戶擁有n1客戶ID留言ID圖STYLEREF1\s2-8客戶-留言E-R圖留言留言管理員管理n1管理員ID留言ID圖STYLEREF1\s29管理員-留言E-R圖訂單訂單管理員管理n1管理員ID訂單ID圖STYLEREF1\s2-10管理員-訂單E-R圖功能實現(xiàn)本系統(tǒng)實現(xiàn)功能包括前臺功能和后臺功能,前臺功能主要是與企業(yè)客戶交互,后臺功能主要提供企業(yè)管理員進展操作。前臺功能包括:首頁、企業(yè)簡介、產(chǎn)品展示、公司相冊、客戶下訂、聯(lián)系我們、留言、招聘、合作伙伴。后臺功能包括:首頁管理、企業(yè)簡介管理、產(chǎn)品管理、公司相冊管理、訂單管理、聯(lián)系我們管理、留言管理、管理員管理、招聘管理、合作伙伴管理。后臺后臺首頁管理企業(yè)簡介管理合作伙伴管理訂單管理留言管理聯(lián)系方式管理公司相冊管理管理員管理招聘管理產(chǎn)品管理圖3-1后臺功能架構(gòu)圖前臺前臺首頁企業(yè)簡介合作伙伴我的訂單留言聯(lián)系我們公司相冊招聘產(chǎn)品展示圖3-2前臺功能架構(gòu)圖企業(yè)后臺功能實現(xiàn)根本信息管理頁面圖3-3根本信息管理頁面企業(yè)管理員列表圖后臺主要實現(xiàn)代碼/**企業(yè)產(chǎn)品*/publicclassProductSActione*tendsActionSupport{ /** *返回所有產(chǎn)品 *return */publicStringgetAllProductsList(){ productsList=productService.getAllProduct();return"success"; } /** *添加產(chǎn)品頁面 *return */publicStringconnectAddProduct(){ productCategoryList=productService.getAllProductCategorys();return"success"; } /** *取得絕對路徑 *parampath *return */publicStringgetRealPath(Stringpath){returnServletActionConte*t.getRequest().getRealPath(path); } /** *生成圖片相對路徑 *paramfileName *return */publicstaticStringgeneratePath(StringfileName){ Calendarc=Calendar.getInstance(); SimpleDateFormatsf=newSimpleDateFormat("yyyyMMddHHmmss"); Stringtime=sf.format(c.getTime()); Randomr=newRandom(); String[]fileNames=fileName.split("\\."); Stringpath=time+r.ne*tInt(10)+"+r.ne*tInt(10)+"+r.ne*tInt(10)+r.ne*tInt(10)+"."+fileNames[1];returnpath; } /** *添加產(chǎn)品 *return */publicStringaddProduct(){ StringpicturePath=generatePath(getPictureFileName()); Stringfullpath=getRealPath("/images/users/enterprise")+"/"+picturePath; EnterpriseManagerBeanemb=(EnterpriseManagerBean)ServletActionConte*t.getRequest().getSession().getAttribute("enterpriseManager");if(getPictureFileName()!=null){ if(boo){try{ FileOutputStreamfos=newFileOutputStream(fullpath); FileInputStreamfis=newFileInputStream(getPicture());byte[]b=newbyte[1024];intlen=0;while((len=fis.read(b))>0){fos.write(b,0,len);} }catch(FileNotFoundE*ceptione){ e.printStackTrace();return"fail"; }catch(IOE*ceptione){ e.printStackTrace();return"fail"; }catch(E*ceptione){ e.printStackTrace();return"fail"; }return"success"; }else{return"fail"; } }else{return"fail"; } }企業(yè)前臺功能實現(xiàn)企業(yè)首頁圖圖3-4企業(yè)首頁圖前臺主要實現(xiàn)代碼<body><!--導入topZone區(qū)--><jsp:includepage="../topZone.jsp"></jsp:include><!--container區(qū)開場--><divid="container"><!--導入廣告區(qū)--><jsp:includepage="../advertisment.jsp"></jsp:include><!--聯(lián)系.留言.伙伴區(qū)開場--><divid="contactIMg"><!--聯(lián)系,留言圖片區(qū)開場--><divclass="contGuest"><ul><li><ahref="><imgsrc="/E-Shop/images/forwardProjects/enterpriseWebsite/MainPage_03_07.png"/></a></li><li><ahref="><imgsrc="/E-Shop/images/forwardProjects/enterpriseWebsite/MainPage_03_06.png"/></a></li></ul></div><!--公司簡介、產(chǎn)品展示區(qū)開場--><divid="cp"><!--公司簡介區(qū)開場--><divclass="brief"><divclass="service"><spanclass="bis">公司簡介</span> /<spanclass="bks">ABOUTUS</span><divclass="more"><ahref="*"target="_blank">查看</a></div></div><pclass="word"><s:propertyvalue="panyInfo.panyAbout"/></p></div><!--公司簡介區(qū)完畢--></div><!--公司簡介、產(chǎn)品展示區(qū)完畢--></div><!--container區(qū)完畢--><!--導入footZone區(qū)--> <jsp:includepage="../footZone.jsp"></jsp:include></body>測試性能測試本測試旨在測試系統(tǒng)在一般運行狀態(tài)下的執(zhí)行響應(yīng)時間和內(nèi)存使用量,是否符合性能需求的最大上限,平均水平是否在用戶可承受*圍內(nèi)。本測試忽略網(wǎng)絡(luò)環(huán)境因素,主要通過瀏覽的方式進展測試。測試平臺環(huán)境如下:效勞器硬件: 處理器:Inter(R)Core(TM)DuoCPUP73502.00GHz 內(nèi)存:1.00GB 硬盤:160GB效勞器軟件: 操作系統(tǒng):Windows*P 效勞器:Tomcat6.*jdk6.* 數(shù)據(jù)庫管理系統(tǒng):MySQL5.*客戶端軟件: 操作系統(tǒng):Windows*P 瀏覽器:Firefo*/IE6.0/IE7.0/IE8.0基準測試統(tǒng)計表4-1基準測試統(tǒng)計表結(jié)果1結(jié)果2結(jié)果3平均值數(shù)據(jù)庫安裝內(nèi)存/bytes6,642,7046,152,3417,169,2156,588,087時間/s0.842600.909600.816200.85613后臺瀏覽內(nèi)存/bytes7,673,3367,632,5607,660,4647,655,453時間/s0.501100.540400.433400.49163前臺瀏覽內(nèi)存/bytes5,228,0725,304,9285,228,4325,253,811時間/s0.597400.572500.645200.60503兼容性測試測試說明:本系統(tǒng)兼容性測試主要是測試系統(tǒng)對當前各主流瀏覽器的兼容性,測試的瀏覽器如下:IE6.0、IE7.0、IE8.0,火狐,傲游,360瀏覽器。測試平臺環(huán)境如下:效勞器硬件: 處理器:Inter(R)Core(TM)DuoCPUP73502.00GHz 內(nèi)存:1.00GB 硬盤:160GB效勞器軟件: 操作系統(tǒng):Windows*P 效勞器:Tomcat6.*jdk6.* 數(shù)據(jù)庫管理系統(tǒng):MySQL5.*客戶端軟件: 操作系統(tǒng):Windows*P 瀏覽器:Firefo*/IE6.0/IE7.0/IE8.0/傲游/360瀏覽器測試結(jié)果統(tǒng)計與分析:表4-2測試結(jié)果統(tǒng)計與分析表測試結(jié)果瀏覽器后臺登錄頁面后臺主界面前臺首頁前臺產(chǎn)品前臺關(guān)于我們Firefo*正常正常正常正常正常IE6.0正常正常正常正常正常IE7.0正常正常正常正常正常IE8.0正常正常正常正常正常傲游正常正常正常正常正常360瀏覽器正常正常正常正常正常通過以上測試數(shù)據(jù)可以發(fā)現(xiàn),本系統(tǒng)對當前主流的瀏覽器包括IE6.0、IE7.0、IE8.0、火狐、傲游、360瀏覽器等兼容性良好,沒有發(fā)現(xiàn)不兼容的情況??偨Y(jié)本文是基于SSH應(yīng)用程序框架開發(fā)作為研究重點,以電子商務(wù)平臺系統(tǒng)構(gòu)架和企業(yè)子系統(tǒng)作為分析對象,對系統(tǒng)的框架和模式開發(fā)進展了探討和實踐。在WEB應(yīng)用程序開發(fā)根底上,對MVC三層開發(fā)模式,SSH框架,和設(shè)計模式進展了研究和分析,本文的主要工作及創(chuàng)新點如下:闡述了整個系統(tǒng)的框架分析設(shè)計、數(shù)據(jù)庫設(shè)計、功能實現(xiàn)分析了MVC三層開發(fā)模式,SSH框架組合,插件式開發(fā),設(shè)計模式的引入,并對SSH框架整合做了一點修改,結(jié)合本系統(tǒng)提出了一種高效的分頁方法,在模式和框架根底上靈活運用插件來開發(fā),簡化應(yīng)用框架的復雜度,讓框架更容易實現(xiàn),并提高其擴展性和靈活性。盡管本系統(tǒng)對MVC模式開發(fā)和SSH框架整合做了一些修改,但并不能解決所有問題,因為模式和框架的使用是要付出一定的代價的,還有許多仍需解決的問題。MVC模式和SSH框架都是基于配置文件根底之上來開發(fā)的,當我們的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論