基于WEB的易語言論壇系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于WEB的易語言論壇系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于WEB的易語言論壇系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于WEB的易語言論壇系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于WEB的易語言論壇系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩62頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

畢業(yè)設(shè)計(jì)(論文)論文題目基于WEB的易語言論壇系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)thesisTopicDesignandImplementationforBBSSystembasedonWEB學(xué)生姓名學(xué)號(hào)所在院系軟件工程學(xué)院專業(yè)班級(jí)軟件工程1102班導(dǎo)師姓名職稱完成日期2015年5月18日2015年5月18日編號(hào):__________畢業(yè)設(shè)計(jì)(論文)答辯許可證軟件工程學(xué)院軟件工程系軟件工程專業(yè)學(xué)生所編寫的畢業(yè)設(shè)計(jì)(論文)56頁,字?jǐn)?shù)22874,符合畢業(yè)設(shè)計(jì)(論文)大綱的要求。經(jīng)審查:該生已學(xué)完教學(xué)計(jì)劃規(guī)定的全部課程,成績合格,畢業(yè)設(shè)計(jì)電子文檔最后一稿已交,準(zhǔn)予參加畢業(yè)設(shè)計(jì)(論文)答辯。相關(guān)材料材料名稱數(shù)量畢業(yè)設(shè)計(jì)(論文)1冊(cè)畢業(yè)論文縮寫1冊(cè)答辯匯報(bào)稿1份畢業(yè)設(shè)計(jì)(論文)電子版(最后一稿磁盤文件)1套指導(dǎo)教師:(簽名)院長(系主任):(簽名)年月日畢業(yè)設(shè)計(jì)(論文)任務(wù)書畢業(yè)設(shè)計(jì)(論文)題目:基于WEB的易語言論壇系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(論文)要求及原始數(shù)據(jù)(資料):(1)綜述國內(nèi)JavaEEWEB應(yīng)用開發(fā)技術(shù)的現(xiàn)狀,了解JavaEEWEB項(xiàng)目開發(fā)的相關(guān)技術(shù)。(2)掌握J(rèn)avaEEWEB項(xiàng)目開發(fā)的基礎(chǔ)知識(shí)與基本能力,掌握SpringMVC與Hibernate兩大框架技術(shù),掌握使用框架技術(shù)開發(fā)JavaEEWEB項(xiàng)目的能力。(3)設(shè)計(jì)并實(shí)現(xiàn)一個(gè)基于WEB的論壇系統(tǒng)項(xiàng)目,總結(jié)通過此次項(xiàng)目實(shí)戰(zhàn)在知識(shí)與技能方面的收獲。(4)訓(xùn)練檢索文件和利用文獻(xiàn)資料的能力,訓(xùn)練撰寫技術(shù)文檔與學(xué)位論文的能力。(5)題目:應(yīng)簡(jiǎn)潔、明確、有概括性,字?jǐn)?shù)不宜超過20個(gè)字;(6)摘要:要有高度的概括力,語言精練、明確,中文摘要約300字;(7)關(guān)鍵詞:從論文標(biāo)題或正文中挑選3~5個(gè),最能表達(dá)主要內(nèi)容的詞作為關(guān)鍵詞(8)目錄:寫出目錄,標(biāo)明頁碼;(9)正文:本科畢業(yè)論文正文字?jǐn)?shù)一般應(yīng)在25000字以上,畢業(yè)論文正文:包括前言、本論、結(jié)論三個(gè)部分:

前言(引言)是論文的開頭部分,主要說明論文寫作的目的、現(xiàn)實(shí)意義、對(duì)所研究問題的認(rèn)識(shí),并提出論文的中心論點(diǎn)等。前言要寫得簡(jiǎn)明扼要,篇幅不要太長。

本論是畢業(yè)論文的主體,包括相關(guān)需求分析,設(shè)計(jì),編碼,測(cè)試,界面體現(xiàn),流程介紹等,主要是界面設(shè)計(jì)和代碼的編寫及效果體現(xiàn)。

結(jié)論是畢業(yè)論文的收尾部分,是圍繞本論所作的結(jié)束語。其基本的要點(diǎn)就是總結(jié)全文,加深題意。

(10)謝辭:簡(jiǎn)述自己通過做畢業(yè)論文的體會(huì),并應(yīng)對(duì)指導(dǎo)教師和協(xié)助完成論文的有關(guān)人員表示謝意;

(11)參考文獻(xiàn):在畢業(yè)論文末尾要列出在論文中參考過的專著、論文及其他資料,所列參考文獻(xiàn)應(yīng)按文中參考或引證的先后順序排列;

畢業(yè)設(shè)計(jì)(論文)主要內(nèi)容:1.描述國內(nèi)網(wǎng)上論壇系統(tǒng)的現(xiàn)狀;2.綜述國內(nèi)JavaEEWEB應(yīng)用開發(fā)技術(shù)的概況;3.簡(jiǎn)單介紹JavaEEWEB項(xiàng)目開發(fā)的相關(guān)技術(shù);4.描述框架技術(shù)在JavaEEWEB項(xiàng)目開發(fā)的重要性;5.描述本項(xiàng)目開發(fā)環(huán)境的配置與項(xiàng)目運(yùn)行的部署;6.分析本項(xiàng)目需要的功能并做出相應(yīng)的設(shè)計(jì);7.實(shí)現(xiàn)本項(xiàng)目的所有功能并保證足夠的健壯性;8.總結(jié)通過本項(xiàng)目所獲得的知識(shí)與技能的提升;學(xué)生應(yīng)交出的設(shè)計(jì)文件(論文):1.內(nèi)容完整、層次清晰、敘述流暢、排版規(guī)范的畢業(yè)設(shè)計(jì)論文;2.包括畢業(yè)設(shè)計(jì)論文、源程序等內(nèi)容在內(nèi)的畢業(yè)設(shè)計(jì)電子文檔及其它相關(guān)材料。主要參考文獻(xiàn)(資料):[1]孫鑫.JavaWeb開發(fā)詳解[M].電子工業(yè)出版社,2006[2]孫衛(wèi)琴,李洪成.Tomcat與JavaWeb開發(fā)技術(shù)詳解[M].電子工業(yè)出版社,2003[3]袁建洲.JavaScript編程寶典.人民郵電出版社,2007[4]李剛.基于J2EE的AJAX寶典.電子工業(yè)出版社,2007[5]耿祥義.JSP基礎(chǔ)編程[M].清華大學(xué)出版社,2004[6]林信良.JSP&Servlet學(xué)習(xí)筆記[M].清華大學(xué)出版社,2012,5[7]孫衛(wèi)琴.精通hibernate[M].電子工業(yè)出版社,2005,4[8]林寒超,張南平.Hibernate技術(shù)的研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(11)[9]畢建信.基于MVC設(shè)計(jì)模式的Web應(yīng)用研究與實(shí)現(xiàn)[D].武漢理工大學(xué),2006,5[10]威爾德,斯尼德等著,趙利通譯.SpringFramework2入門經(jīng)典[M].清華大學(xué)出版社,2009[11]CraigWalls,RyanBreidenBach.SpringInAction[M].ManningPublications,2006[12]AmuthanG.SpringMVC:Beginner'sGuide[M].PacktPublishing,2014[13]DataflowanalysisandtestingofJSP-basedWebapplications[J].Informationandsoftwaretechnology,2006.48(12)專業(yè)班級(jí)軟件工程1102班學(xué)生姓名:要求設(shè)計(jì)(論文)工起止日期:2015年3月23日~2015年7月3日指導(dǎo)教師簽字:日期:2015年3月23日教研室主任審查簽字:日期:系主任批準(zhǔn)簽字:日期:基于WEB的易語言論壇系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)摘要論壇,是Internet上的一種電子信息服務(wù)系統(tǒng)。它提供一塊公共電子白板,每個(gè)用戶都可以在上面書寫,可發(fā)布信息或提出看法。它是一種交互性強(qiáng),內(nèi)容豐富而及時(shí)的Internet電子信息服務(wù)系統(tǒng),用戶在BBS站點(diǎn)上可以獲得各種信息服務(wù)、發(fā)布信息、進(jìn)行討論、聊天等等。貼吧,是一種基于關(guān)鍵詞的主題交流社區(qū),它與搜索緊密結(jié)合,準(zhǔn)確把握用戶需求,為興趣而生。貼吧的使命是讓志同道合的人相聚。貼吧的組建依靠搜索引擎關(guān)鍵詞,不論是大眾話題還是小眾話題,都能精準(zhǔn)地聚集大批同好網(wǎng)友,它為人們提供了一個(gè)表達(dá)和交流思想的自由網(wǎng)絡(luò)空間,并以此匯集志同道合的網(wǎng)友。本系統(tǒng)借鑒貼吧基于關(guān)鍵詞交流的思想,擴(kuò)大了論壇的現(xiàn)有功能,使之不僅僅局限于定義好的的關(guān)鍵詞。用戶可以創(chuàng)建原本不存在的關(guān)鍵詞主題站,可以針對(duì)任何感興趣的主題在相應(yīng)的主題站里發(fā)表帖子,瀏覽帖子,參與討論,擴(kuò)寬了獲取信息的渠道,真正做到了信息共享。系統(tǒng)采用了JSP、Ajax、Servlet以及SpringMVC與Hibernate兩大框架技術(shù)實(shí)現(xiàn),實(shí)現(xiàn)了預(yù)期的功能。關(guān)鍵詞:論壇;貼吧;MVC;JSPDesignandImplementationforBBSSystembasedonWEBAbstractTheforum,isanelectronicinformationservicesystembasedonInternet.Itprovidesapublicelectronicwhiteboard,eachusercanwriteonandreleaseorviewsinformation.Itisakindofinteractiveinternetelectronicinformationservicesystemwithrichcontentandtimely,usersontheBBSsitecanobtainavarietyofinformationservices,releaseinformation,discussions,chatandsoontoget.ThePostBar,isaninternetcommunitybasedonkeysubject,itisrelatedtothesearchclosely,grasptheneedsofusersaccurately,bornininteresting.PostBar'smissionistomeetlike-mindedpeople.PostBarreliesonsearchenginekeywordsformation,whetheritisapopulartopicoranichetopic,itcangatheralargenumberofnetizensaccurately,itprovidesafreenetworkspaceforpeopletoexpressionandexchangeideas,andthusbringingtogetherlike-mindedfriends.ThissystemreferencesPostBarkeywordbasedontheideaofcommunication,expandtheexistingfunctionsoftheforum,Letitisnotlimitedtodefinedkeywords.Userscancreatekeywordssubjectstationwhichwasnotexistanduserscanbedirectedtoanyinterestingtopicthecorrespondingsubjectstation,publishandbrowseposts,participateinthediscussion,broadeningthechannelsforobtaininginformation,sharinginformationreally.SystemadoptedJSP、Ajax、ServlettechnologiesandSpringMVC、Hibernateframeworks,realizedtheexpectedfunction.Keywords:TheForum;ThePostBar;MVC;JSP目錄TOC\o"1-3"\h\u74151緒論 .2技術(shù)可行性分析技術(shù)可行性是最難決斷和最關(guān)鍵的問題。根據(jù)系統(tǒng)功能、性能及實(shí)現(xiàn)體統(tǒng)的各項(xiàng)約束條件,從技術(shù)的角度研究系統(tǒng)實(shí)現(xiàn)的可行性。本系統(tǒng)使用Java語言開發(fā),同時(shí)采用了html,jsp,css,javascript,Ajax,servlet以及SpringMVC與Hibernate兩大框架技術(shù),在數(shù)據(jù)庫上采用的是Oracle數(shù)據(jù)庫,服務(wù)器采用的是Tomcat。本系統(tǒng)使用到了這些技術(shù),但是涉及卻不是很深,作者可憑借所學(xué)知識(shí)以及網(wǎng)絡(luò)來解決所遇見的問題。2.3運(yùn)行可行性分析運(yùn)行可行性研究內(nèi)容包括新系統(tǒng)規(guī)定的運(yùn)行方式是否可行,如果新系統(tǒng)是建立在原來已擔(dān)負(fù)起它任務(wù)的計(jì)算機(jī)系統(tǒng)上的,就不能要求它在實(shí)時(shí)在線狀態(tài)下運(yùn)行,以免與原有的任務(wù)相矛盾。另外就是用戶是否可以熟練的運(yùn)用它。本系統(tǒng)最終將會(huì)運(yùn)行在本地計(jì)算機(jī)上,即使需要聯(lián)網(wǎng)運(yùn)行,也可以使用花生殼軟件來映射內(nèi)網(wǎng),達(dá)到使用域名訪問該系統(tǒng)的效果。本地計(jì)算機(jī)只負(fù)擔(dān)該項(xiàng)目一個(gè)運(yùn)行任務(wù),而且本系統(tǒng)的用戶量也很少,所以運(yùn)行在本地計(jì)算機(jī)上沒有任何問題。2.4法律可行性分析法律可行性是指研究在系統(tǒng)開發(fā)過程中可能涉及的各種合同、侵權(quán)、責(zé)任以及各種與法律相抵觸的問題。本系統(tǒng)在開發(fā)過程中使用的都是免費(fèi)的開源的軟件以及代碼,所參考的資料也是免費(fèi)的或者是通過付費(fèi)獲得的,所以不會(huì)涉及任何法律相關(guān)的問題。2.5開發(fā)方案可行性提出系統(tǒng)實(shí)現(xiàn)的各種方案并進(jìn)行評(píng)價(jià)之后,從中選擇一種最優(yōu)秀的方案。本系統(tǒng)經(jīng)過了作者深思熟慮,結(jié)合作者之前在其他項(xiàng)目上的開發(fā)經(jīng)驗(yàn),最終確定下了一套開發(fā)方案,這套開發(fā)方案完全可行。3需求分析需求分析是在軟件開發(fā)的初始階段進(jìn)行,它對(duì)于整個(gè)軟件開發(fā)過程以及軟件開發(fā)后質(zhì)量是舉足輕重的。隨著軟件系統(tǒng)復(fù)雜性的提高及規(guī)模的擴(kuò)大,需求分析在軟件開發(fā)中所處的地位愈加突出。所謂需求,是指用戶對(duì)目標(biāo)軟件系統(tǒng)在功能、行為、性能設(shè)計(jì)約束等方面的要求。在需求分析的研究中,系統(tǒng)開發(fā)人員必須對(duì)用戶的需求進(jìn)行調(diào)查和分析,結(jié)合實(shí)際環(huán)境的特征,正確定義目標(biāo)軟件的特征。所謂需求分析,是指對(duì)要解決的問題進(jìn)行詳細(xì)的分析,弄清楚問題的要求,包括需要輸入什么數(shù)據(jù),要得到什么結(jié)果,最后應(yīng)輸出什么??梢哉f,在軟件工程當(dāng)中的“需求分析”就是確定要計(jì)算機(jī)“做什么”,要達(dá)到什么樣的效果??梢哉f需求分析是做系統(tǒng)之前必做的。3.1需求采集在軟件工程中,需求分析指的是在建立一個(gè)新的或改變一個(gè)現(xiàn)存的電腦系統(tǒng)時(shí)描寫新系統(tǒng)的目的、范圍、定義和功能時(shí)所要做的所有的工作。需求分析是軟件工程中的一個(gè)關(guān)鍵過程。在這個(gè)過程中,系統(tǒng)分析員和軟件工程師確定顧客的需要。只有在確定了這些需要后,他們才能夠分析和尋求新系統(tǒng)的解決方法。需求分析階段的任務(wù)是確定軟件系統(tǒng)功能。3.1.1功能需求就本系統(tǒng)來說,本系統(tǒng)屬于BBS系統(tǒng),而且結(jié)合了百度貼吧開放關(guān)鍵詞的設(shè)計(jì)模式,應(yīng)該具備如下功能,現(xiàn)在按照游客與會(huì)員(登錄用戶)來介紹。游客:是指一些訪問本系統(tǒng)的時(shí)候沒有進(jìn)行過登錄操作的用戶。游客只有查詢的權(quán)限,可以訪問本系統(tǒng)包含的所有貼吧,可以瀏覽某個(gè)貼吧的所有的帖子,但是游客沒有執(zhí)行任何操作的權(quán)限,游客不能創(chuàng)建新的貼吧,不能發(fā)表新的帖子,不能回復(fù)已有的帖子。游客可以通過系統(tǒng)提供的注冊(cè)頁面來獲得系統(tǒng)承認(rèn)的賬號(hào),通過賬號(hào)登錄本系統(tǒng),以獲得與會(huì)員一致的權(quán)限。會(huì)員:會(huì)員是本系統(tǒng)的核心用戶,他們參與在貼吧建設(shè)的方方面面。會(huì)員在擁有游客的所有權(quán)限的同時(shí),還擁有更多與系統(tǒng)進(jìn)行交互的權(quán)限。會(huì)員可以更新自己賬號(hào)的信息,可以創(chuàng)建暫不存在的貼吧,可以在任何貼吧發(fā)表新的帖子,可以回復(fù)任何已存在的帖子。會(huì)員們可以通過帖子進(jìn)行交流,當(dāng)有會(huì)員與你發(fā)生信息交互時(shí),系統(tǒng)會(huì)給出相對(duì)應(yīng)的通知,而會(huì)員也可以通過查看通知來獲得信息詳情。管理員用戶,即吧主,也是會(huì)員,是某一個(gè)貼吧的管理者,肩負(fù)著壯大該貼吧的責(zé)任。會(huì)員可以通過創(chuàng)建一個(gè)貼吧來成為該貼吧的吧主,擁有該貼吧的最高權(quán)限??梢孕薷脑撡N吧的信息,可以管理本吧的帖子。吧主僅僅在屬于其自己的貼吧才是吧主,到了別的貼吧,其權(quán)限就會(huì)變成普通會(huì)員。此外,吧主還擁有著游客和會(huì)員的所有權(quán)限。3.1.2性能需求本系統(tǒng)是BBS論壇系統(tǒng),為了給用戶較好的體驗(yàn),需要本系統(tǒng)響應(yīng)快速,所以在此對(duì)硬件及軟件做了需求分析。硬件環(huán)境:處理器:Inter酷睿i5或更高內(nèi)存大小:4GB或更高硬盤空間:10GB或更高軟件環(huán)境:操作系統(tǒng):Win7或更高服務(wù)器:Tomcat6.0或更高數(shù)據(jù)庫:OracleDatabase10G或更高3.2功能模塊畫出功能模塊圖是軟件工程過程中的一個(gè)重要環(huán)節(jié),它將顯示出工程所要實(shí)現(xiàn)的各種功能,并分類,然后軟件工程師根據(jù)功能模塊圖來通過代碼具體實(shí)現(xiàn)這些功能。功能模塊圖就是講系統(tǒng)的功能進(jìn)行分解,按功能從屬關(guān)系表示的圖表。管理系統(tǒng)的各子系統(tǒng)可以看作是系統(tǒng)目標(biāo)下層的功能,對(duì)其中每項(xiàng)功能可以繼續(xù)分解為第三、第四,甚至更多的功能。圖中的每一個(gè)框都稱為一個(gè)功能模塊,其功能根據(jù)實(shí)際情況分的大小不完全相同。圖3-1貼吧系統(tǒng)用戶類型及對(duì)應(yīng)功能概覽圖3.2.1基本功能設(shè)計(jì)通過需求分析,論壇的基本功能可以從眾多的需求中篩選出來。顧名思義,基本功能就是構(gòu)成論壇系統(tǒng)的必要功能,具備這些功能的Web系統(tǒng)即是論壇。瀏覽帖子。發(fā)表了帖子,就要供他人瀏覽查看,與他人分享自己的想法和經(jīng)驗(yàn)。發(fā)表帖子。論壇最初是為了相互討論話題而誕生的,發(fā)表帖子就是表達(dá)自己的看法,與他人進(jìn)行討論,因此發(fā)帖是論壇首要的功能?;貜?fù)帖子。瀏覽了他人發(fā)表的帖子,想要發(fā)表自己的想法,參與討論,就可以回復(fù)這個(gè)帖子。其實(shí),瀏覽帖子→發(fā)表帖子→回復(fù)帖子三大功能周而復(fù)始的循環(huán)進(jìn)行,就構(gòu)成論壇。每個(gè)參與論壇的人,主要目的就是發(fā)帖,查看已經(jīng)發(fā)表的帖子,針對(duì)自己感興趣的帖子進(jìn)行回帖,參與討論。三大基本功能的相互關(guān)系如圖發(fā)表帖子帖子列表發(fā)表帖子帖子列表瀏覽帖子回復(fù)帖子瀏覽帖子回復(fù)帖子圖3-2貼吧系統(tǒng)基本功能相互關(guān)系圖3.2.2擴(kuò)展功能設(shè)計(jì)除了基本功能之外,其他的論壇功能都是擴(kuò)展功能。注冊(cè)登錄。用戶登錄系統(tǒng)之后,用戶信息被系統(tǒng)讀取到,用戶執(zhí)行操作的時(shí)候,系統(tǒng)直接獲取這個(gè)信息,所以會(huì)員的權(quán)限比游客高。分板塊瀏覽帖子。其實(shí)不同的貼吧就是不同的板塊,在某一個(gè)主題為某關(guān)鍵詞的貼吧里只討論與該關(guān)鍵詞相關(guān)的話題。這樣,就使得對(duì)某一話題感興趣的用戶不會(huì)被其他帖子干擾,也有利于相同興趣的用戶相互間討論,不易跑題。查看用戶信息。每一個(gè)用戶可以查看所有用戶的信息。刪除帖子。如果用戶發(fā)表了不符合論壇規(guī)則的帖子,則需要管理員刪除這些帖子,這就引出了刪除帖子的擴(kuò)展功能。置頂帖子。帖子一般是根據(jù)發(fā)表以及回復(fù)時(shí)間到序排列的,這樣先發(fā)的帖子就慢慢排到后面,管理員如果需要強(qiáng)調(diào)某些帖子重要,又必看性,就要打亂默認(rèn)的排列順序,將這些帖子放在列表的最前端,不再按照時(shí)間進(jìn)行順序的變化,但是還要保證其他帖子按照時(shí)間變化順序進(jìn)行排列,這就引出了置頂帖子的擴(kuò)展功能。精華帖子。如果管理員認(rèn)為某個(gè)帖子的內(nèi)容非常好,可以打上標(biāo)記,推薦給看帖的用戶,這就引出了指定精華帖的擴(kuò)展功能。用戶可以選擇只看打上標(biāo)記的精華帖。搜索帖子。論壇中的帖子越來越多,用戶需要從大量的帖子中找到自己需要的內(nèi)容,這就引出了搜索帖子的擴(kuò)展功能。設(shè)置參數(shù)。論壇一般有一些初始化信息,比如論壇名稱,每頁顯示帖子數(shù)量等參數(shù)信息,用戶可以在頁面底部設(shè)置這些信息。查看通知信息。比如說管理員刪帖,刪帖后系統(tǒng)會(huì)提醒發(fā)帖用戶。查看回復(fù)信息。在用戶發(fā)帖或回帖之后,被其它用戶回帖,系統(tǒng)也會(huì)給出相應(yīng)的提醒信息。查看提到情況。有時(shí)候別人發(fā)帖回特別提醒你一下(@用戶),系統(tǒng)也會(huì)做出相應(yīng)的提醒。4系統(tǒng)設(shè)計(jì)4.1數(shù)據(jù)庫表設(shè)計(jì)數(shù)據(jù)庫系統(tǒng)是在文件系統(tǒng)的基礎(chǔ)上發(fā)展而來的,經(jīng)歷了層次數(shù)據(jù)庫、網(wǎng)狀數(shù)據(jù)庫、關(guān)系數(shù)據(jù)庫三個(gè)階段。由于關(guān)系數(shù)據(jù)庫采用人們比較容易理解和接受的二維表格來組織數(shù)據(jù),發(fā)展迅速,已成為數(shù)據(jù)庫產(chǎn)品的主流。本次系統(tǒng)設(shè)計(jì)所使用的數(shù)據(jù)庫就是關(guān)系數(shù)據(jù)庫Oracle。Oracle數(shù)據(jù)庫管理系統(tǒng)是一項(xiàng)全面完整的數(shù)據(jù)庫與分析產(chǎn)品。Oracle容易學(xué)習(xí)、使用,介紹、學(xué)習(xí)資料比較多,Oracle全面支持Web功能的數(shù)據(jù)庫解決方案。與此同時(shí),Oracle11g提供了高性能、伸展性、可用性和安全性,并能更方便地在低成本服務(wù)器和存儲(chǔ)設(shè)備組成的網(wǎng)絡(luò)上運(yùn)行,相對(duì)過往版本而言,Oracle11g具有了于總不同的特性,這也是企業(yè)數(shù)據(jù)庫系統(tǒng)在激烈市場(chǎng)競(jìng)爭(zhēng)中克敵制勝的關(guān)鍵所在。正是由于Oracle和其它的大型數(shù)據(jù)庫相比較,Oracle具有可靠的安全性、較快的存儲(chǔ)速度、高度的兼容性和可擴(kuò)展性、數(shù)據(jù)的大量性、數(shù)據(jù)保存的持久性、數(shù)據(jù)的共享性、簡(jiǎn)單易用等等一系列的特性。因此,我采用了Oracle11g作為后臺(tái)的數(shù)據(jù)庫。本系統(tǒng)的數(shù)據(jù)庫暫時(shí)包含了7張表,分別為TABLE_MEMBER,TABLE_LEVEL,TABLE_TIEBA,TABLE_TIEZI,TABLE_FLOOR,TABLE_MESSAGE,TABLE_REMIND。他們之間存在一些依賴或包含的關(guān)系,系統(tǒng)可以有很多貼吧,每個(gè)貼吧下可以有很多帖子,每個(gè)帖子下可以有很多層樓,每層樓又可以包含很多個(gè)信息。下面將對(duì)這幾張表作相應(yīng)的介紹。4.1.1ER圖分析E-R模型是對(duì)現(xiàn)實(shí)世界的一種抽象。它的主要成分是實(shí)體、聯(lián)系和屬性。使用這三種成分,我們可以建立許多應(yīng)用環(huán)境的ER模型。本系統(tǒng)的實(shí)體和屬性的定義如下:圖4-1會(huì)員信息實(shí)體圖圖4-2貼吧信息實(shí)體圖圖4-3帖子信息實(shí)體圖圖4-4樓層信息實(shí)體圖圖4-5信息信息實(shí)體圖圖4-6提心信息實(shí)體圖4.1.2數(shù)據(jù)庫表設(shè)計(jì)TABLE_MEMBER會(huì)員表字段描述字段名類型說明id_memberNUMBER(17)主鍵,會(huì)員id,根據(jù)注冊(cè)時(shí)間得到的17位數(shù)字usernameVARCHAR2(20)用戶名passwordVARCHAR2(32)密碼,MD5加密后為32位字符串phoneVARCHAR2(11)電話emailVARCHAR2(30)郵箱genderVARCHAR2(3)性別,只能為‘男’或‘女’birthdayVARCHAR2(10)生日,格式為‘yyyy-MM-dd’addressVARCHAR2(150)地址qqnumberVARCHAR2(11)QQ賬號(hào)signatureVARCHAR2(150)個(gè)性簽名experienceNUMBER(10)經(jīng)驗(yàn)值roleNUMBER(1)角色,1.普通會(huì)員0.吧主,會(huì)員在每個(gè)吧的角色都不同,進(jìn)入貼吧會(huì)自動(dòng)更新statusNUMBER(1)狀態(tài),1.正常2.加黑3.封禁(有專門的加黑表,封禁表),會(huì)員在每個(gè)吧的這些狀態(tài)不同,進(jìn)入貼吧會(huì)自動(dòng)更新表4-1TABLE_MEMBER會(huì)員表關(guān)鍵建表語句CONSTRAINTpk_member_1PRIMARYKEY(id_member)TABLE_TIEBA貼吧表字段描述字段名類型說明id_tiebaNUMBER(17)主鍵,貼吧id,根據(jù)創(chuàng)建時(shí)間得到的17位數(shù)字id_memberNUMBER(17)外鍵,吧主id,根據(jù)注冊(cè)時(shí)間得到的17位數(shù)字nameVARCHAR2(30)貼吧名稱signatureVARCHAR2(150)貼吧簽名statusNUMBER(1)狀態(tài),1可視0不可視表4-2TABLE_TIEBA貼吧表關(guān)鍵建表語句CONSTRAINTpk_tieba_1PRIMARYKEY(id_tieba),CONSTRAINTfk_tieba_2FOREIGNKEY(id_member)REFERENCEStable_member(id_member)TABLE_TIEZI帖子表字段描述字段名類型說明id_tiebaNUMBER(17)主鍵,外鍵,貼吧id,根據(jù)創(chuàng)建時(shí)間得到的17位數(shù)字id_tieziNUMBER(17)主鍵,帖子id,根據(jù)發(fā)帖時(shí)間得到的17位數(shù)字id_memberNUMBER(17)外鍵,會(huì)員id,根據(jù)注冊(cè)時(shí)間得到的17位數(shù)字name_memberVARCHAR2(20)會(huì)員用戶名,發(fā)帖用戶statusNUMBER(1)狀態(tài),1可視0不可視titleVARCHAR2(150)帖子標(biāo)題表4-3TABLE_TIEZI帖子表關(guān)鍵建表語句 CONSTRAINTpk_tiezi_12PRIMARYKEY(id_tieba,id_tiezi), CONSTRAINTfk_tiezi_1FOREIGNKEY(id_tieba)REFERENCEStable_tieba(id_tieba), CONSTRAINTfk_tiezi_3FOREIGNKEY(id_member)REFERENCEStable_member(id_member)TABLE_FLOOR樓層表字段描述字段名類型說明id_tiebaNUMBER(17)主鍵,外鍵,貼吧id,根據(jù)創(chuàng)建時(shí)間得到的17位數(shù)字id_tieziNUMBER(17)主鍵,外鍵,帖子id,根據(jù)發(fā)帖時(shí)間得到的17位數(shù)字id_floorNUMBER(17)主鍵,樓層id,根據(jù)發(fā)帖時(shí)間得到的17位數(shù)字id_memberNUMBER(17)外鍵,會(huì)員id,根據(jù)注冊(cè)時(shí)間得到的17位數(shù)字name_memberVARCHAR2(20)會(huì)員用戶名,發(fā)樓用戶statusNUMBER(1)狀態(tài),1可視0不可視表4-4TABLE_FLOOR樓層表關(guān)鍵建表語句 CONSTRAINTpk_floor_123PRIMARYKEY(id_tieba,id_tiezi,id_floor), CONSTRAINTfk_floor_12FOREIGNKEY(id_tieba,id_tiezi)REFERENCEStable_tiezi(id_tieba,id_tiezi), CONSTRAINTfk_floor_4FOREIGNKEY(id_member)REFERENCEStable_member(id_member)TABLE_MESSAGE信息表字段描述字段名類型說明id_tiebaNUMBER(17)主鍵,外鍵,貼吧id,根據(jù)創(chuàng)建時(shí)間得到的17位數(shù)字id_tieziNUMBER(17)主鍵,外鍵,帖子id,根據(jù)發(fā)帖時(shí)間得到的17位數(shù)字id_floorNUMBER(17)主鍵,外鍵,樓層id,根據(jù)發(fā)帖時(shí)間得到的17位數(shù)字id_messageNUMBER(17)主鍵,樓層id,根據(jù)發(fā)帖時(shí)間得到的17位數(shù)字id_fromNUMBER(17)外鍵,會(huì)員id,根據(jù)注冊(cè)時(shí)間得到的17位數(shù)字name_fromVARCHAR2(20)會(huì)員用戶名,信息發(fā)送人id_toNUMBER(17)外鍵,會(huì)員id,根據(jù)注冊(cè)時(shí)間得到的17位數(shù)字name_toVARCHAR2(20)會(huì)員用戶名,信息接收人statusNUMBER(1)狀態(tài),1可視0不可視contentVARCHAR2(3000)信息內(nèi)容表4-5TABLE_MESSAGE信息表關(guān)鍵建表語句 CONSTRAINTpk_message_1234PRIMARYKEY(id_tieba,id_tiezi,id_floor,id_message), CONSTRAINTfk_message_123FOREIGNKEY(id_tieba,id_tiezi,id_floor)REFERENCEStable_floor(id_tieba,id_tiezi,id_floor), CONSTRAINTfk_message_5FOREIGNKEY(id_from)REFERENCEStable_member(id_member), CONSTRAINTfk_message_7FOREIGNKEY(id_to)REFERENCEStable_member(id_member)TABLE_REMIND提醒表字段描述字段名類型說明kindNUMBER(1)提醒類型,1.通知2.回復(fù)3.提到id_remindNUMBER(17)主鍵,提醒id,根據(jù)創(chuàng)建時(shí)間得到的17位數(shù)字id_tiebaNUMBER(17)貼吧id,根據(jù)創(chuàng)建時(shí)間得到的17位數(shù)字nameVARCHAR2(30)貼吧名稱id_tieziNUMBER(17)帖子id,根據(jù)發(fā)帖時(shí)間得到的17位數(shù)字tieleVARCHAR2(150)帖子標(biāo)題id_floorNUMBER(17)樓層id,根據(jù)發(fā)帖時(shí)間得到的17位數(shù)字id_messageNUMBER(17)信息id,根據(jù)創(chuàng)建時(shí)間得到的17位數(shù)字id_fromNUMBER(17)外鍵,會(huì)員id,根據(jù)注冊(cè)時(shí)間得到的17位數(shù)字name_form會(huì)員用戶名,提醒發(fā)送人id_toNUMBER(17)外鍵,會(huì)員id,根據(jù)注冊(cè)時(shí)間得到的17位數(shù)字name_to會(huì)員用戶名,提醒接收人statusNUMBER(1)狀態(tài),1.未讀0.已讀contentVARCHAR2(3000)提醒內(nèi)容表4-6TABLE_REMIND提醒表關(guān)鍵建表語句 CONSTRAINTpk_remind_12PRIMARYKEY(kind,id_remind)4.2功能設(shè)計(jì)4.2.1登錄注冊(cè)登錄與注冊(cè)功能幾乎是WEB項(xiàng)目里不可或缺的存在,當(dāng)然本論壇系統(tǒng)也不例外。在本系統(tǒng)里,登錄注冊(cè)模塊完全獨(dú)立了出來,單獨(dú)設(shè)置成了一個(gè)JSP頁面,在其他所有頁面里面調(diào)用該頁面即可。系統(tǒng)會(huì)根據(jù)不同情況在session里面設(shè)置不同的參數(shù)以及相對(duì)應(yīng)的數(shù)據(jù),而本JSP頁面則會(huì)根據(jù)參數(shù)是否為空來選擇不同的顯示方式。而且本JSP頁面采用浮動(dòng)技術(shù),會(huì)一直固定在頁面的最頂部,不會(huì)隨著頁面的滾動(dòng)而移動(dòng)。本JSP頁面會(huì)顯示貼吧名稱以及貼吧簽名信息,同時(shí)還兼具用戶登錄與注冊(cè)功能。其通過JQuery與Ajax來做登錄驗(yàn)證。登錄成功后,會(huì)重新加載頁面,這樣很多游客不具備的權(quán)限都會(huì)隨著用戶的登錄而變得可視或可操作。用戶點(diǎn)擊了注冊(cè)按鈕,系統(tǒng)會(huì)跳轉(zhuǎn)到注冊(cè)頁面,用戶只需要填寫最關(guān)鍵的賬號(hào),密碼,手機(jī),郵箱,通過合法性驗(yàn)證,即可完成注冊(cè),其他信息可以在注冊(cè)之后完善,賬號(hào)一經(jīng)注冊(cè)不能修改。同時(shí)還會(huì)顯示未讀提醒的數(shù)量,點(diǎn)擊之后會(huì)跳轉(zhuǎn)到查看提醒頁面,這個(gè)在下面的查看提醒信息里會(huì)介紹到。4.2.2查看貼吧列表系統(tǒng)會(huì)將已存在的貼吧顯示在貼吧首頁,用戶可以通過點(diǎn)擊每一個(gè)貼吧的“進(jìn)入貼吧”按鈕來跳轉(zhuǎn)到對(duì)應(yīng)貼吧的貼吧主頁,也可以通過點(diǎn)擊“查看貼吧信息”或“查看吧主信息”來查看用戶感興趣的信息。所有的貼吧按照創(chuàng)建時(shí)間從早到晚的順序排列,創(chuàng)建的越早則顯示的位置越靠前。用戶也可以通過在貼吧搜索框里面輸入貼吧名稱的關(guān)鍵字(關(guān)鍵字可以有多個(gè),中間使用空格來區(qū)分),來查找相應(yīng)的貼吧,系統(tǒng)會(huì)把滿足搜索條件的貼吧全都列出來,顯示在貼吧列表之前,便于用戶查看。若是用戶沒有找到自己想要找的貼吧,也可以通過點(diǎn)擊“創(chuàng)建貼吧”按鈕來創(chuàng)建一個(gè)新的貼吧。如果貼吧創(chuàng)建成功,那么該用戶就會(huì)成為這個(gè)貼吧的吧主,擁有本吧里的最高權(quán)限,但是在其他非吧主的貼吧里,該用戶仍然只是普通會(huì)員,受該吧吧主的管制。4.2.3查看帖子列表用戶通過點(diǎn)擊“進(jìn)入貼吧”按鈕,跳轉(zhuǎn)到某一個(gè)貼吧的首頁,該吧的所有的可視的帖子,都會(huì)被系統(tǒng)檢索到,然后顯示到這里。帖子的顯示分兩種,一種是置頂帖,一種是普通帖。置頂帖會(huì)優(yōu)先顯示到列表最頂端。兩種類型的帖子都會(huì)按照時(shí)間順序,較新的帖子會(huì)顯示在靠前的位置。游客與會(huì)員的功能第一次顯現(xiàn)差別,在這里登錄用戶可以直接發(fā)表新的帖子,可以刪除自己發(fā)的帖子,但是游客則沒有這樣的權(quán)限,必須得通過登錄系統(tǒng)才可以。4.2.4查看帖子詳情用戶通過點(diǎn)擊帖子列表頁面的任何一個(gè)帖子標(biāo)題,即可進(jìn)入查看該帖子的詳情。同樣,所有可視的信息都會(huì)被系統(tǒng)讀取到,然后顯示出來。在這里游客與登錄用戶的區(qū)別再一次體現(xiàn)了出來,游客只能瀏覽而不能回復(fù),登錄用戶可以發(fā)表一個(gè)新的樓層,也可以在某個(gè)已有樓層下回復(fù)某一個(gè)用戶,也可以只回復(fù)層主,回復(fù)的樓層會(huì)顯示在當(dāng)前帖子的最末樓,回復(fù)的信息會(huì)顯示在某一樓的最末信息位置。在這里,系統(tǒng)會(huì)根據(jù)登錄用戶與帖子的關(guān)系以及登錄用戶的權(quán)限來顯示不同的操作權(quán)限。首先是大前提,用戶不能回復(fù)自己,如果信息是樓層的第一條信息,那么不能刪除該信息,而只能刪除該樓層。其次是小限制,吧主擁有大前提下的最高權(quán)限,用戶(樓主)在自己發(fā)的貼子里擁有與吧主一致的權(quán)限,用戶(層主)在自己發(fā)的樓層里擁有與吧主一致的權(quán)限。用戶(發(fā)信息者)只對(duì)自己發(fā)的信息擁有與吧主一致的權(quán)限。4.2.5查看提醒信息提醒信息總共分為三種類型,通知提醒,回復(fù)提醒,提到提醒。通知提醒包括有管理員刪帖,管理員置頂帖,管理員精華帖等?;貜?fù)提醒就是有別人對(duì)你的發(fā)言進(jìn)行了回復(fù)后系統(tǒng)發(fā)給你的提醒,提到提醒就是別人發(fā)帖或回帖是特地@到你后體統(tǒng)發(fā)給你的提醒。在本系統(tǒng)中,提醒模塊所包含的內(nèi)容有:系統(tǒng)通知,回復(fù)我的,提到我的,我回復(fù)的,我提到的共5部分。5系統(tǒng)實(shí)現(xiàn)5.1功能實(shí)現(xiàn)1.本系統(tǒng)的前臺(tái)JSP頁面使用如下代碼重新設(shè)定了相對(duì)路徑。<%Stringpath=request.getContextPath(); StringbasePath= request.getScheme()+"://"+ request.getServerName()+":"+ request.getServerPort()+path+"/";%><basehref="<%=basePath%>">這樣把相對(duì)位置設(shè)置成了basePath,完美解決了相對(duì)位置發(fā)生改變導(dǎo)致頁面找不到的問題。2.本系統(tǒng)的服務(wù)器使用了80端口,并配置了如下信息重新設(shè)置了訪問地址。<ContextdocBase="Graduation"path=""reloadable="true" source="org.eclipse.jst.jee.server:Graduation"/>這樣只需要一個(gè)域名或IP地址就可以訪問到本項(xiàng)目了,不需要加端口號(hào)和項(xiàng)目名,設(shè)計(jì)比較人性化,測(cè)試也較為方便。5.1.1登錄注冊(cè)登錄:Login_Servlet.javaMembermember=service.login(usernameOrPhoneOrEmail,password); if(member!=null){ out.print("√"); HttpSessionsession=request.getSession(); session.setAttribute("member_",member); Levellevel=service.findLevelByPoint(member.getExperience()); session.setAttribute("level_",level); }else{ out.print("×"); }注冊(cè):Controller_Member.java@RequestMapping(value="/insert",method=RequestMethod.GET)publicStringinsert(Modelmodel){ model.addAttribute("member",newMember()); return"/member/insert.jsp";}@RequestMapping(value="/insert",method=RequestMethod.POST)publicStringinsert(Membermember)throwsException{ service.register(member); return"redirect:/member/select/"+member.getId_member().toString();}MemberServiceImplement.javaif(dao.findMemberByUsername(member.getUsername())!=null){ thrownewException("該用戶名已經(jīng)被注冊(cè)");}if(dao.findMemberByPhone(member.getPhone())!=null){ thrownewException("該手機(jī)號(hào)碼已經(jīng)被注冊(cè)");}if(dao.findMemberByEmail(member.getEmail().toUpperCase())!=null){ thrownewException("該郵箱已經(jīng)被注冊(cè)");}Longid=DateTime.getDateTimeFormatLongWithSSS();while(dao.findMemberByMemberId(id)!=null){ id=DateTime.getDateTimeFormatLongWithSSS();}member.setId_member(id);member.setPassword(MD5.getMD5(member.getPassword()));member.setEmail(member.getEmail().toUpperCase());dao.saveMember(member);5.1.2查看貼吧列表 Controller_Tieba.java @RequestMapping(value={"","/"},method=RequestMethod.GET) publicStringlist(Modelmodel,HttpSessionsession)throwsException{ Tiebatieba=newTieba("十度貼吧","全球最大的中文社區(qū)",null); session.setAttribute("tieba_",tieba); List<Tieba>tiebas=service_tieba.findAllTiebas(); model.addAttribute("tiebas",tiebas); return"tieba/list.jsp"; } @RequestMapping(value="/search",method=RequestMethod.POST) publicStringsearch(Stringsearch,Modelmodel,HttpSessionsession)throwsException{ if(search.length()!=0){ String[]keywords=search.split(""); List<Tieba>result=service_tieba.findTiebasByKeywords(keywords); session.setAttribute("result",result); } return"redirect:/tieba"; }5.1.3查看帖子列表Controller_Tieba.java @RequestMapping(value="/home/{id_tieba}",method=RequestMethod.GET) publicStringhome(@PathVariableStringid_tieba,Modelmodel,HttpSessionsession) throwsException{ Tiebatieba=service_tieba.findTiebaByTiebaId(Long.parseLong(id_tieba)); session.setAttribute("tieba_",tieba); List<Tiezi>tiezis_top=service_tiezi.findAllTopTiezisByTiebaId( Long.parseLong(id_tieba)); List<Tiezi>tiezis_all=service_tiezi.findAllVisibleTiezisByTiebaId( Long.parseLong(id_tieba)); model.addAttribute("tiezis_top",tiezis_top); model.addAttribute("tiezis_all",tiezis_all); return"/tieba/home.jsp"; }5.1.4查看帖子詳情Controller_Tieba.java @RequestMapping(value="/selecttiezi/{id_tieba}/{id_tiezi}",method=RequestMethod.GET) publicStringselectTiezi(@PathVariableStringid_tieba,@PathVariableStringid_tiezi, Modelmodel,HttpSessionsession)throwsException{ Tiebatieba=service_tieba.findTiebaByTiebaId(Long.parseLong(id_tieba)); model.addAttribute("tieba_",tieba); Datadata=service_tiezi.loadTieziByTiebaIdAndTieziId( Long.parseLong(id_tieba),Long.parseLong(id_tiezi)); model.addAttribute("data",data); return"/tieba/selecttiezi.jsp"; } @RequestMapping(value="/insertfloor/{id_tieba}/{id_tiezi}", method=RequestMethod.POST) publicStringinsertFloor(@PathVariableStringid_tieba,@PathVariableStringid_tiezi, Stringcontent,Modelmodel,HttpSessionsession)throwsException{ Membermember=(Member)session.getAttribute("member_"); member.setExperience(member.getExperience()+1L); member.setPassword(null); service_member.update(member); service_tiezi.sendFloor(Long.parseLong(id_tieba),Long.parseLong( id_tiezi),member.getId_member(),member.getUsername(),content); return"redirect:/tieba/selecttiezi/"+id_tieba+"/"+id_tiezi; } @RequestMapping(value="/insertmessage1/{id_tieba}/{id_tiezi}/{id_floor}/{id_to}/ {name_to}",method=RequestMethod.POST) publicStringinsertMessage(@PathVariableStringid_tieba,@PathVariableStringid_tiezi, @PathVariableStringid_floor,@PathVariableStringid_to, @PathVariableStringname_to,Stringcontent,Modelmodel, HttpSessionsession)throwsException{ Membermember=(Member)session.getAttribute("member_"); member.setExperience(member.getExperience()+1L); member.setPassword(null); service_member.update(member); session.setAttribute("member_",member); service_tiezi.sendMessage(Long.parseLong(id_tieba),Long.parseLong(id_tiezi), Long.parseLong(id_floor),member.getId_member(),member.getUsername(), Long.parseLong(id_to),name_to,content); return"redirect:/tieba/selecttiezi/"+id_tieba+"/"+id_tiezi; }5.1.5查看提醒信息Controller_Tieba.java @RequestMapping(value="/remind/inform",method=RequestMethod.GET) publicStringinform(Modelmodel,HttpSessionsession)throwsException{ Tiebatieab=(Tieba)session.getAttribute("tieba_"); model.addAttribute("tieba",tieab); Membermember=(Member)session.getAttribute("member_"); List<Remind>informs=service_remind.findInformRemindsByToId( member.getId_member()); model.addAttribute("informs",informs); model.addAttribute("flag","informs"); return"/tieba/remind.jsp"; } @RequestMapping(value="/remind/reply",method=RequestMethod.GET) publicStringreply(Modelmodel,HttpSessionsession)throwsException{ Tiebatieab=(Tieba)session.getAttribute("tieba_"); model.addAttribute("tieba",tieab); Membermember=(Member)session.getAttribute("member_"); List<Remind>replys=service_remind.findReplyRemindsByToId( member.getId_member()); model.addAttribute("replys",replys); model.addAttribute("flag","replys"); return"/tieba/remind.jsp"; } @RequestMapping(value="/remind/mention",method=RequestMethod.GET) publicStringmention(Modelmodel,HttpSessionsession)throwsException{ Tiebatieab=(Tieba)session.getAttribute("tieba_"); model.addAttribute("tieba",tieab); Membermember=(Member)session.getAttribute("member_"); List<Remind>mentions=service_remind.findMentionRemindsByToId( member.getId_member()); model.addAttribute("mentions",mentions); model.addAttribute("flag","mentions"); return"/tieba/remind.jsp"; } @RequestMapping(value="/remind/replyfromme",method=RequestMethod.GET) publicStringreplyfromme(Modelmodel,HttpSessionsession)throwsException{ Tiebatieab=(Tieba)session.getAttribute("tieba_"); model.addAttribute("tieba",tieab); Membermember=(Member)session.getAttribute("member_"); List<Remind>replysfromme=service_remind.findMentionRemindsByFromId( member.getId_member()); model.addAttribute("replysfromme",replysfromme); model.addAttribute("flag","replysfromme"); return"/tieba/remind.jsp"; } @RequestMapping(value="/remind/mentionfromme",method=RequestMethod.GET) publicStringmentionfromme(Modelmodel,HttpSessionsession)throwsException{ Tiebatieab=(Tieba)session.getAttribute("tieba_"); model.addAttribute("tieba",tieab); Membermember=(Member)session.getAttribute("member_"); List<Remind>mentionsfromme=service_remind.findMentionRemindsByFromId( member.getId_member()); model.addAttribute("mentionsfromme",mentionsfromme); model.addAttribute("flag","mentionsfromme"); return"/tieba/remind.jsp"; }5.2系統(tǒng)不足由于本人技術(shù)水平有限以及時(shí)間不足的原因,系統(tǒng)現(xiàn)在暫時(shí)還沒有圖片上傳功能,在圖片方面,我的設(shè)計(jì)初衷就是用戶注冊(cè)以及貼吧創(chuàng)建的時(shí)候,必須同時(shí)上傳一張圖片作為用戶頭像和貼吧Logo,還有用戶發(fā)帖子的時(shí)候也可以上傳圖片,這個(gè)功能在接下來的時(shí)間里我還是會(huì)集成到現(xiàn)有系統(tǒng)里面去的。還有一點(diǎn),就是分頁設(shè)計(jì)功能,目前還處于研發(fā)之中?,F(xiàn)在已經(jīng)在測(cè)試項(xiàng)目里面實(shí)現(xiàn)了這個(gè)功能,但是代碼比較分散,JSP頁面里面有,后臺(tái)Servlet里面也有,想要往本系統(tǒng)里面集成實(shí)在是不易。所以我將會(huì)在后續(xù)的修改中,繼續(xù)加油,盡量把分頁功能整合一下。一次實(shí)現(xiàn),多次調(diào)用。把本系統(tǒng)里面涉及到分頁功能的地方,全部替換掉。5.3相關(guān)技術(shù)本項(xiàng)目是一個(gè)動(dòng)態(tài)WEB項(xiàng)目,系統(tǒng)采用SpringMVC框架實(shí)現(xiàn)了頁面的切換和數(shù)據(jù)的傳遞,采用Hibernate框架實(shí)現(xiàn)了數(shù)據(jù)的持久化操作,前臺(tái)頁面采用JSP技術(shù)編寫,其數(shù)據(jù)合法性采用了JavaScript,JQuery和Ajax技術(shù),結(jié)合后臺(tái)Sertlet進(jìn)行驗(yàn)證?,F(xiàn)在簡(jiǎn)單介紹一下這些技術(shù)以及系統(tǒng)詳細(xì)設(shè)計(jì)。5.3.1JavaEEWEBJavaEE(JavaPlatform,EnterpriseEdition)是sun公司(2009年4月20日甲骨文將其收購)推出的企業(yè)級(jí)應(yīng)用程序版本。這個(gè)版本以前稱為J2EE。能夠幫助我們開發(fā)和部署可移植、健壯、可伸縮且安全的服務(wù)器端Java應(yīng)用程序。JavaEE是在JavaSE的基礎(chǔ)上構(gòu)建的,它提供Web服務(wù)、組件模型、管理和通信API,可以用來實(shí)現(xiàn)企業(yè)級(jí)的面向服務(wù)體系結(jié)構(gòu)(service-orientedarchitecture,SOA)和Web2.0應(yīng)用程序。在當(dāng)今網(wǎng)絡(luò)時(shí)代,無論是因特網(wǎng)(Internet)、內(nèi)聯(lián)網(wǎng)、外聯(lián)網(wǎng)都離不開Web技術(shù)的應(yīng)用。隨著網(wǎng)絡(luò)技術(shù)尤其是Web應(yīng)用技術(shù)的發(fā)展,企業(yè)級(jí)應(yīng)用對(duì)系統(tǒng)各方面的性能要求越來越高,特別是速度、安全、可靠性以及分布式應(yīng)用等方面,在一定程度上決定著系統(tǒng)能否成功。在這些要求的共同作用下,SUN的JavaEE(Java平臺(tái)企業(yè)版)規(guī)范利用Java編程語言和企業(yè)API的強(qiáng)大功能,包括EJB技術(shù),提供了一種業(yè)界領(lǐng)先的Web編程技術(shù)平臺(tái)。JAVAEEWEB編程技術(shù)已成為計(jì)算機(jī)領(lǐng)域中最重要的的技術(shù)之一,它是軟件學(xué)科中一個(gè)不可或缺的分支,是計(jì)算機(jī)專業(yè)和信息管理專業(yè)一門專業(yè)基礎(chǔ)課,越來越多的人都開始學(xué)習(xí)JAVAEEWEB編程技術(shù)。5.3.2JSPJSP全名為JavaServerPages,中文名叫java服務(wù)器頁面,其根本是一個(gè)簡(jiǎn)化的Servlet設(shè)計(jì),它[1]是由SunMicrosystems公司倡導(dǎo)、許多公司參與一起建立的一種動(dòng)態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。JSP技術(shù)有點(diǎn)類似ASP技術(shù),它是在傳統(tǒng)的網(wǎng)頁HTML(標(biāo)準(zhǔn)通用標(biāo)記語言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標(biāo)記(tag),從而形成JSP文件,后綴名為(*.jsp)。用JSP開發(fā)的Web應(yīng)用是跨平臺(tái)的,既能在Linux下運(yùn)行,也能在其他操作系統(tǒng)上運(yùn)行。它實(shí)現(xiàn)了Html語法中的java擴(kuò)張(以<%,%>形式)。JSP與Servlet一樣,是在服務(wù)器端執(zhí)行的。通常返回給客戶端的就是一個(gè)HTML文本,因此客戶端只要有瀏覽器就能瀏覽。JSP技術(shù)使用Java編程語言編寫類XML的tags和scriptlets,來封裝產(chǎn)生動(dòng)態(tài)網(wǎng)頁的處理邏輯。網(wǎng)頁還能通過tags和scriptlets訪問存在于服務(wù)端的資源的應(yīng)用邏輯。JSP將網(wǎng)頁邏輯與網(wǎng)頁設(shè)計(jì)的顯示分離,支持可重用的基于組件的設(shè)計(jì),使基于Web的應(yīng)用程序的開發(fā)變得迅速和容易。JSP(JavaServerPages)是一種動(dòng)態(tài)頁面技術(shù),它的主要目的是將表示邏輯從Servlet中分離出來。JavaServlet是JSP的技術(shù)基礎(chǔ),而且大型的Web應(yīng)用程序的開發(fā)需要JavaServlet和JSP配合才能完成。JSP具備了Java技術(shù)的簡(jiǎn)單易用,完全的面向?qū)ο螅哂衅脚_(tái)無關(guān)性且安全可靠,主要面向因特網(wǎng)的所有特點(diǎn)。5.3.3ServletServlet是在服務(wù)器上運(yùn)行的小程序。最早支持Servlet技術(shù)的是JavaSoft的JavaWebServer。此后,一些其它的基于Java的WebServer開始支持標(biāo)準(zhǔn)的ServletAPI。Servlet的主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動(dòng)態(tài)Web內(nèi)容。這個(gè)過程為:1)客戶端發(fā)送請(qǐng)求至服務(wù)器端;2)服務(wù)器將請(qǐng)求信息發(fā)送至Servlet;3)Servlet生成響應(yīng)內(nèi)容并將其傳給服務(wù)器。響應(yīng)內(nèi)容動(dòng)態(tài)生成,通常取決于客戶端的請(qǐng)求;4)服務(wù)器將響應(yīng)返回給客戶端。Servlet看起來像是通常的Java程序。Servlet導(dǎo)入特定的屬于JavaServletAPI的包。因?yàn)槭菍?duì)象字節(jié)碼,可動(dòng)態(tài)地從網(wǎng)絡(luò)加載,可以說Servlet對(duì)Server就如同Applet對(duì)Client一樣,但是,由于Servlet運(yùn)行于Server中,它們并不需要一個(gè)圖形用戶界面。從這個(gè)角度講,Servlet也被稱為FacelessObject。一個(gè)Servlet就是Java編程語言中的一個(gè)類,它被用來擴(kuò)展服務(wù)器的性能,服務(wù)器上駐留著可以通過“請(qǐng)求-響應(yīng)”編程模型來訪問的應(yīng)用程序。雖然Servlet可以對(duì)任何類型的請(qǐng)求產(chǎn)生響應(yīng),但通常只用來擴(kuò)展Web服務(wù)器的應(yīng)用程序。5.3.4JavaScriptJavaScript一種直譯式腳本語言,是一種動(dòng)態(tài)類型、弱類型、基于原型的語言,內(nèi)置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語言,最早是在HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)網(wǎng)頁上使用,用來給HTML網(wǎng)頁增加動(dòng)態(tài)功能。5.3.5AjaxAJAX即“AsynchronousJavascriptAndXML”(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。AJAX=異步JavaScript和XML(標(biāo)準(zhǔn)通用標(biāo)記語言的子集)。AJAX是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁的技術(shù)。通過在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX可以使網(wǎng)頁實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁的情況下,對(duì)網(wǎng)頁的某部分進(jìn)行更新。傳統(tǒng)的網(wǎng)頁(不使用AJAX)如果需要更新內(nèi)容,必須重載整個(gè)網(wǎng)頁頁面。5.3.6HibernateHibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來操縱數(shù)據(jù)庫。Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。5.3.7SpringSpring是一個(gè)開源框架,Spring是于2003年興起的一個(gè)輕量級(jí)的Java開發(fā)框架,由RodJohnson在其著作ExpertOne-On-OneJ2EEDevelopmentandDesign中闡述的部分理念和原型衍生而來。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的??蚣艿闹饕獌?yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許使用者選擇使用哪一個(gè)組件,同時(shí)為J2EE應(yīng)用程序開發(fā)提供集成的框架。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。Spring的核心是控制反轉(zhuǎn)(IoC)和面向切面(AOP)。簡(jiǎn)單來說,Spring是一個(gè)分層的JavaSE/EEfull-stack(一站式)輕量級(jí)開源框架。5.3.8SpringMVCSpringMVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在SpringWebFlow里面。Spring框架提供了構(gòu)建Web應(yīng)用程序的全功能MVC模塊。使用Spring可插入的MVC架構(gòu),可以選擇是使用內(nèi)置的SpringWeb框架還可以是Struts這樣的Web框架。6系統(tǒng)測(cè)試圖6-1系統(tǒng)首頁圖6-2未登錄狀態(tài)下位置為首頁的頭文件圖6-3未登錄狀態(tài)下進(jìn)入貼吧后的頭文件圖6-4已登錄狀態(tài)下進(jìn)入貼吧后的頭文件圖6-5已登錄狀態(tài)下進(jìn)入貼吧后的頭文件圖6-6系統(tǒng)首頁-貼吧搜索圖6-7用戶注冊(cè)圖6-8查看用戶信息圖6-9修改用戶信息圖6-10創(chuàng)建貼吧圖6-11查看貼吧信息圖6-12修改貼吧信息圖6-13進(jìn)入新建的貼吧圖6-14發(fā)表了一個(gè)新的帖子圖6-15多個(gè)用戶發(fā)表了多個(gè)帖子圖6-16用戶發(fā)表了信息圖6-17查看系統(tǒng)提醒圖6-18查看系統(tǒng)提醒對(duì)本系統(tǒng)功能進(jìn)行的全面測(cè)試結(jié)果顯示,本系統(tǒng)較為健壯,無明顯BUG。任何一個(gè)系統(tǒng)的正確運(yùn)行都是建立在多次測(cè)試的基礎(chǔ)上的,只有經(jīng)過多次測(cè)試才可以發(fā)現(xiàn)系統(tǒng)存在的漏洞或設(shè)計(jì)缺陷。本論壇系統(tǒng)在不斷的調(diào)試過程中也或多或少地遇到一些問題,但最終基本一一解決,主要?dú)w納為以下幾點(diǎn):實(shí)時(shí)性問題。由于本系統(tǒng)是B/S模式的,所以系統(tǒng)的響應(yīng)速度是很重要的,當(dāng)有大量的用戶同時(shí)訪問時(shí),這樣系統(tǒng)的響應(yīng)速度必然下降。本系統(tǒng)在設(shè)計(jì)階段就考慮了這方面的問題,其中最主要的解決方法就是盡量減少客戶端和服務(wù)器間的通信,把一些能在客戶端完成的驗(yàn)證都放在客戶端驗(yàn)證,盡可能多的使用本地的腳本語言,這樣客戶端和服務(wù)器端的通信量就會(huì)大大減少,服務(wù)器的響應(yīng)效率會(huì)提高很多。密碼加密問題。如果數(shù)據(jù)庫信息泄漏,可能造成很大的損失。所以對(duì)用戶密碼進(jìn)行加密顯得尤其重要,這里采用了MD5算法進(jìn)行加密。存入數(shù)據(jù)庫的用戶密碼都是經(jīng)過加密后的密文,登錄時(shí)驗(yàn)證輸入密碼加密后的密文與數(shù)據(jù)庫密文的一致性。信息更新問題。由于系統(tǒng)是以對(duì)象的形式傳遞數(shù)據(jù),所以一些不提供修改的屬性將會(huì)被賦null值,導(dǎo)致傳入后臺(tái)提交操作后信息丟失。在Dao層更新信息的方法里查找相應(yīng)信息并將其組成一個(gè)舊對(duì)象,把新對(duì)象的不為null的屬性值賦給舊對(duì)象,再用舊對(duì)象取更新數(shù)據(jù)庫,既可解決這個(gè)問題。提到判定問題。由于一開始的正則表達(dá)式選用不恰當(dāng),所以當(dāng)用戶發(fā)信息提到他人時(shí),系統(tǒng)檢測(cè)信息不準(zhǔn)確,取不到被提到的用戶,在顯示信息時(shí),同樣加不上A標(biāo)簽。在修正了正則表達(dá)式后,問題得以解決。

結(jié)束語在經(jīng)歷了三個(gè)月左右的時(shí)間后,本系統(tǒng)的開發(fā)工作基本算是結(jié)束了,在本系統(tǒng)里,其實(shí)還是有很多的缺陷與不足沒有來得及修正。不過我在之后還是會(huì)針對(duì)這些不足作修改的。畢業(yè)設(shè)計(jì)就是對(duì)學(xué)生近四年來的學(xué)習(xí)成果在專業(yè)方面做了一次比較針對(duì)性的全面的測(cè)試。我學(xué)的專業(yè)以及方向是軟件工程的WEB方向,我比較擅長使用Java進(jìn)行WEB項(xiàng)目的開發(fā)。我見有好多人在做各種各樣的購物系統(tǒng),再加上我也做過購物系統(tǒng)了,再做的話沒有什么新意,所以我選了一個(gè)BBS論壇系統(tǒng)。我平時(shí)接觸百度貼吧比較多,對(duì)其功能等較為熟悉,而且百度貼吧其實(shí)也是一種新形態(tài)的論壇系統(tǒng),其開放關(guān)鍵詞的思想非常利于論壇的擴(kuò)展,所以我本次畢業(yè)設(shè)計(jì)的目標(biāo)就是模仿百度貼吧,做一個(gè)實(shí)現(xiàn)了其基本功能的貼吧系統(tǒng)。出于對(duì)百度貼吧設(shè)計(jì)者的敬意以及可能會(huì)造成的法律問題,所以我把系統(tǒng)起名為“十度貼吧”?,F(xiàn)在比較先進(jìn)和流行的開發(fā)框架中有一款非常優(yōu)秀,那就是SpringMVC,我在實(shí)習(xí)公司里見到的很多項(xiàng)目也使用了這個(gè)框架,所以我借此機(jī)會(huì)學(xué)習(xí)一下它。經(jīng)過簡(jiǎn)單的學(xué)習(xí),我開始了這個(gè)項(xiàng)目的設(shè)計(jì)與開發(fā)。由于我現(xiàn)在能力有限,認(rèn)識(shí)不足,對(duì)該框架的使用僅僅限于頁面的跳轉(zhuǎn)與傳值。不過,在經(jīng)過各種嘗試與失敗之后,我收獲挺多的,在我心里真切的體會(huì)到了這個(gè)框架的人性化設(shè)計(jì),以及它功能的強(qiáng)大,以后我會(huì)更多的使用它,深入的了解它,我已經(jīng)愛上了它。在數(shù)據(jù)持久化方面,我使用的是Oracle數(shù)據(jù)庫的XE快捷版,因?yàn)榈侥壳盀橹?,雖然接觸使用過好幾種數(shù)據(jù)庫軟件,但是我最熟悉的還是Oracle。在程序里,我使用的是Hibernate框架來做數(shù)據(jù)的持久化,本來我想試一試Mybatis的,但是考慮到這個(gè)框架一點(diǎn)都沒接觸過,而且簡(jiǎn)單學(xué)過的Hibernate框架還在一邊半生不熟,掌握的不怎么樣,所以我就決定使用Hibernate了。經(jīng)過這次畢設(shè),我對(duì)Hibernate又有了進(jìn)一步的認(rèn)識(shí),了解了一些其他的使用方法,還想明白了很多使用習(xí)慣的原因,收獲也是挺大的,我相信這一定能為我之后學(xué)習(xí)Mybatis提供借鑒。在真正進(jìn)行功能模塊設(shè)計(jì)開發(fā)的時(shí)候,也是由于考慮不是很周全,做過幾次大翻工,各方面的翻工表明了一個(gè)事實(shí),那就是我做分析與設(shè)計(jì)的時(shí)候還是不夠重視,不夠認(rèn)真,雖然我明明知道分析與設(shè)計(jì)非常重要,但是結(jié)果卻還是這樣。我總結(jié)了一下,不夠認(rèn)真,經(jīng)驗(yàn)不足,表面原因應(yīng)該就是這樣了。再進(jìn)一步,其實(shí)我的心態(tài)有問題,當(dāng)時(shí)確定下這個(gè)題目的時(shí)候,我就根據(jù)我的能力大概想了下,認(rèn)為這個(gè)項(xiàng)目應(yīng)該沒多大問題,大的架構(gòu)上沒什么問題,但是我在小細(xì)節(jié)上自大了,思考的比較隨便,考慮不周全,以后一定會(huì)注意。前臺(tái)的頁面設(shè)計(jì)問題不是很大,主要就是模仿百度貼吧的風(fēng)格。但是,在開發(fā)的時(shí)候,實(shí)在是叫我頭疼,各種問題頻出,各種意外不斷。我本人對(duì)前臺(tái)技能掌握不好,不擅長開發(fā)前臺(tái)。像div標(biāo)簽,JQuery等的使用都是只知皮毛,所以很多本來用這些能很容易解決的問題,到我這里可能繞很多彎路才能處理掉,最郁悶的是,不少問題得花很多時(shí)間,幾個(gè)小時(shí)算是短的...以前做的項(xiàng)目前臺(tái)頁面都是已經(jīng)做好的,我需要做的就是把后臺(tái)得到的數(shù)據(jù)插入進(jìn)去。這回叫我自己來做前臺(tái)真是不容易,我打算在畢設(shè)結(jié)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論