版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
南京郵電大學(xué)通達(dá)學(xué)院題目:校園在線訂餐網(wǎng)站的設(shè)計(jì)和實(shí)現(xiàn)專業(yè):軟件工程學(xué)生姓名:班級學(xué)號:12003227指導(dǎo)教師:指導(dǎo)單位:計(jì)算機(jī)學(xué)院、軟件學(xué)院__日期:2015年12月1日至2016年6月12日本人鄭重聲明:所提交的畢業(yè)設(shè)計(jì)(論文),是本人在導(dǎo)師指導(dǎo)下,獨(dú)立進(jìn)行研究工作所取得的成果。除文中已注明引用的內(nèi)容外,本畢業(yè)設(shè)計(jì)(論文)不包含任何其他個人或集體已經(jīng)發(fā)表或撰寫過的作品成果。對本研究做出過重要貢獻(xiàn)的個人和集體,均已在文中以明確方式標(biāo)明并表示了謝意。論文作者簽名:日期:年月日第一章緒論1.1課題研究背景和意義在這個信息科技快速發(fā)展的時代,互聯(lián)網(wǎng)已經(jīng)基本融入我們的生活當(dāng)中。信息科技的更新日新月異。B2C模式過渡到O2O模式改變的不僅僅是行業(yè)內(nèi)營銷的模式,還影響了大多數(shù)人的消費(fèi)使用習(xí)慣。俗話說得好:“民以食為天”,餐飲行業(yè)在我國一直占有著重要的地位。李克強(qiáng)總理曾經(jīng)提出的“互聯(lián)網(wǎng)+”的發(fā)展概念就為O2O外賣行業(yè)的高速發(fā)展帶來了新的春天。根據(jù)CNNIC發(fā)布的第36次中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告顯示,截止至2015年6月,中國網(wǎng)民的數(shù)量高達(dá)6.68億,互聯(lián)網(wǎng)的普及率接近百分之五十,和2014年底相比上升了0.9%。7月30日,“易觀智庫”發(fā)布的《中國互聯(lián)網(wǎng)餐飲外賣市場2015上半年專題研究報(bào)告》顯示,2015年上半年中國的互聯(lián)網(wǎng)餐飲外賣市場的訂單規(guī)模呈現(xiàn)了一種高速增長的趨勢,成交金額超過了120億元。相對來說,餐飲外賣平臺的用戶多是80、90后年輕人,其中學(xué)生更是餐飲外賣的一個大的用戶群體。因此,校園在線訂餐系統(tǒng)的開發(fā)成為了改變大學(xué)生校園快捷生活,為學(xué)生省下更多的時間學(xué)習(xí)的必要研究課題。校園在線訂餐系統(tǒng)應(yīng)該充分利用互聯(lián)網(wǎng)帶來的優(yōu)勢,使傳統(tǒng)餐飲流程以一個簡潔、直觀的方式展現(xiàn)到網(wǎng)頁上,并且利用可視化界面使餐品的管理和購買流程變得方便、快捷,不僅要大大縮短傳統(tǒng)餐飲的復(fù)雜過程,無需排隊(duì),購買便利,而且賣家管理起來也變得更方便,使學(xué)生的用餐效率能有所提高,也減輕了餐飲管理人員的負(fù)擔(dān)。這樣一來,面對傳統(tǒng)的流程以及雜亂的訂單管理和人員安排,在線訂餐系統(tǒng)的優(yōu)勢也顯而易見,方便了學(xué)生也方便餐廳。同時從接受能力強(qiáng)的大學(xué)方面入手,從而逐漸推廣在線訂餐到大眾,這也是我們加速實(shí)現(xiàn)信息化、現(xiàn)代化和國際化的重要步驟之一。1.2課題研究現(xiàn)狀在我國的一個大環(huán)境下,在線訂餐的模式最早出現(xiàn)在20世紀(jì)90年代的末期。早在1998年的時候,廣州等以吃聞名的大城市已經(jīng)出現(xiàn)了網(wǎng)上訂餐業(yè)務(wù)。2000年7月,北京麗華快餐公司為追求新模式的經(jīng)濟(jì)發(fā)張方式,選擇了探索餐飲業(yè)在網(wǎng)絡(luò)上經(jīng)營的道路,然后就推出了網(wǎng)上訂餐的模式,成為探索網(wǎng)上訂餐的行業(yè)的探路者。國內(nèi)的外賣市場發(fā)展到了現(xiàn)在,基本上形成了這樣的一個市場格局:“餓了么”和“美團(tuán)”遙遙領(lǐng)先,占領(lǐng)了第一陣營,位列第二梯隊(duì)的“淘點(diǎn)點(diǎn)”和“百度外賣”也在開拓創(chuàng)新、不斷趕超,剩下的外賣平臺百花齊放,各有優(yōu)勢。以第一梯隊(duì)的和第二梯隊(duì)的“餓了么”等公司現(xiàn)狀來分析,目前這些平臺各有優(yōu)劣:餓了么:從國內(nèi)卓越的互聯(lián)網(wǎng)數(shù)據(jù)統(tǒng)計(jì)分析公司“易觀國際”的分析結(jié)果來看,占據(jù)外賣市場第一位置的“餓了么”以30.58%的占比搖搖領(lǐng)先,它的先發(fā)優(yōu)勢是其它外賣平臺不具備的,這個優(yōu)勢不單是進(jìn)入到網(wǎng)上外賣行業(yè)的時間節(jié)點(diǎn),還有用戶心中先入為主的一個形象,所以“餓了么”成為了外賣行業(yè)的一個代名詞?!梆I了么”在網(wǎng)絡(luò)外賣行業(yè)中慣性了網(wǎng)絡(luò)訂餐的模式,讓用戶和商家都養(yǎng)成了一個線上下單、推銷的習(xí)慣。美團(tuán):能力出眾、身經(jīng)百戰(zhàn)的“美團(tuán)”連續(xù)創(chuàng)業(yè)者王興帶領(lǐng)他的團(tuán)隊(duì)成員做出來的成果是我們有目共睹,出色的“地推”能力帶來的不僅是品牌效應(yīng),同時在網(wǎng)絡(luò)團(tuán)購上面也坐實(shí)了國內(nèi)的團(tuán)購平臺老大的地位,同時也給了他外賣上的業(yè)務(wù)帶來了大量的客戶資源和品牌口碑,但是它有一個比較其他外賣平臺的更長的業(yè)務(wù)種類,這也是一個不可忽視的問題目前“美團(tuán)”已經(jīng)包含了了外賣、團(tuán)購、電影、旅游、酒店等多個模塊,在不同的業(yè)務(wù)中都有不同的競爭對手,同時還要面對新對手的加入,各行業(yè)虎視眈眈的情況下做到這樣真是一個大成功。淘點(diǎn)點(diǎn):第二梯隊(duì)的淘點(diǎn)點(diǎn)雖然名聲不是很響亮,但是他的靠山你肯定如雷貫耳,作為“阿里系”的一員從來不用擔(dān)心資金和客戶量的不足,更不用擔(dān)心大服務(wù)平臺的建設(shè)。即便如此,如今“淘點(diǎn)點(diǎn)”拓展的城市也只有20多個,和“餓了么”和“美團(tuán)”的200多個城市的規(guī)模相比就屈指可數(shù)了,因?yàn)樗麄冎饕蛟斓氖欠?wù)性的平臺,而且這也是他們擅長的地方,從自己的優(yōu)勢入手做成移動餐飲的生活服務(wù)性平臺,最終造就一個餐飲界的淘寶也不是夢想。百度外賣:國際大品牌百度的涉及業(yè)務(wù)之廣是眾所周知的,根據(jù)“易觀國際”數(shù)據(jù)的分析來看,百度外賣以非常迅速的擴(kuò)張趨勢來彌補(bǔ)它進(jìn)入角逐的時間晚的劣勢,到現(xiàn)在已經(jīng)覆蓋了八十多個城市。根據(jù)百度的一貫作風(fēng),它總是可以另辟蹊徑,在外賣平臺上建立起了屬于自己的物流團(tuán)隊(duì):“百度騎士”來保證送餐的速度,剛剛好滿足了用戶點(diǎn)外賣的初衷:方便。雖然國內(nèi)外賣O2O百家爭鳴外賣,但是也是從國外的多個平臺借鑒而來的。外賣O2O模式最早的發(fā)源地是歐美,并且由于時間的優(yōu)勢現(xiàn)在運(yùn)作的已經(jīng)非常的成熟。歐美的外賣平臺相比較中式的外賣平臺差異很大,目前在歐美地區(qū)比如Yelp、JustEat、GrubHub等多家外賣公司都已經(jīng)成功的上市:YelpPlatform:YelpPlatform是美國的公司也是大眾點(diǎn)評的借鑒對象,也就是說它是一個可以點(diǎn)評、社交和移動一個平臺,它的用戶主要在平臺上對商家進(jìn)行點(diǎn)評和打分。Yelp在2013年的時候開始用推廣Platform平臺的方式來嘗試著經(jīng)營訂餐的業(yè)務(wù)。主要的盈利方式是商業(yè)廣告等,目前不僅成功上市,而且市值超過30億美金。JustEat:21世紀(jì)初就在丹麥創(chuàng)辦了,僅僅五年就擴(kuò)展到了英國,從而奠定了它在英國的在線訂餐網(wǎng)的領(lǐng)先地位,它主要靠收取加盟店的上架費(fèi)用和每個訂單的分成盈利,并且它還擁有一個線下流程向沒有外賣業(yè)務(wù)的餐廳提供服務(wù),而且以收購的方式快速的擴(kuò)張,僅僅2013年一年,他的平臺處理的訂單數(shù)就達(dá)到了4000萬份。兩年前JustEat就在倫敦證券交易所上市了,目前估值14.7億英鎊。GrubHub:GrubHub是美國首屈一指的外賣平臺。它的用戶主要通過電腦或手機(jī)登錄該平臺查找所選擇地區(qū)附近的加盟店,然后選擇所選商家提供的商品后進(jìn)行下單。加盟店在第一時間就會收到提醒,然后配置餐品自行配送到目的地。它的平臺是供用戶免費(fèi)使用的,主要來靠它加盟商的收入分成盈利。在2013年完成了和Seamless的正式合并以后成功上市,目前市值達(dá)到37億美金。國內(nèi)外的訂餐業(yè)務(wù)的區(qū)別也是很明顯的:國外的用戶正常的餐品都是漢堡、披薩之類的一些快餐食品,制作和配送起來都比較方便。國內(nèi)送餐的服務(wù)標(biāo)準(zhǔn)和操作難度就上升了一個檔次了,中國餐飲類食品種類豐富多樣,每個地域都有很大的差別。低門檻的表象需要用高標(biāo)準(zhǔn)的運(yùn)營、執(zhí)行能力來支撐,這就要求在外賣領(lǐng)域求生存的團(tuán)隊(duì)不僅要有高效的下運(yùn)營團(tuán)隊(duì)和出色的線上服務(wù)能力,還要擁有充足的資本來擴(kuò)張和支撐。所以在客觀環(huán)境下,中式在線訂餐業(yè)務(wù)必須高舉高打,快速的進(jìn)行融資和擴(kuò)張,迅速建立起市場第一的地位。相比英美用戶成熟的操作習(xí)慣,國內(nèi)市場目前還處在參差不齊的一個發(fā)展階段,尤其在二三線城市中,比如說“餓了么”,迅速的在多輪融資的支持下擴(kuò)張到260多個城市,加盟的商家多達(dá)二十萬,高峰期的日訂單量達(dá)到200多萬,因此有相當(dāng)豐富的資源來建立起自己業(yè)內(nèi)老大的領(lǐng)導(dǎo)地位。雖然“美團(tuán)網(wǎng)”在14年1月份才剛剛正式退出紫的外賣服務(wù),但是在品牌效應(yīng)下,也就是其他業(yè)務(wù)積累的資源的支持下也進(jìn)行了非常的迅速擴(kuò)張,目前已經(jīng)覆蓋了250多個城市。這樣的擴(kuò)張速度在國外是無法想象的。1.3論文的組織結(jié)構(gòu)本論文一共有五個章節(jié),圖1-1展示了下面幾章的內(nèi)容概要:第一章的緒論主要介紹了本次校園在線點(diǎn)餐系統(tǒng)的課題的要求,目的和意義及論文的組織結(jié)構(gòu)。第二章主要描述了校園在線訂餐系統(tǒng)的相關(guān)技術(shù)原理。第三章主要介紹了本系統(tǒng)的開發(fā)目的、應(yīng)用情景、相關(guān)需求以及總體設(shè)計(jì)。第四章主要介紹校園在線訂餐系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),包括界面的詳細(xì)設(shè)計(jì)和各功能模塊的實(shí)現(xiàn)情況。第五章是對軟件的實(shí)際運(yùn)行情況的測試和展現(xiàn)。結(jié)束語主要介紹開發(fā)設(shè)計(jì)完成之后,對開發(fā)設(shè)計(jì)的總結(jié)和未來展望,遇到問題怎樣解決,以及后續(xù)工作。第一章緒論第一章緒論第二章技術(shù)介紹第二章技術(shù)介紹第四章詳細(xì)設(shè)計(jì)與系統(tǒng)實(shí)現(xiàn)第三章需求分析與總體設(shè)計(jì)第四章詳細(xì)設(shè)計(jì)與系統(tǒng)實(shí)現(xiàn)第三章需求分析與總體設(shè)計(jì)第五章系統(tǒng)演示與測試第五章系統(tǒng)演示與測試結(jié)束語結(jié)束語圖1-1論文組織結(jié)構(gòu)第二章技術(shù)介紹2.1JavaWeb介紹SunMicrosystems公司在20世紀(jì)九十年代中期正式推出了Java編程的技術(shù),并且僅僅用了二十多年的時間就由一門小小的編程語言發(fā)展到在全球范圍內(nèi)通用的大開發(fā)平臺。因?yàn)樵谟?jì)算機(jī)行業(yè)中的主要公司接受了Java技術(shù)的使用,從而導(dǎo)致越來越多的國際技術(shù)標(biāo)準(zhǔn)化的組織也開始進(jìn)行規(guī)范使用。Java看中機(jī)會并迅速的推廣了自己的三大平臺:\o"undefined"JavaSE、\o"undefined"JavaEE、Java
ME,從而給這個世界帶來了巨大的革新,由此也給Java開發(fā)的團(tuán)隊(duì)帶來了巨大的商機(jī),讓他們有充足的資金再進(jìn)一步。為了解決關(guān)于web互聯(lián)網(wǎng)領(lǐng)域的相關(guān)技術(shù),Java推出了Javaweb來實(shí)現(xiàn)相關(guān)功能,Javaweb有廣泛使用的web服務(wù)器和使用并不是很多的web客戶端兩個部分??蛻舳松厦娴膽?yīng)用有javaapplet等,服務(wù)器端的應(yīng)用有Servlet、JSP和許多第三方的框架等等。Web領(lǐng)域的發(fā)展因?yàn)橛蠮ava技術(shù)加入散發(fā)出磅礴的生機(jī),強(qiáng)大的動力也會使web更進(jìn)一步。2.1.1主要框架因?yàn)镴avaweb發(fā)展迅速而誕生了豐富的后臺框架大大簡化了開發(fā)人員的工作,但是它們的底層實(shí)現(xiàn)方式還是差不多的:瀏覽器發(fā)送一個請求后,由對應(yīng)的Servlet或者Filter來進(jìn)行攔截,然后用MVC的設(shè)計(jì)模式來進(jìn)行整體架構(gòu)的一個設(shè)計(jì),相關(guān)配置的聯(lián)系和耦合則用Annotation、約定或XML配置文件來關(guān)聯(lián)起來,瀏覽器發(fā)送的響應(yīng)的流程和面向抽象的請求則由基礎(chǔ)的Java面向?qū)ο蟮倪@個特點(diǎn)來實(shí)現(xiàn),視圖解析就由JSP、Velocity和FreeMarker等來支持。如今已經(jīng)淡出開發(fā)人員視線的Struts框架是以J2EE的MVC模式為底層,以Servlet和JSP的技術(shù)實(shí)現(xiàn)的老牌強(qiáng)大框架。Struts的出現(xiàn)很快的由于它的簡單快捷受到相當(dāng)大的反響,不僅可以充分的滿足開發(fā)人員最繁瑣的應(yīng)用開發(fā)的需求,而且使新開發(fā)人員可以快速上手。編程本就是一個趕時間的工作,而且學(xué)習(xí)的內(nèi)容繁多啰嗦,而Struts集成了自定義標(biāo)簽、信息資源、JSP、Servlet等一些常用功能,由此讓程序員不用重復(fù)的去搭建完整的MVC模式,新的開發(fā)人員也可以先使用然后慢慢學(xué)習(xí)原理,不僅節(jié)省了大部分時間,還降低了開發(fā)門檻,這就是Struts被廣泛應(yīng)用的原因。最近被眾多公司廣泛使用Struts2也是apache項(xiàng)目下的一個web框架。雖然它看起來好像是Struts的2.0版本,但實(shí)際上是一個全新的完整框架。Struts2是Struts社區(qū)和WebWork合作研發(fā)出來的第二代基于MVC開發(fā)的具有強(qiáng)大的擴(kuò)展性的web應(yīng)用框架。讓人們詫異的是Struts2的功能結(jié)構(gòu)更接近之前WebWork而不是名稱相近的Struts,但是研發(fā)人員聲明它會和Struts相似,同時也會比后者更加的快捷方便。JavaServerPages簡稱JSP,中文叫java服務(wù)器頁面,從字面上理解就是把頁面當(dāng)作JAVA服務(wù)器來使用。就像上面說的,它的底層實(shí)現(xiàn)也是同樣的原理,即盡量的去使Servlet的實(shí)現(xiàn)簡單快捷。JSP的實(shí)現(xiàn)方式是在常用的HTML文件如.html、.htm中使用Java程序和自定義的標(biāo)簽文件,這樣就形成了一個后綴名為.jsp的文件。因?yàn)檫@樣編寫的Web程序具有很好的跨平臺的特性,不只是window操作系統(tǒng),在其它的諸如Linux之類的系統(tǒng)下也可以運(yùn)行,由此使得以SunMicrosystems公司領(lǐng)頭的諸多公司倡導(dǎo)把JSP打造成一種動態(tài)的網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。由SpringMVC實(shí)現(xiàn)的MVC模型是最清晰的,所以它漸漸被眾JavaWeb研發(fā)公司所接受。它使用Controller連接請求和業(yè)務(wù)邏輯,而不是其它框架使用的Action??刂破鲿鶕?jù)接收到的請求參數(shù)執(zhí)行相關(guān)操作然后返回對應(yīng)的叫做ModelAndView的界面,即一個帶有模型的視圖,要注意的是模型是Map類型的而不是Object。諸如Struts之類的框架的Action則直接返回視圖的名稱,相應(yīng)的模型參數(shù)就要用另外的方式進(jìn)行傳遞,如HttpServletRequest.setAttribute()、Action本身的屬性數(shù)據(jù)或者是存為Context參數(shù)。因?yàn)槭乾F(xiàn)在主流框架,所以本次設(shè)計(jì)就是使用的此框架,下面會進(jìn)行詳細(xì)的講解。2.2系統(tǒng)框架介紹本系統(tǒng)主要使用的Web框架是SpringMVC,與數(shù)據(jù)庫的交互使用的是iBATIS,前端使用的是基于JavaScript的jQuery,UI方面前臺使用的是Bootstrap,后臺使用的是EasyUI,下面我們逐一介紹這5種主要的框架。2.2.1SpringMVCSpringMVC框架屬于SpringFrameWork的后續(xù)產(chǎn)品,是一個基于Java實(shí)現(xiàn)Model-View-Controller模式的輕量級框架,它的主要功能是用MVC模式的思想來解除web層的耦合性,基于request-response模型幫助我們用來簡化日常的web系統(tǒng)的一個開發(fā)。SpringMVC框架是一種MVC框架。它的主要使用核心控制器DispatcherServlet來操作流程的進(jìn)行;應(yīng)用控制器其實(shí)拆為處理器映射器(HandlerMapping)和視圖解析器(ViewResolver),ViewResolver用來管理視圖,HandlerMapping用來管理處理器;頁面的跳轉(zhuǎn)、請求的發(fā)送則到對應(yīng)的Controller里面。它提供了非常靈活的、數(shù)據(jù)驗(yàn)證和數(shù)據(jù)綁定機(jī)制,同時支持文件的上傳、本地化的解析等,主要采用約定注釋的方式而不是繁瑣的配置進(jìn)行編程,比查看復(fù)雜的配置文件更容易熟悉和上手。
SpringMVC框架也是一個基于驅(qū)動的MVC框架,完全遵循MVC模式的思想把Model、View和Controller進(jìn)行了很好的分離。SpringMVC主要通過核心控制器DispatcherServlet來調(diào)度工作和處理流程,DispatcherSerlvet接收到請求后根據(jù)配置映射規(guī)則分發(fā)給對應(yīng)的Controller,然后通過開發(fā)人員自己配置的映射根據(jù)映射處理器Handlermappings來處理請求并返回對應(yīng)的視圖界面。SpringMVC的一個完整的流程處理過程如圖2-1所示。圖2-1SpringMVC流程圖圖2-1只是SpringMVC比較粗淺的執(zhí)行過程。由圖2-1可知,SpringMVC大致的執(zhí)行流程如下:1、首先用戶在瀏覽器發(fā)送請求并且由前端控制器DispatcherServlet接收,然后前端控制器根據(jù)請求的內(nèi)容和條件選擇經(jīng)過配置的對應(yīng)控制器來處理并把收到的請求轉(zhuǎn)發(fā)給它,即以前的業(yè)務(wù)邏輯控制器部分。2、頁面控制器接收到轉(zhuǎn)發(fā)的請求之后會對功能進(jìn)行處理和運(yùn)行相關(guān)邏輯,首先需把請求的參數(shù)進(jìn)行收集、綁定到一個在SpringMVC中的命令對象里面,同時對該對象進(jìn)行驗(yàn)證,然后將這個對象傳遞到Service層(業(yè)務(wù)對象)進(jìn)行處理;業(yè)務(wù)對象處理之后控制器將返回模型數(shù)據(jù)和邏輯視圖名,即之前提到的ModelAndView;3、DispatcherServlets接收數(shù)據(jù)進(jìn)行控制,根據(jù)返回的邏輯視圖名選擇對應(yīng)的視圖并傳入模型數(shù)據(jù)配合進(jìn)行視圖的渲染、加載資源從而完成界面的展示。4、DispatcherServlets繼續(xù)執(zhí)行控制的權(quán)利把響應(yīng)的內(nèi)容返回到客戶端瀏覽器,以此結(jié)束一個流程。SpringMVC撇開如Struts2等框架繁瑣的的配置,以更為直白快捷的注解的方式進(jìn)行相關(guān)配置映射關(guān)系:@Controller:用來表明所在類是一個處理器;@CookieValue:把cookie類型的數(shù)據(jù)綁定到具體Controller中對應(yīng)方法方法的參數(shù)上;@ModelAttribute:用于綁定請求的參數(shù)到對應(yīng)的命令對象中;@SessionAttributes:寫在處理器類的上方,主要用來標(biāo)明這個存儲的屬性是session級別的,一般列出了對應(yīng)的名稱的模型屬性,比如說如@ModelAttribute等,就會被透明的保存到Session當(dāng)中;@Autowired:用來標(biāo)注成員變量、方法和構(gòu)造函數(shù),來完成自動裝配的工作;@Qualifier("serviceImpl")@Autowired是根據(jù)類型進(jìn)行自動裝配的,如果需要按名稱進(jìn)行裝配,則需要配合@Qualifier使用;在實(shí)現(xiàn)Service接口的ServiceImpl類開始加上@Service("serviceImpl")即可完成裝配@InitBinder:解析請求的參數(shù)并通過datebind機(jī)制與handlermethod中的參數(shù)做綁定;@RequestMapping:用來映射請求到控制器或方法的規(guī)則;@RequestParam:接收請求參數(shù)并綁定到自定義參數(shù)上面,requried指參數(shù)是否必須要帶,true為默認(rèn),必須帶,false為可以不帶;@RequestHeader:把接收的請求頭中的數(shù)據(jù)綁定到Controller中對應(yīng)方法方法的參數(shù)上;@RequestBody:綁定請求的body體的,用消息轉(zhuǎn)換器(HttpMessageConverter)完成請求報(bào)文到對象的轉(zhuǎn)換;@ResponseBody:標(biāo)注該處理方法的返回值是響應(yīng)體,不加的話返回值一般解析成跳轉(zhuǎn)路徑,返回的是數(shù)據(jù)時要加上,也是用消息轉(zhuǎn)換器進(jìn)行對象到響應(yīng)報(bào)文的轉(zhuǎn)換;@ResponseStatus:返回一個指定的httpresponse狀態(tài)碼以及原因。;@ExceptionHandler:注解式聲明異常處理器;SpringMVC的優(yōu)勢如下:1、對所有功能有一個直觀的角色的劃分:DispatcherServlet(前/核心控制器)、HandlerAdapter(處理器適配器)、ViewResolver(視圖解析器)、HandlerMapping(處理器映射)、Validator(驗(yàn)證器)、Controller(控制器/處理器)、FormObject(表單對象)、Command(命令對象)、。2、可以很輕松的根據(jù)自己需要進(jìn)行擴(kuò)展,雖然基本上沒有這個必要,而且有一個明確的分工,用起來也很有條理;3、因?yàn)槭褂玫拿顚ο蟾揪褪荘OJO,所以沒必要對框架特定的相關(guān)API進(jìn)行集成,可以把命令對象直接當(dāng)做業(yè)務(wù)對象來使用;4、和Spring的其他框架無縫集成,是其它Web框架所不具備的;5、具有強(qiáng)大的適配性,因?yàn)橛蠬andlerAdapter支持,從而可以把任意的類當(dāng)做處理器進(jìn)行邏輯處理;6、具有可定制性,可以對HandlerMapping、ViewResolver等相關(guān)的功能根據(jù)自己需求進(jìn)行簡單的定制;7、提供如綁定機(jī)制、數(shù)據(jù)驗(yàn)證、格式化等強(qiáng)大的功能;8、因?yàn)榧闪薙pring,所以可以使用其提供的Mock對象進(jìn)行Web層的一個單元測試,并且操作起來非常的簡單;9、因?yàn)橹С直镜鼗椭黝}的解析,所以搭建的強(qiáng)木可以很容易的切換主體和進(jìn)行國際化操作。10、提供了豐富的可以共JSP使用的標(biāo)簽庫,使用JSP來編寫的話會更加的容易。還有比如基于注解的零配置支持、約定大于配置的契約式編程支持、簡單的文件上傳、RESTful風(fēng)格的支持等等,總之,SpringMVC的強(qiáng)大是有目共睹的。2.2.2iBATISiBATIS這個名稱是根據(jù)“internet”和“abates”組合而來,是Apache公司在2002年啟動的一個開源項(xiàng)目,開發(fā)目的主要是用來支持.NET和Java的一個持久化的框架,本身也是以SQL映射為基礎(chǔ)。iBATIS的是保持?jǐn)?shù)據(jù)到持久層的一個框架,它包含了DAO層和SQL映射兩個部分,而且還提供了一個用iBATIS開發(fā)出來的一個例子JPetStore來使新手更快的理解掌握。和其它的數(shù)據(jù)庫連接框架諸如Hibernate等全套封裝起來的ORM比起來,iBATIS則是以一種半封裝的ORM的方式來實(shí)現(xiàn)的,它最大的特點(diǎn)就是小巧、上手很快。當(dāng)前iBATIS只支持Ruby、Java和.NET三種語言編寫的程序的集成使用。“半自動化”的概念的理解可能有點(diǎn)困難。相對當(dāng)前行業(yè)內(nèi)主流的ORM(對象關(guān)系映射)來說,無論是Apache
OJB還是Hibernate,都是對數(shù)據(jù)庫進(jìn)行封裝,同時提供了從POJO到具體數(shù)據(jù)庫表的一個映射機(jī)制。開發(fā)人員通常只需要把POJO到哪張數(shù)據(jù)庫表的映射關(guān)系定義好,就可以使用項(xiàng)目所集成的數(shù)據(jù)庫框架封裝好的方法來對映射的實(shí)體類進(jìn)行操作,既可以完成數(shù)據(jù)庫的增刪改查,這樣一來,開發(fā)人員有時候都不需要對SQL語句有著熟練的應(yīng)用,因?yàn)樵谡{(diào)用封裝的相關(guān)方法后,該框架就會自動生成對應(yīng)的SQL語句對數(shù)據(jù)庫進(jìn)行操作。在現(xiàn)在的快節(jié)奏社會,這樣的快捷開發(fā)方式非常的便捷,而且再一次降低開發(fā)人員的門檻。但是在某些特定的開發(fā)環(huán)境下,這種一站式的處理方法卻并不適合。iBATIS以一種“半自動化”的姿態(tài)高調(diào)出現(xiàn)很好的彌補(bǔ)了這個缺陷。這個“半自動化”的含義是對于其它的數(shù)據(jù)庫框架比如說hibernate之類的封裝全部操作的相當(dāng)于“全自動化”的ORM實(shí)現(xiàn)的機(jī)制來說的,“全自動化”的ORM實(shí)現(xiàn)主要靠建立數(shù)據(jù)庫表和POJO的一個映射關(guān)系,并且可以根據(jù)調(diào)用的方法自動生成SQL語句完成對數(shù)據(jù)庫操作,而不是像iBATIS那樣的建立SQL語句和POJO的映射,把執(zhí)行結(jié)果封裝到對應(yīng)bean中。從根本上講,iBATIS主要是用XML格式的文件來配置相關(guān)映射和集成框架,然后在配置文件中直接寫SQL語句然后對執(zhí)行結(jié)果進(jìn)行處理,即將定義的對象映射到具體SQL語句執(zhí)行的結(jié)果的方式,因此它使用起來更加的靈活,并且針對不同數(shù)據(jù)庫的專有函數(shù)來說,不需要去進(jìn)行過多處理。對于系統(tǒng)的服務(wù)器開發(fā)人員來說,使用半封裝的iBATIS提供的對象關(guān)系映射機(jī)制時面對的是一個純粹的Java對象,這一點(diǎn)和其它框架基本相同。至于具體的對數(shù)據(jù)庫操作的方式,Hibernate是封裝好的可自動生成操作語句的方法,iBATIS是自己配置結(jié)果映射然后寫自己所需的SQL語句。相對于Hibernate等對象關(guān)系映射的機(jī)制來說,iBATIS就比較繁瑣,不僅要對數(shù)據(jù)庫語句有很好的理解,而且代碼量也比較多,相關(guān)數(shù)據(jù)庫遷移起來也不方便;但是也是因?yàn)檫@樣,它才可以更加的靈活,更加的自由化。在這種全封裝機(jī)制的框架遍地的情況下,iBATIS是必不可少的。2.2.3JQuery在薩姆.斯蒂芬森開發(fā)出更有利于開發(fā)人員的Javascript庫prototype之后,越來越多的優(yōu)秀JS庫出現(xiàn)在開發(fā)人員的視線當(dāng)中,比如說比較出色的輕量級的JS庫JQuery。它有非常強(qiáng)大的兼容性,兼容范圍不僅包括了CSS3,還有各式各樣的令開發(fā)人員非常頭痛的冷門或傳統(tǒng)的瀏覽器,比如說IE
6.0、
Opera
9.0等,不過jQuery官方發(fā)布消息稱后面的2.0+版本就不再提供對IE6/7/8瀏覽器的支持。jQuery還可以使用戶非??旖莸倪M(jìn)行html頁面的設(shè)計(jì)和實(shí)現(xiàn),比如說相關(guān)動畫效果、標(biāo)簽選擇,常用函數(shù)等等,而且還對和后臺進(jìn)行動態(tài)交互的ajax進(jìn)行了封裝,減少了開發(fā)人員的代碼量,理解起來也很快。jQuery能有現(xiàn)在的地位還有一個最主要的原因是它的API很全面,細(xì)節(jié)方面寫的也很詳細(xì),看似沒必要,其實(shí)對于新開發(fā)來說,這是非常重要的,而且對比文檔去理解底層實(shí)現(xiàn)原理會更加容易,并且還有很豐富的插件可以使用。jQuery的還讓開發(fā)人員不需要在html代碼中插入JS來實(shí)現(xiàn)相關(guān)功能和效果,只需要找到標(biāo)簽的id或class就可以分離JS和html進(jìn)行編程實(shí)現(xiàn)。jQuery使用的是命名源于麻省理工學(xué)院的MIT許可協(xié)議,是一個免費(fèi)的開源框架,它的核心理念是writeless,domore,并且在我看來已經(jīng)實(shí)現(xiàn)的很好了。2006年一月份的時候,一個叫做JohnResig的美國人在紐約舉行的國際網(wǎng)絡(luò)研討會上進(jìn)行了發(fā)布,因此吸引了世界各地的很多JS高手前去加入,然后由DaveMethvin帶隊(duì)進(jìn)行進(jìn)一步的完善和實(shí)現(xiàn),直到現(xiàn)在流行在全國的開發(fā)人員中,并且世界上訪問最多的網(wǎng)頁中有百分之五十五的用戶使用的是jQuery。jQuery這個詞是由是JavaScript和Query組合而來的,詞面意思是對JavaScript的查詢,也就是輔助JavaScript開發(fā)的庫。jQuery部分常用實(shí)例如下:選擇器:$("input")選取頁面上所有<input>元素。$("input.name")選取頁面上包含class為"name"的全部<input>元素。$("#user")選取頁面上id為"user"的元素。$("[src]")選取頁面上帶有src屬性的全部元素。$("[src='javascript:void(0)']")選取頁面上帶有src值等于"'javascript:void(0)"的全部元素。$("[src!=''javascript:void(0)']")選取頁面上帶有src值不等于"'javascript:void(0)"的全部元素。$("[src^='/www/']")選取頁面上src值以/www/"開頭的全部元素。$("[src$='end']")選取頁面上src值以"'end'"結(jié)尾的全部元素。事件處理:直接綁定指定事件,事件類型即方法名,支持click、focus、blur、submit等。$("#user").click(function(){//這里填寫點(diǎn)擊后的邏輯});用on來綁定事件,off來解綁事件。從版本1.7.2之后才支持,之前使用的是bind等方法。$("#button").on('click',function(){//這里填寫點(diǎn)擊后的邏輯});AJAX:jQuery$.get()方法:$.get(請求地址,返回函數(shù));jQuery$.post()方法:$.post(請求地址,請求參數(shù),回調(diào)函數(shù));jQuery$.ajax()方法(即我通常使用的方法): $,ajax({ url:”xxx”,請求的地址 type:”post”,請求的方式 data:{ xx:xx, xxx:xxx},請求的參數(shù)async:false,是否異步請求cache:false,是否緩存dataType:”json”,返回值類型success:function(){ },請求成功執(zhí)行方法error:function(){ }請求失敗執(zhí)行方法});更多的方法和具體如何的使用可以去查詢jQuery的API。2.2.4BootstrapBootstrap是一個基于CSS、JS和html的前端UI框架,最開始出現(xiàn)在Twitter上面,因其簡潔美觀的界面而非常受歡迎。Bootstrap是一款如同其它框架設(shè)計(jì)的有相同原則的框架,主要目的就是自由簡單,讓開發(fā)人員的開發(fā)更加的高效便捷。它的設(shè)計(jì)師是來自Twitter的JacobThornton和MarkOtto,他們二人用動態(tài)的CSS語言Less合作設(shè)計(jì)出了這個優(yōu)秀的HTML/CSS框架。因環(huán)境所致,大部分小的web開發(fā)公司并不會有美工這個的職業(yè),讓形象在大多數(shù)人心中并不友好的程序員來進(jìn)行頁面的規(guī)劃還是不現(xiàn)實(shí)的,Bootstrap以其優(yōu)美大方的界面而受眾多程序員的歡迎,并且在開源代碼庫GitHub上一直很熱門,包括在美國航空航天局的微軟全國廣播公司的BreakingNews頁面用的都是這個框架。在我國的一些移動端的開發(fā)人員所熟悉的WeX5等開源UI框架也是對Bootstrap的源碼進(jìn)行優(yōu)化后設(shè)計(jì)出來的。Bootstrap中有著非常充足的Web組件,一般的常用組件都有,不常用的也可以基于部分的組件組合而成,具體包括的組件有:分頁、進(jìn)度條、縮略圖、下拉菜單、按鈕下拉菜單、按鈕組、導(dǎo)航、導(dǎo)航條、路徑導(dǎo)航等。Bootstrap自還有13個基于jQuery的動態(tài)加載的插件,這些插件使Bootstrap中的相關(guān)組件更加的靈活。其中就有:模式對話框、下拉菜單、滾動監(jiān)聽、按鈕等。Bootstrap同時還可以根據(jù)自己的需求對展示主體和效果進(jìn)行一個定制,只要輸入自己滿意的樣式就可下載響應(yīng)的js和css包。因?yàn)檫@些功能,用它搭建一個完整美觀的網(wǎng)站就非常的容易了。2.2.5EasyUIEasyUI包含了豐富的基于jQuery的UI插件,它的目標(biāo)就是使web開發(fā)人員可以更快捷、更輕松、更方便的開發(fā)出一個界面友好,功能強(qiáng)大的網(wǎng)站。EasyUI使用戶摒棄了復(fù)雜的JS程序,并且不需要過多的去了解CSS,只需要對html的標(biāo)簽有著熟悉的使用就可以了。EasyUI提供的UI插件快捷方便,比如:Layout、Menu與Button、Form、Window、DataGrid和Tree等等,并且可以對多個功能組合使用和擴(kuò)展,比如說樹形表格、可編輯的表格和報(bào)表等等。相對于extjs來說,EasyUI就是一個輕量級的框架,雖然功能沒有前者豐富,但是頁面上更加美觀,并且可以在官網(wǎng)上進(jìn)行主題的定制,同時還有多個主題供用戶選擇,這一點(diǎn)還是非常的不錯的。EasyUI相比較而言有如下的幾個特點(diǎn):1、它是以jQuery為基礎(chǔ)的,并且擁有豐富的UI組件和插件。2、提供和服務(wù)器有交互插件的數(shù)據(jù)加工和渲染。3、EasyUI有直接寫成JS和在標(biāo)簽上加屬性兩種方式來對組件進(jìn)行加工渲染。4、在對應(yīng)標(biāo)簽添加data-options這個屬性就可以完美的支持HTML5。5、對一個頁面進(jìn)行開發(fā)時使用EasyUI會更加快速。6、使用起來非常簡便,而且功能相當(dāng)豐富。7、可以按照自己的需求對相關(guān)組件進(jìn)行組合、擴(kuò)展,還有多種主題可供選擇。8、現(xiàn)在仍在繼續(xù)更新,所以可以繼續(xù)的改進(jìn)和彌補(bǔ)自己的不足之處。2.3HTML語言HTML的全稱叫做HyperTextMarkupLanguage,中文叫超文本標(biāo)記語言,是標(biāo)準(zhǔn)通用標(biāo)記語言下的一個應(yīng)用。因?yàn)閔tml頁面可以包含圖片、音樂、視頻、鏈接等非文本模塊,所以叫做“超文本”。一個html頁面包括head和body兩個部分,head部分就是這個頁面的相關(guān)信息,比如說編碼、標(biāo)題、設(shè)計(jì)者之類的;body部分就是這個頁面上展現(xiàn)的具體內(nèi)容。2.3.1由來Web上把一個包含多種模塊如文字、圖片、音樂等多種媒體的文檔叫做一個頁面。當(dāng)訪問一個網(wǎng)頁的時候,輸入網(wǎng)址首先展現(xiàn)的頁面叫做首頁,或者叫主頁,往往一個首頁里面會有很多點(diǎn)擊會跳轉(zhuǎn)到其他頁面或下載相關(guān)文件的超鏈接,超鏈接就是點(diǎn)擊了之后可以跳轉(zhuǎn)到對應(yīng)的頁面或者下載對應(yīng)的內(nèi)容得一個URL,這是html被大范圍使用的一個非常重要的原因。通常的網(wǎng)站是指用于展示特定內(nèi)容的相關(guān)整體網(wǎng)頁的集合。HTML的設(shè)計(jì)主要是用來制作網(wǎng)頁的顯示內(nèi)容和查找網(wǎng)頁的相關(guān)信息。網(wǎng)頁設(shè)計(jì)代碼的本質(zhì)就是HTML語言,搭配其它的諸如CSS、JavaScript和服務(wù)器程序等Web技術(shù)就可以設(shè)計(jì)元素多樣化、功能齊全的網(wǎng)頁。所以說Web的編程設(shè)計(jì)是以HTML為基礎(chǔ)進(jìn)行實(shí)現(xiàn)和拓展的。超文本標(biāo)記語言因?yàn)樵谖谋局邪鼣U(kuò)了多個具有超鏈接功能的點(diǎn)擊模塊,所以被叫做超文本標(biāo)記語言。2.3.2定義HTML主要通過定義的元素和對應(yīng)屬性來標(biāo)記一個頁面中的不同模塊和功能的展示效果,它實(shí)際上是一種規(guī)范,一種現(xiàn)在的頁面設(shè)計(jì)都遵守的一個標(biāo)準(zhǔn)。html文件就是一個文本文件,然后在對應(yīng)的部分加入元素和定義相關(guān)的屬性,就相當(dāng)于把一個人的肖像描述給一個畫家來聽,然后畫家根據(jù)描述的內(nèi)容進(jìn)行繪畫,完成一個人物的展現(xiàn),這里面的畫家角色主要由瀏覽器擔(dān)任。瀏覽器從頭到尾的對網(wǎng)頁文件進(jìn)行分析,然后根據(jù)HTML的標(biāo)準(zhǔn)對相關(guān)的元素和屬性進(jìn)行渲染和展示,如果在編寫的過程中出錯,瀏覽器并不會停止解析,指導(dǎo)一個文本文件全部渲染完畢,從而展示一個頁面,開發(fā)人員只能根據(jù)最后的顯示效果和自己設(shè)定的模樣進(jìn)行分析調(diào)整錯誤代碼,從而達(dá)到一個頁面的設(shè)計(jì)完成。這邊需要指出一點(diǎn)就是不同的畫師會有不同的繪畫風(fēng)格,即不同瀏覽器對不同元素或者屬性的解析也是有不同效果的,所以這一點(diǎn)還是要開發(fā)人員進(jìn)行注意和調(diào)整的。2.3.3語言特點(diǎn)雖然HTML的編寫十分簡單,但是它有著強(qiáng)大的功能,同時在一個html文本文件中可以包含多種不同數(shù)據(jù)格式的文件,這也是現(xiàn)在萬維網(wǎng)使用范圍如此廣泛的一個原因,它主要由如下的幾個特點(diǎn):簡易性:HTML的升級主要是在老的版本上進(jìn)行一個內(nèi)容的擴(kuò)展,而且不改變已有元素和屬性,因此更為靈活,版本更新也不會有負(fù)效果??蓴U(kuò)展性:由于HTML的廣泛應(yīng)用,所以必不可少的有功能擴(kuò)展和元素增加等使用需求,因?yàn)槠涫褂玫氖亲宇愒氐脑O(shè)計(jì)方式,所以保證了對系統(tǒng)進(jìn)行擴(kuò)展的性能。平臺無關(guān)性:不同人員會使用不同的電腦,不同的電腦也會有不同的操作系統(tǒng),不同的操作系統(tǒng)就涉及到不同的編程語言,HTML語言在多個平臺上都可以很好的使用,這是萬維網(wǎng)使用廣泛的另外的一個原因。通用性:HTML一種簡單、通用的全置標(biāo)記語言,是現(xiàn)在的網(wǎng)絡(luò)上的通用語言,。開發(fā)人員可以用它制作文本、圖片甚至音樂、視頻互相結(jié)合的復(fù)雜的網(wǎng)頁,并且無論用戶使用的是什么類型的瀏覽器,都可以訪問到對應(yīng)的網(wǎng)站?,F(xiàn)如今手機(jī)的部分軟件界面都可以用HTML進(jìn)行設(shè)計(jì),新出的HTML5大有替代安卓手機(jī)軟件界面設(shè)計(jì)方式的趨勢,手機(jī)淘寶等頁面替換頻繁的軟件也都是用設(shè)計(jì)簡單靈活的HTML替代iOS和安卓原生編程語言的2.3.4整體結(jié)構(gòu)一個完整的網(wǎng)站是以多個HTML文本文件組合而成的,HTML文本文件都是用.htm或.html作為擴(kuò)展名。通??梢陨蒚XT文本文件的編輯器都可以用來編寫HTML文件,只需要把最終的文件后綴名改成.htm或.html就可以進(jìn)行頁面的顯示。一個標(biāo)準(zhǔn)的HTML文件都會有標(biāo)準(zhǔn)的整體結(jié)構(gòu),即標(biāo)記頁面頭部的<head>標(biāo)簽、標(biāo)記頁面實(shí)體的<body>標(biāo)簽和標(biāo)記頁面整體的<html>標(biāo)簽,一般的標(biāo)簽都是有結(jié)尾標(biāo)志的,比如說文件實(shí)體部分的結(jié)尾就需要用</body>來結(jié)束,也有部分獨(dú)立標(biāo)簽,比如說<input/>和<img/>等,由此可見標(biāo)簽的結(jié)尾即加上一個“/”就可以了。2.4本章小結(jié)本章主要介紹了本系統(tǒng)所涉及的框架以及技術(shù),開發(fā)語言主要涉及JAVA和HTML,前端框架主要是jQuery、Bootstrap和EasyUI,后端框架是SpringMVC,數(shù)據(jù)庫交互用的是iBATIS,數(shù)據(jù)庫使用的是MySQL,好的工具對開發(fā)是有很大的助力的,好的框架不僅可以使代碼規(guī)范化,而且表現(xiàn)的形式也是比自己設(shè)計(jì)的好很多,熟練使用這些工具和框架是我能開發(fā)出本系統(tǒng)的基本條件。第三章需求分析與總體設(shè)計(jì)3.1開發(fā)的時代背景隨著餐飲行業(yè)的不斷創(chuàng)新,現(xiàn)代信息技術(shù)的不斷發(fā)展,人民飲食效率的不斷提高,在線點(diǎn)餐成為大勢所趨。學(xué)生學(xué)習(xí)生活的緊迫,餐飲行業(yè)的人員緊張以及如何有效率的訂餐和管理成為了現(xiàn)階段餐飲行業(yè)的問題,由于學(xué)生的接受能力出色,并且他們需要一種更快捷,更高效的的飲食習(xí)慣,從而有更多的時間來學(xué)習(xí),而且餐飲行業(yè)的人員問題也可以得到解決,并且有個更直觀的訂單管理的方式,同時還可以有效的接受客戶意見并做出改進(jìn)。所以,校園在線訂餐系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)是一項(xiàng)必不可少的任務(wù)。3.2功能需求在進(jìn)行校園在線訂餐系統(tǒng)設(shè)計(jì)開發(fā)所達(dá)到的需求,這其中就包括買家的餐品購買和賣家的商品管理。3.2.1買家購買系統(tǒng)提供商品的不登錄瀏覽,查看詳情以及評價(jià),餐廳商品的分類還有系統(tǒng)公告的查看。新用戶可以注冊賬號,填好餐廳所需要的信息即可進(jìn)行登錄,然后就可以購買商品,添加購物車等操作。添加至購物車的商品可以刪除也可以購買,購買的商品可以以評價(jià)的方式對餐廳提出自己的建議以及評價(jià)。3.2.2商品管理商品管理模塊則是賣家操作的后臺管理模塊,賣家登錄了后可以對買家的賬號進(jìn)行鎖定,也可以對管理員的賬號進(jìn)行修改,最主要的功能就是對商品進(jìn)行管理,也可對商品進(jìn)行分類操作,同時賣家也可對買家的評價(jià)進(jìn)行一個查看,相關(guān)模塊的搜索功能也是必須要有的,從而簡化賣家的操作,本系統(tǒng)還特意設(shè)置一個公告欄對賣家想要發(fā)布的信息進(jìn)行修改和增加,從而達(dá)到賣家和買家的雙向互動。3.3總體設(shè)計(jì)根據(jù)系統(tǒng)的需求,初步擬定的系統(tǒng)架構(gòu)總體設(shè)計(jì)如圖3-1校園校園在線訂餐系統(tǒng)買家登錄賣家登錄餐品選擇賬號設(shè)置餐品購買餐品信息設(shè)置餐品出售統(tǒng)計(jì)賬號設(shè)置圖3-1系統(tǒng)結(jié)構(gòu)圖據(jù)圖3-2所示,將在線訂餐系統(tǒng)分為兩個模塊,分別為買家模塊和賣家。其中買家模塊又分為餐品選擇、餐品購買和賬號設(shè)置,賣家模塊則包括餐品管理、餐品統(tǒng)計(jì)和賬號設(shè)置。3.3.1用戶登錄用戶分為賣家和買家兩個模塊,由于默認(rèn)為單家餐廳,即賣家也是管理員,不同用戶登錄有不同的功能。對部分模塊不登錄的用戶進(jìn)行攔截。3.3.2賣家功能1)商品管理:對商品進(jìn)行簡單的增加,刪除,上架下架等基礎(chǔ)操作。2)類別管理:對商品類別進(jìn)行管理,從而在前臺首頁進(jìn)行推薦。3)訂單管理:對已購買的訂單的進(jìn)行搜索和信息查看。4)公告管理:對首頁餐廳的公告欄進(jìn)行修改。5)用戶管理:對買家進(jìn)行管理。6)賬戶設(shè)置:修改和添加管理員。7)賬戶登出:賣家退出系統(tǒng)。3.3.3買家功能1)買家注冊:可以注冊成會員并登陸訂餐。2)購物車:對添加的餐品進(jìn)行管理。3)個人中心:對個人賬號的設(shè)置,個人信息的修改。4)訂餐功能:餐品的瀏覽、搜索、選擇以及下單或添加購物車5)訂單管理:對未完成或已完成訂單進(jìn)行查看。6)商品評價(jià):對訂單進(jìn)行評價(jià),從而提出對餐廳的建議。7)注銷退出:買家退出系統(tǒng)。3.4本章小結(jié)本章主要介紹軟件的需求分析,從功能需求,運(yùn)行需求等方面進(jìn)行全面的分析。功能需求中提出了系統(tǒng)應(yīng)完成些什么功能,功能之間的聯(lián)系,為下一步的軟件的模塊設(shè)計(jì)打下基礎(chǔ)。運(yùn)行需求中對主要的界面及其出現(xiàn)故障時的處理情況。本章主要為了下一章的系統(tǒng)設(shè)計(jì)打下基礎(chǔ),簡單分析了整個軟件的需求情況。第四章設(shè)計(jì)與實(shí)現(xiàn)4.1用戶登錄在使用系統(tǒng)的時候,需要用戶進(jìn)行登錄,我設(shè)計(jì)的是兩個登錄模塊,即買家和賣家是不同的登錄模塊,這里我把賣家的定為后臺系統(tǒng),買家的定為前臺系統(tǒng),因?yàn)閮蓚€用戶涉及的功能差別很大,所以我用不同登錄進(jìn)行明顯的區(qū)分。在用戶未登錄之前要進(jìn)行過濾,某些不可用模塊要跳轉(zhuǎn)到登陸頁面的判斷,這個模塊我用了一個filter過濾器,首先在web.xml中添加配置: <filter> <filter-name>sessionFilter</filter-name> <filter-class>com.lzj.filter.SessionFilter</filter-class> </filter> <filter-mapping> <filter-name>sessionFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>然后在對應(yīng)的filter中進(jìn)行編寫過濾條件: publicclassSessionFilterextendsOncePerRequestFilter{protectedvoiddoFilterInternal(HttpServletRequestrequest,HttpServletResponseresponse,FilterChainfilterChain)throwsServletException,IOException{//把不進(jìn)行過濾的URL放到這里String[]notFilter=newString[]{"login","dengLu","userLogin","managerLogin","addGwc","addProductList"};//獲取請求的URLStringuri=request.getRequestURI();//URL中包含user時才進(jìn)行過濾,前臺系統(tǒng)的過濾if(uri.indexOf("/user/")!=-1){//定義是否過濾booleandoFilter=true;for(Strings:notFilter){//遍歷請求的地址if(uri.indexOf(s)!=-1){//如果URL中包含不過濾的URL,則不進(jìn)行過濾doFilter=false;break;}}if(doFilter){//執(zhí)行過濾//從session中獲取用戶idObjectobj=request.getSession().getAttribute("userid");if(null==obj){ //未登錄返回登錄界面 response.sendRedirect("login");}else{//如果登陸就繼續(xù)filterChain.doFilter(request,response);}}else{//如果包含user則不執(zhí)行過濾,繼續(xù)filterChain.doFilter(request,response);}}elseif(uri.indexOf("/manager/")!=-1){//后臺管理系統(tǒng)的過濾booleandoFilter=true;for(Strings:notFilter){if(uri.indexOf(s)!=-1){doFilter=false;break;}}if(doFilter){Objectobj=request.getSession().getAttribute("managerid");if(null==obj){ response.sendRedirect("login");}else{filterChain.doFilter(request,response);}}else{filterChain.doFilter(request,response);}}else{filterChain.doFilter(request,response);}}}在程序中我用了三個Controller,一個MainController,一個UserController,一個ManagerController,這個過濾器主要針對UserController和ManagerController進(jìn)行過濾達(dá)到不登錄的用戶訪問部分功能跳轉(zhuǎn)到登陸界面的作用4.2功能模塊設(shè)計(jì)FreeMarker的模板文件是以ftl為后綴的文件,內(nèi)容的寫法和jsp差不多,主要就是不用使用JSTL標(biāo)簽和EL表達(dá)式,并且有自己的標(biāo)簽和函數(shù),后臺則用ModelAndView類進(jìn)行對返回界面的處理4.2.1賣家模塊后臺的ui插件主要使用的是EasyUI,在頁面中引入下面的兩個js和一個css包:<scriptsrc="${base}/js/jquery.js"></script><scriptsrc="${base}/js/jquery.easyui.min.js"></script><linkhref="${base}/css/easyui.css"rel="stylesheet"/>如果想使用EasyUI的圖標(biāo),則需要再引入一個css包:<linkhref="${base}/css/icon.css"rel="stylesheet"/>${base}是FreeMarker的顯示后臺傳過來的參數(shù)的一種表現(xiàn)形式,這一點(diǎn)和EL表達(dá)式一樣,我把項(xiàng)目地址設(shè)為一個全局變量base,這樣頁面在引用共同的js或css的時候就不會因?yàn)槁窂降膯栴}發(fā)生錯誤。EasyUI很好的封裝了一個表格插件DataGrid,只要在后臺接收固定參數(shù),即可展現(xiàn)一個簡潔方便的帶分頁的表格,從而對數(shù)據(jù)進(jìn)行顯示,獲取用戶列表方法如下:@RequestMapping(value="/getYhGL")@ResponseBodypublicDataGridgetUserGl(@RequestParam(value="searchtext",required=false)Stringsearchtext,@RequestParam("page")intpage,@RequestParam("rows")introws){ Mapmap=newHashMap(); map.put("searchtext",searchtext); returnmanagerService.getUserGl(map,page,rows);}相關(guān)注釋的含義上面對SpringMVC的介紹中已經(jīng)提到過了,searchtext是我定義的一個搜索的參數(shù),page是DataGrid傳的頁數(shù)參數(shù),rows是每頁顯示條數(shù)的參數(shù),我把DataGrid需要的參數(shù)寫了一個bean,把獲取的內(nèi)容也在數(shù)據(jù)庫交互的BaseDao中寫了一個方法,所以直接按照項(xiàng)目層級調(diào)用到Dao層,調(diào)用getDataGrid方法就可以了。ftl頁面上則使用封裝好的方法對表格進(jìn)行渲染,代碼如下:$('#usertable').datagrid({ width:$(this).width()*0.98,//寬度 rownumbers:true,//是否顯示行號 pagination:true,//是否分頁fit:true,//是否自適應(yīng)表格 fitColumns:true,//是否自適應(yīng)行 height:'auto',//表格高度 getYhGL"url:"getYhGL",//請求地址pageSize:10,//每頁顯示行數(shù) pageList:[10,15,20],//可選擇顯示行數(shù) onClickRow:function(){ $('#usertable').datagrid('clearSelections'); },//取消點(diǎn)擊高亮});列對應(yīng)的屬性我是在標(biāo)簽中定義的,下面是對應(yīng)賬號列:<thdata-options="field:'account',align:'center',width:100">賬號</th>對行列進(jìn)行操作對應(yīng)的是js的方法,我基本上都是用ajax實(shí)現(xiàn)的,ajax的寫法上面的jQuery中已經(jīng)說過了,后臺調(diào)用相應(yīng)的增加或刪除或修改方法即可實(shí)現(xiàn)。4.2.2買家模塊后臺的方法大同小異,買家模塊因?yàn)榻缑姹容^重要,所以我選擇的是注重美觀的Bootstrap框架。同樣需要引入三個包:<linkrel="stylesheet"href="${base}/css/bootstrap.min.css"><scriptsrc="${base}/js/jquery.js"></script><scriptsrc="${base}/js/bootstrap.min.js"></script>Bootrstrap注重的是頁面展示,所以基于js的動態(tài)方法并不多,并且在標(biāo)簽中加入相應(yīng)的class就可以展現(xiàn)出來,所以雖然展示美觀,但是編程寫起來繁瑣,js方法到需要自己寫。僅僅一個商品展示的分頁模塊就需要寫的完全,還要適應(yīng)頁面的其他要求。4.3SpringMVC配置首先在web.xml中加入spring的配置:<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping><context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext*.xml</param-value></context-param>然后新建springmvc-servlet.xml,加入需要的配置<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans" xmlns:xsi=/2001/XMLSchema-instancexmlns:mvc="/schema/mvc" xmlns:context="/schema/context" xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-3.2.xsd /schema/mvc /schema/mvc/spring-mvc-3.2.xsd /schema/context /schema/context/spring-context-3.2.xsd"><!--自動掃描該包,使SpringMVC認(rèn)為包下用了@controller注解的類是控制器--><context:component-scanbase-package="com.lzj.controller"/><mvc:annotation-driven><mvc:message-convertersregister-defaults="true"><beanclass="org.springframework.http.converter.StringHttpMessageConverter"><constructor-argvalue="UTF-8"index="0"></constructor-arg><propertyname="supportedMediaTypes"value="text/plain;charset=UTF-8"/></bean><beanid="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"><!--為了處理返回的JSON數(shù)據(jù)的編碼,默認(rèn)是ISO-88859-1的,這里把它設(shè)置為UTF-8,解決有亂碼的情況--><propertyname="supportedMediaTypes"value="text/html;charset=UTF-8"/></bean></mvc:message-converters></mvc:annotation-driven> <!--公共映射配置--><mvc:view-controllerpath="/"view-name="index"/><mvc:default-servlet-handler/> <!--處理JSON數(shù)據(jù)轉(zhuǎn)換的--> <!--SpringMVC上傳文件時,需要配置MultipartResolver處理器--><beanid="multipartResolver"class="mons.CommonsMultipartResolver"><!--指定所上傳文件的總大小不能超過2000KB。注意maxUploadSize屬性的限制不是針對單個文件,而是所有文件的容量之和--><propertyname="maxUploadSize"value="20000000"/></bean><!--SpringMVC在超出上傳文件限制時,會拋出org.springframework.web.multipart.MaxUploadSizeExceededException--><!--該異常是SpringMVC在檢查上傳的文件信息時拋出來的,而且此時還沒有進(jìn)入到Controller方法中--><beanid="exceptionResolver"class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><propertyname="exceptionMappings"><props><!--遇到MaxUploadSizeExceededException異常時,自動跳轉(zhuǎn)到/WEB-INF/jsp/error_fileupload.jsp頁面--><propkey="org.springframework.web.multipart.MaxUploadSizeExceededException">index.jsp</prop></props></property></bean><!--視圖解析器--><beanid="viewResolver"class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"><propertyname="viewClass"value="org.springframework.web.servlet.view.freemarker.StaticFreeMarkerView"/><propertyname="cache"value="true"/><!--propertyname="prefix"value="/WEB-INF/views/"--><propertyname="suffix"value=".ftl"/><propertyname="contentType"value="text/html;charset=UTF-8"/><propertyname="allowSessionOverride"value="true"/><propertyname="allowRequestOverride"value="true"/><propertyname="requestContextAttribute"value="request"/><propertyname="exposeSpringMacroHelpers"value="true"/><propertyname="exposeRequestAttributes"value="true"/><propertyname="exposeSessionAttributes"value="true"/></bean><beanid="freemarkerConfig"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><propertyname="templateLoaderPath"> <value>/WEB-INF/views/</value></property><propertyname="freemarkerSettings"> <props> <propkey="locale">zh_CN</prop> <propkey="defaultEncoding">UTF-8</prop> <propkey="date_format">yyyy-MM-dd</prop> <propkey="time_format">HH:mm:ss</prop> <propkey="datetime_format">yyyy-MM-ddHH:mm:ss</prop> <propkey="number_format">0.################</prop> </props></property></bean><!--異常解析器--><beanid="simpleMappingExceptionResolver"class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><propertyname="exceptionMappings"> <props> <propkey="org.springframework.web.multipart.MaxUploadSizeExceededException">common/fileerror</prop> <propkey="java.lang.exception">common/fileerror</prop> </props></property></bean></beans>4.4本章小結(jié)本章主要介紹了登錄、過濾器、前后端部分功能代碼的實(shí)現(xiàn)方式以及前端框架的使用方式和本系統(tǒng)最重要的后臺框架SpringMVC的配置內(nèi)容。在登錄模塊主要闡述了登錄的方式以及各系統(tǒng)都會有的防止未登錄訪問的過濾,一般可以用過濾器和攔截器兩種方式,我使用的是過濾器并附上了實(shí)現(xiàn)代碼。然后講解了前后端的部分方法的代碼,因?yàn)閺膶?shí)現(xiàn)上來說,根據(jù)功能不同查看相關(guān)API進(jìn)行調(diào)整就可以了,大致上還是相同的實(shí)現(xiàn)原理。最后我著重附上了后臺的SpringMVC框架的搭建,并且對作為本系統(tǒng)最重要的一部分內(nèi)容進(jìn)行了注釋。本章所描述實(shí)現(xiàn)模塊的代碼方面也為下一章各個模塊的的測試提供相應(yīng)方向、分類和測試標(biāo)準(zhǔn)。第五章系統(tǒng)演示與測試5.1買家界面演示與測試5.1.1系統(tǒng)主界面系統(tǒng)有一個初始主界面,如圖5-1,主要功能是展現(xiàn)買家的可用菜單
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租賃房動遷協(xié)議書
- 電商工作合同范本
- 房屋搭建合同范本
- 清洗衣服合同范本
- 糧食合同范本模板
- 網(wǎng)上活動合同范本
- 企業(yè)終止協(xié)議書
- 入駐銀行協(xié)議書
- 全套空白協(xié)議書
- 工程超量合同范本
- 地震波速反演方法-洞察及研究
- 百年未有之大變局課件
- 2025年時事政治考試100題及答案
- 應(yīng)急救援電源
- 電力行業(yè)電力工程設(shè)計(jì)師崗位招聘考試試卷及答案
- 2025年北京市建筑施工作業(yè)人員安全生產(chǎn)知識教育培訓(xùn)考核試卷E卷及答案
- 中鐵群安員培訓(xùn)
- 2024年云南省第一人民醫(yī)院招聘考試真題
- 2025急性高甘油三酯血癥胰腺炎康復(fù)期多學(xué)科管理共識解讀
- 2025年事業(yè)單位面試熱點(diǎn)題目及答案解析
- 湖北省宜昌市秭歸縣2026屆物理八年級第一學(xué)期期末學(xué)業(yè)水平測試模擬試題含解析
評論
0/150
提交評論