版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
畢業(yè)設(shè)計(論文)論文題目基于WEB的易語言論壇系統(tǒng)的設(shè)計與實現(xiàn)thesisTopicDesignandImplementationforBBSSystembasedonWEB學生姓名學號所在院系軟件工程學院專業(yè)班級軟件工程1102班導師姓名職稱完成日期2015年5月18日2015年5月18日編號:__________畢業(yè)設(shè)計(論文)答辯許可證軟件工程學院軟件工程系軟件工程專業(yè)學生所編寫的畢業(yè)設(shè)計(論文)56頁,字數(shù)22874,符合畢業(yè)設(shè)計(論文)大綱的要求。經(jīng)審查:該生已學完教學計劃規(guī)定的全部課程,成績合格,畢業(yè)設(shè)計電子文檔最后一稿已交,準予參加畢業(yè)設(shè)計(論文)答辯。相關(guān)材料材料名稱數(shù)量畢業(yè)設(shè)計(論文)1冊畢業(yè)論文縮寫1冊答辯匯報稿1份畢業(yè)設(shè)計(論文)電子版(最后一稿磁盤文件)1套指導教師:(簽名)院長(系主任):(簽名)年月日畢業(yè)設(shè)計(論文)任務(wù)書畢業(yè)設(shè)計(論文)題目:基于WEB的易語言論壇系統(tǒng)的設(shè)計與實現(xiàn)畢業(yè)設(shè)計(論文)要求及原始數(shù)據(jù)(資料):(1)綜述國內(nèi)JavaEEWEB應(yīng)用開發(fā)技術(shù)的現(xiàn)狀,了解JavaEEWEB項目開發(fā)的相關(guān)技術(shù)。(2)掌握JavaEEWEB項目開發(fā)的基礎(chǔ)知識與基本能力,掌握SpringMVC與Hibernate兩大框架技術(shù),掌握使用框架技術(shù)開發(fā)JavaEEWEB項目的能力。(3)設(shè)計并實現(xiàn)一個基于WEB的論壇系統(tǒng)項目,總結(jié)通過此次項目實戰(zhàn)在知識與技能方面的收獲。(4)訓練檢索文件和利用文獻資料的能力,訓練撰寫技術(shù)文檔與學位論文的能力。(5)題目:應(yīng)簡潔、明確、有概括性,字數(shù)不宜超過20個字;(6)摘要:要有高度的概括力,語言精練、明確,中文摘要約300字;(7)關(guān)鍵詞:從論文標題或正文中挑選3~5個,最能表達主要內(nèi)容的詞作為關(guān)鍵詞(8)目錄:寫出目錄,標明頁碼;(9)正文:本科畢業(yè)論文正文字數(shù)一般應(yīng)在25000字以上,畢業(yè)論文正文:包括前言、本論、結(jié)論三個部分:
前言(引言)是論文的開頭部分,主要說明論文寫作的目的、現(xiàn)實意義、對所研究問題的認識,并提出論文的中心論點等。前言要寫得簡明扼要,篇幅不要太長。
本論是畢業(yè)論文的主體,包括相關(guān)需求分析,設(shè)計,編碼,測試,界面體現(xiàn),流程介紹等,主要是界面設(shè)計和代碼的編寫及效果體現(xiàn)。
結(jié)論是畢業(yè)論文的收尾部分,是圍繞本論所作的結(jié)束語。其基本的要點就是總結(jié)全文,加深題意。
(10)謝辭:簡述自己通過做畢業(yè)論文的體會,并應(yīng)對指導教師和協(xié)助完成論文的有關(guān)人員表示謝意;
(11)參考文獻:在畢業(yè)論文末尾要列出在論文中參考過的專著、論文及其他資料,所列參考文獻應(yīng)按文中參考或引證的先后順序排列;
畢業(yè)設(shè)計(論文)主要內(nèi)容:1.描述國內(nèi)網(wǎng)上論壇系統(tǒng)的現(xiàn)狀;2.綜述國內(nèi)JavaEEWEB應(yīng)用開發(fā)技術(shù)的概況;3.簡單介紹JavaEEWEB項目開發(fā)的相關(guān)技術(shù);4.描述框架技術(shù)在JavaEEWEB項目開發(fā)的重要性;5.描述本項目開發(fā)環(huán)境的配置與項目運行的部署;6.分析本項目需要的功能并做出相應(yīng)的設(shè)計;7.實現(xiàn)本項目的所有功能并保證足夠的健壯性;8.總結(jié)通過本項目所獲得的知識與技能的提升;學生應(yīng)交出的設(shè)計文件(論文):1.內(nèi)容完整、層次清晰、敘述流暢、排版規(guī)范的畢業(yè)設(shè)計論文;2.包括畢業(yè)設(shè)計論文、源程序等內(nèi)容在內(nèi)的畢業(yè)設(shè)計電子文檔及其它相關(guā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].清華大學出版社,2004[6]林信良.JSP&Servlet學習筆記[M].清華大學出版社,2012,5[7]孫衛(wèi)琴.精通hibernate[M].電子工業(yè)出版社,2005,4[8]林寒超,張南平.Hibernate技術(shù)的研究[J].計算機技術(shù)與發(fā)展,2006,16(11)[9]畢建信.基于MVC設(shè)計模式的Web應(yīng)用研究與實現(xiàn)[D].武漢理工大學,2006,5[10]威爾德,斯尼德等著,趙利通譯.SpringFramework2入門經(jīng)典[M].清華大學出版社,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è)班級軟件工程1102班學生姓名:要求設(shè)計(論文)工起止日期:2015年3月23日~2015年7月3日指導教師簽字:日期:2015年3月23日教研室主任審查簽字:日期:系主任批準簽字:日期:基于WEB的易語言論壇系統(tǒng)的設(shè)計與實現(xiàn)摘要論壇,是Internet上的一種電子信息服務(wù)系統(tǒng)。它提供一塊公共電子白板,每個用戶都可以在上面書寫,可發(fā)布信息或提出看法。它是一種交互性強,內(nèi)容豐富而及時的Internet電子信息服務(wù)系統(tǒng),用戶在BBS站點上可以獲得各種信息服務(wù)、發(fā)布信息、進行討論、聊天等等。貼吧,是一種基于關(guān)鍵詞的主題交流社區(qū),它與搜索緊密結(jié)合,準確把握用戶需求,為興趣而生。貼吧的使命是讓志同道合的人相聚。貼吧的組建依靠搜索引擎關(guān)鍵詞,不論是大眾話題還是小眾話題,都能精準地聚集大批同好網(wǎng)友,它為人們提供了一個表達和交流思想的自由網(wǎng)絡(luò)空間,并以此匯集志同道合的網(wǎng)友。本系統(tǒng)借鑒貼吧基于關(guān)鍵詞交流的思想,擴大了論壇的現(xiàn)有功能,使之不僅僅局限于定義好的的關(guān)鍵詞。用戶可以創(chuàng)建原本不存在的關(guān)鍵詞主題站,可以針對任何感興趣的主題在相應(yīng)的主題站里發(fā)表帖子,瀏覽帖子,參與討論,擴寬了獲取信息的渠道,真正做到了信息共享。系統(tǒng)采用了JSP、Ajax、Servlet以及SpringMVC與Hibernate兩大框架技術(shù)實現(xiàn),實現(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)功能、性能及實現(xiàn)體統(tǒng)的各項約束條件,從技術(shù)的角度研究系統(tǒng)實現(xiàn)的可行性。本系統(tǒng)使用Java語言開發(fā),同時采用了html,jsp,css,javascript,Ajax,servlet以及SpringMVC與Hibernate兩大框架技術(shù),在數(shù)據(jù)庫上采用的是Oracle數(shù)據(jù)庫,服務(wù)器采用的是Tomcat。本系統(tǒng)使用到了這些技術(shù),但是涉及卻不是很深,作者可憑借所學知識以及網(wǎng)絡(luò)來解決所遇見的問題。2.3運行可行性分析運行可行性研究內(nèi)容包括新系統(tǒng)規(guī)定的運行方式是否可行,如果新系統(tǒng)是建立在原來已擔負起它任務(wù)的計算機系統(tǒng)上的,就不能要求它在實時在線狀態(tài)下運行,以免與原有的任務(wù)相矛盾。另外就是用戶是否可以熟練的運用它。本系統(tǒng)最終將會運行在本地計算機上,即使需要聯(lián)網(wǎng)運行,也可以使用花生殼軟件來映射內(nèi)網(wǎng),達到使用域名訪問該系統(tǒng)的效果。本地計算機只負擔該項目一個運行任務(wù),而且本系統(tǒng)的用戶量也很少,所以運行在本地計算機上沒有任何問題。2.4法律可行性分析法律可行性是指研究在系統(tǒng)開發(fā)過程中可能涉及的各種合同、侵權(quán)、責任以及各種與法律相抵觸的問題。本系統(tǒng)在開發(fā)過程中使用的都是免費的開源的軟件以及代碼,所參考的資料也是免費的或者是通過付費獲得的,所以不會涉及任何法律相關(guān)的問題。2.5開發(fā)方案可行性提出系統(tǒng)實現(xiàn)的各種方案并進行評價之后,從中選擇一種最優(yōu)秀的方案。本系統(tǒng)經(jīng)過了作者深思熟慮,結(jié)合作者之前在其他項目上的開發(fā)經(jīng)驗,最終確定下了一套開發(fā)方案,這套開發(fā)方案完全可行。3需求分析需求分析是在軟件開發(fā)的初始階段進行,它對于整個軟件開發(fā)過程以及軟件開發(fā)后質(zhì)量是舉足輕重的。隨著軟件系統(tǒng)復雜性的提高及規(guī)模的擴大,需求分析在軟件開發(fā)中所處的地位愈加突出。所謂需求,是指用戶對目標軟件系統(tǒng)在功能、行為、性能設(shè)計約束等方面的要求。在需求分析的研究中,系統(tǒng)開發(fā)人員必須對用戶的需求進行調(diào)查和分析,結(jié)合實際環(huán)境的特征,正確定義目標軟件的特征。所謂需求分析,是指對要解決的問題進行詳細的分析,弄清楚問題的要求,包括需要輸入什么數(shù)據(jù),要得到什么結(jié)果,最后應(yīng)輸出什么??梢哉f,在軟件工程當中的“需求分析”就是確定要計算機“做什么”,要達到什么樣的效果??梢哉f需求分析是做系統(tǒng)之前必做的。3.1需求采集在軟件工程中,需求分析指的是在建立一個新的或改變一個現(xiàn)存的電腦系統(tǒng)時描寫新系統(tǒng)的目的、范圍、定義和功能時所要做的所有的工作。需求分析是軟件工程中的一個關(guān)鍵過程。在這個過程中,系統(tǒng)分析員和軟件工程師確定顧客的需要。只有在確定了這些需要后,他們才能夠分析和尋求新系統(tǒng)的解決方法。需求分析階段的任務(wù)是確定軟件系統(tǒng)功能。3.1.1功能需求就本系統(tǒng)來說,本系統(tǒng)屬于BBS系統(tǒng),而且結(jié)合了百度貼吧開放關(guān)鍵詞的設(shè)計模式,應(yīng)該具備如下功能,現(xiàn)在按照游客與會員(登錄用戶)來介紹。游客:是指一些訪問本系統(tǒng)的時候沒有進行過登錄操作的用戶。游客只有查詢的權(quán)限,可以訪問本系統(tǒng)包含的所有貼吧,可以瀏覽某個貼吧的所有的帖子,但是游客沒有執(zhí)行任何操作的權(quán)限,游客不能創(chuàng)建新的貼吧,不能發(fā)表新的帖子,不能回復已有的帖子。游客可以通過系統(tǒng)提供的注冊頁面來獲得系統(tǒng)承認的賬號,通過賬號登錄本系統(tǒng),以獲得與會員一致的權(quán)限。會員:會員是本系統(tǒng)的核心用戶,他們參與在貼吧建設(shè)的方方面面。會員在擁有游客的所有權(quán)限的同時,還擁有更多與系統(tǒng)進行交互的權(quán)限。會員可以更新自己賬號的信息,可以創(chuàng)建暫不存在的貼吧,可以在任何貼吧發(fā)表新的帖子,可以回復任何已存在的帖子。會員們可以通過帖子進行交流,當有會員與你發(fā)生信息交互時,系統(tǒng)會給出相對應(yīng)的通知,而會員也可以通過查看通知來獲得信息詳情。管理員用戶,即吧主,也是會員,是某一個貼吧的管理者,肩負著壯大該貼吧的責任。會員可以通過創(chuàng)建一個貼吧來成為該貼吧的吧主,擁有該貼吧的最高權(quán)限??梢孕薷脑撡N吧的信息,可以管理本吧的帖子。吧主僅僅在屬于其自己的貼吧才是吧主,到了別的貼吧,其權(quán)限就會變成普通會員。此外,吧主還擁有著游客和會員的所有權(quán)限。3.1.2性能需求本系統(tǒng)是BBS論壇系統(tǒng),為了給用戶較好的體驗,需要本系統(tǒng)響應(yīng)快速,所以在此對硬件及軟件做了需求分析。硬件環(huán)境:處理器:Inter酷睿i5或更高內(nèi)存大小:4GB或更高硬盤空間:10GB或更高軟件環(huán)境:操作系統(tǒng):Win7或更高服務(wù)器:Tomcat6.0或更高數(shù)據(jù)庫:OracleDatabase10G或更高3.2功能模塊畫出功能模塊圖是軟件工程過程中的一個重要環(huán)節(jié),它將顯示出工程所要實現(xiàn)的各種功能,并分類,然后軟件工程師根據(jù)功能模塊圖來通過代碼具體實現(xiàn)這些功能。功能模塊圖就是講系統(tǒng)的功能進行分解,按功能從屬關(guān)系表示的圖表。管理系統(tǒng)的各子系統(tǒng)可以看作是系統(tǒng)目標下層的功能,對其中每項功能可以繼續(xù)分解為第三、第四,甚至更多的功能。圖中的每一個框都稱為一個功能模塊,其功能根據(jù)實際情況分的大小不完全相同。圖3-1貼吧系統(tǒng)用戶類型及對應(yīng)功能概覽圖3.2.1基本功能設(shè)計通過需求分析,論壇的基本功能可以從眾多的需求中篩選出來。顧名思義,基本功能就是構(gòu)成論壇系統(tǒng)的必要功能,具備這些功能的Web系統(tǒng)即是論壇。瀏覽帖子。發(fā)表了帖子,就要供他人瀏覽查看,與他人分享自己的想法和經(jīng)驗。發(fā)表帖子。論壇最初是為了相互討論話題而誕生的,發(fā)表帖子就是表達自己的看法,與他人進行討論,因此發(fā)帖是論壇首要的功能?;貜吞?。瀏覽了他人發(fā)表的帖子,想要發(fā)表自己的想法,參與討論,就可以回復這個帖子。其實,瀏覽帖子→發(fā)表帖子→回復帖子三大功能周而復始的循環(huán)進行,就構(gòu)成論壇。每個參與論壇的人,主要目的就是發(fā)帖,查看已經(jīng)發(fā)表的帖子,針對自己感興趣的帖子進行回帖,參與討論。三大基本功能的相互關(guān)系如圖發(fā)表帖子帖子列表發(fā)表帖子帖子列表瀏覽帖子回復帖子瀏覽帖子回復帖子圖3-2貼吧系統(tǒng)基本功能相互關(guān)系圖3.2.2擴展功能設(shè)計除了基本功能之外,其他的論壇功能都是擴展功能。注冊登錄。用戶登錄系統(tǒng)之后,用戶信息被系統(tǒng)讀取到,用戶執(zhí)行操作的時候,系統(tǒng)直接獲取這個信息,所以會員的權(quán)限比游客高。分板塊瀏覽帖子。其實不同的貼吧就是不同的板塊,在某一個主題為某關(guān)鍵詞的貼吧里只討論與該關(guān)鍵詞相關(guān)的話題。這樣,就使得對某一話題感興趣的用戶不會被其他帖子干擾,也有利于相同興趣的用戶相互間討論,不易跑題。查看用戶信息。每一個用戶可以查看所有用戶的信息。刪除帖子。如果用戶發(fā)表了不符合論壇規(guī)則的帖子,則需要管理員刪除這些帖子,這就引出了刪除帖子的擴展功能。置頂帖子。帖子一般是根據(jù)發(fā)表以及回復時間到序排列的,這樣先發(fā)的帖子就慢慢排到后面,管理員如果需要強調(diào)某些帖子重要,又必看性,就要打亂默認的排列順序,將這些帖子放在列表的最前端,不再按照時間進行順序的變化,但是還要保證其他帖子按照時間變化順序進行排列,這就引出了置頂帖子的擴展功能。精華帖子。如果管理員認為某個帖子的內(nèi)容非常好,可以打上標記,推薦給看帖的用戶,這就引出了指定精華帖的擴展功能。用戶可以選擇只看打上標記的精華帖。搜索帖子。論壇中的帖子越來越多,用戶需要從大量的帖子中找到自己需要的內(nèi)容,這就引出了搜索帖子的擴展功能。設(shè)置參數(shù)。論壇一般有一些初始化信息,比如論壇名稱,每頁顯示帖子數(shù)量等參數(shù)信息,用戶可以在頁面底部設(shè)置這些信息。查看通知信息。比如說管理員刪帖,刪帖后系統(tǒng)會提醒發(fā)帖用戶。查看回復信息。在用戶發(fā)帖或回帖之后,被其它用戶回帖,系統(tǒng)也會給出相應(yīng)的提醒信息。查看提到情況。有時候別人發(fā)帖回特別提醒你一下(@用戶),系統(tǒng)也會做出相應(yīng)的提醒。4系統(tǒng)設(shè)計4.1數(shù)據(jù)庫表設(shè)計數(shù)據(jù)庫系統(tǒng)是在文件系統(tǒng)的基礎(chǔ)上發(fā)展而來的,經(jīng)歷了層次數(shù)據(jù)庫、網(wǎng)狀數(shù)據(jù)庫、關(guān)系數(shù)據(jù)庫三個階段。由于關(guān)系數(shù)據(jù)庫采用人們比較容易理解和接受的二維表格來組織數(shù)據(jù),發(fā)展迅速,已成為數(shù)據(jù)庫產(chǎn)品的主流。本次系統(tǒng)設(shè)計所使用的數(shù)據(jù)庫就是關(guān)系數(shù)據(jù)庫Oracle。Oracle數(shù)據(jù)庫管理系統(tǒng)是一項全面完整的數(shù)據(jù)庫與分析產(chǎn)品。Oracle容易學習、使用,介紹、學習資料比較多,Oracle全面支持Web功能的數(shù)據(jù)庫解決方案。與此同時,Oracle11g提供了高性能、伸展性、可用性和安全性,并能更方便地在低成本服務(wù)器和存儲設(shè)備組成的網(wǎng)絡(luò)上運行,相對過往版本而言,Oracle11g具有了于總不同的特性,這也是企業(yè)數(shù)據(jù)庫系統(tǒng)在激烈市場競爭中克敵制勝的關(guān)鍵所在。正是由于Oracle和其它的大型數(shù)據(jù)庫相比較,Oracle具有可靠的安全性、較快的存儲速度、高度的兼容性和可擴展性、數(shù)據(jù)的大量性、數(shù)據(jù)保存的持久性、數(shù)據(jù)的共享性、簡單易用等等一系列的特性。因此,我采用了Oracle11g作為后臺的數(shù)據(jù)庫。本系統(tǒng)的數(shù)據(jù)庫暫時包含了7張表,分別為TABLE_MEMBER,TABLE_LEVEL,TABLE_TIEBA,TABLE_TIEZI,TABLE_FLOOR,TABLE_MESSAGE,TABLE_REMIND。他們之間存在一些依賴或包含的關(guān)系,系統(tǒng)可以有很多貼吧,每個貼吧下可以有很多帖子,每個帖子下可以有很多層樓,每層樓又可以包含很多個信息。下面將對這幾張表作相應(yīng)的介紹。4.1.1ER圖分析E-R模型是對現(xiàn)實世界的一種抽象。它的主要成分是實體、聯(lián)系和屬性。使用這三種成分,我們可以建立許多應(yīng)用環(huán)境的ER模型。本系統(tǒng)的實體和屬性的定義如下:圖4-1會員信息實體圖圖4-2貼吧信息實體圖圖4-3帖子信息實體圖圖4-4樓層信息實體圖圖4-5信息信息實體圖圖4-6提心信息實體圖4.1.2數(shù)據(jù)庫表設(shè)計TABLE_MEMBER會員表字段描述字段名類型說明id_memberNUMBER(17)主鍵,會員id,根據(jù)注冊時間得到的17位數(shù)字usernameVARCHAR2(20)用戶名passwordVARCHAR2(32)密碼,MD5加密后為32位字符串phoneVARCHAR2(11)電話emailVARCHAR2(30)郵箱genderVARCHAR2(3)性別,只能為‘男’或‘女’birthdayVARCHAR2(10)生日,格式為‘yyyy-MM-dd’addressVARCHAR2(150)地址qqnumberVARCHAR2(11)QQ賬號signatureVARCHAR2(150)個性簽名experienceNUMBER(10)經(jīng)驗值roleNUMBER(1)角色,1.普通會員0.吧主,會員在每個吧的角色都不同,進入貼吧會自動更新statusNUMBER(1)狀態(tài),1.正常2.加黑3.封禁(有專門的加黑表,封禁表),會員在每個吧的這些狀態(tài)不同,進入貼吧會自動更新表4-1TABLE_MEMBER會員表關(guān)鍵建表語句CONSTRAINTpk_member_1PRIMARYKEY(id_member)TABLE_TIEBA貼吧表字段描述字段名類型說明id_tiebaNUMBER(17)主鍵,貼吧id,根據(jù)創(chuàng)建時間得到的17位數(shù)字id_memberNUMBER(17)外鍵,吧主id,根據(jù)注冊時間得到的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)建時間得到的17位數(shù)字id_tieziNUMBER(17)主鍵,帖子id,根據(jù)發(fā)帖時間得到的17位數(shù)字id_memberNUMBER(17)外鍵,會員id,根據(jù)注冊時間得到的17位數(shù)字name_memberVARCHAR2(20)會員用戶名,發(fā)帖用戶statusNUMBER(1)狀態(tài),1可視0不可視titleVARCHAR2(150)帖子標題表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)建時間得到的17位數(shù)字id_tieziNUMBER(17)主鍵,外鍵,帖子id,根據(jù)發(fā)帖時間得到的17位數(shù)字id_floorNUMBER(17)主鍵,樓層id,根據(jù)發(fā)帖時間得到的17位數(shù)字id_memberNUMBER(17)外鍵,會員id,根據(jù)注冊時間得到的17位數(shù)字name_memberVARCHAR2(20)會員用戶名,發(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)建時間得到的17位數(shù)字id_tieziNUMBER(17)主鍵,外鍵,帖子id,根據(jù)發(fā)帖時間得到的17位數(shù)字id_floorNUMBER(17)主鍵,外鍵,樓層id,根據(jù)發(fā)帖時間得到的17位數(shù)字id_messageNUMBER(17)主鍵,樓層id,根據(jù)發(fā)帖時間得到的17位數(shù)字id_fromNUMBER(17)外鍵,會員id,根據(jù)注冊時間得到的17位數(shù)字name_fromVARCHAR2(20)會員用戶名,信息發(fā)送人id_toNUMBER(17)外鍵,會員id,根據(jù)注冊時間得到的17位數(shù)字name_toVARCHAR2(20)會員用戶名,信息接收人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.回復3.提到id_remindNUMBER(17)主鍵,提醒id,根據(jù)創(chuàng)建時間得到的17位數(shù)字id_tiebaNUMBER(17)貼吧id,根據(jù)創(chuàng)建時間得到的17位數(shù)字nameVARCHAR2(30)貼吧名稱id_tieziNUMBER(17)帖子id,根據(jù)發(fā)帖時間得到的17位數(shù)字tieleVARCHAR2(150)帖子標題id_floorNUMBER(17)樓層id,根據(jù)發(fā)帖時間得到的17位數(shù)字id_messageNUMBER(17)信息id,根據(jù)創(chuàng)建時間得到的17位數(shù)字id_fromNUMBER(17)外鍵,會員id,根據(jù)注冊時間得到的17位數(shù)字name_form會員用戶名,提醒發(fā)送人id_toNUMBER(17)外鍵,會員id,根據(jù)注冊時間得到的17位數(shù)字name_to會員用戶名,提醒接收人statusNUMBER(1)狀態(tài),1.未讀0.已讀contentVARCHAR2(3000)提醒內(nèi)容表4-6TABLE_REMIND提醒表關(guān)鍵建表語句 CONSTRAINTpk_remind_12PRIMARYKEY(kind,id_remind)4.2功能設(shè)計4.2.1登錄注冊登錄與注冊功能幾乎是WEB項目里不可或缺的存在,當然本論壇系統(tǒng)也不例外。在本系統(tǒng)里,登錄注冊模塊完全獨立了出來,單獨設(shè)置成了一個JSP頁面,在其他所有頁面里面調(diào)用該頁面即可。系統(tǒng)會根據(jù)不同情況在session里面設(shè)置不同的參數(shù)以及相對應(yīng)的數(shù)據(jù),而本JSP頁面則會根據(jù)參數(shù)是否為空來選擇不同的顯示方式。而且本JSP頁面采用浮動技術(shù),會一直固定在頁面的最頂部,不會隨著頁面的滾動而移動。本JSP頁面會顯示貼吧名稱以及貼吧簽名信息,同時還兼具用戶登錄與注冊功能。其通過JQuery與Ajax來做登錄驗證。登錄成功后,會重新加載頁面,這樣很多游客不具備的權(quán)限都會隨著用戶的登錄而變得可視或可操作。用戶點擊了注冊按鈕,系統(tǒng)會跳轉(zhuǎn)到注冊頁面,用戶只需要填寫最關(guān)鍵的賬號,密碼,手機,郵箱,通過合法性驗證,即可完成注冊,其他信息可以在注冊之后完善,賬號一經(jīng)注冊不能修改。同時還會顯示未讀提醒的數(shù)量,點擊之后會跳轉(zhuǎn)到查看提醒頁面,這個在下面的查看提醒信息里會介紹到。4.2.2查看貼吧列表系統(tǒng)會將已存在的貼吧顯示在貼吧首頁,用戶可以通過點擊每一個貼吧的“進入貼吧”按鈕來跳轉(zhuǎn)到對應(yīng)貼吧的貼吧主頁,也可以通過點擊“查看貼吧信息”或“查看吧主信息”來查看用戶感興趣的信息。所有的貼吧按照創(chuàng)建時間從早到晚的順序排列,創(chuàng)建的越早則顯示的位置越靠前。用戶也可以通過在貼吧搜索框里面輸入貼吧名稱的關(guān)鍵字(關(guān)鍵字可以有多個,中間使用空格來區(qū)分),來查找相應(yīng)的貼吧,系統(tǒng)會把滿足搜索條件的貼吧全都列出來,顯示在貼吧列表之前,便于用戶查看。若是用戶沒有找到自己想要找的貼吧,也可以通過點擊“創(chuàng)建貼吧”按鈕來創(chuàng)建一個新的貼吧。如果貼吧創(chuàng)建成功,那么該用戶就會成為這個貼吧的吧主,擁有本吧里的最高權(quán)限,但是在其他非吧主的貼吧里,該用戶仍然只是普通會員,受該吧吧主的管制。4.2.3查看帖子列表用戶通過點擊“進入貼吧”按鈕,跳轉(zhuǎn)到某一個貼吧的首頁,該吧的所有的可視的帖子,都會被系統(tǒng)檢索到,然后顯示到這里。帖子的顯示分兩種,一種是置頂帖,一種是普通帖。置頂帖會優(yōu)先顯示到列表最頂端。兩種類型的帖子都會按照時間順序,較新的帖子會顯示在靠前的位置。游客與會員的功能第一次顯現(xiàn)差別,在這里登錄用戶可以直接發(fā)表新的帖子,可以刪除自己發(fā)的帖子,但是游客則沒有這樣的權(quán)限,必須得通過登錄系統(tǒng)才可以。4.2.4查看帖子詳情用戶通過點擊帖子列表頁面的任何一個帖子標題,即可進入查看該帖子的詳情。同樣,所有可視的信息都會被系統(tǒng)讀取到,然后顯示出來。在這里游客與登錄用戶的區(qū)別再一次體現(xiàn)了出來,游客只能瀏覽而不能回復,登錄用戶可以發(fā)表一個新的樓層,也可以在某個已有樓層下回復某一個用戶,也可以只回復層主,回復的樓層會顯示在當前帖子的最末樓,回復的信息會顯示在某一樓的最末信息位置。在這里,系統(tǒng)會根據(jù)登錄用戶與帖子的關(guān)系以及登錄用戶的權(quán)限來顯示不同的操作權(quán)限。首先是大前提,用戶不能回復自己,如果信息是樓層的第一條信息,那么不能刪除該信息,而只能刪除該樓層。其次是小限制,吧主擁有大前提下的最高權(quán)限,用戶(樓主)在自己發(fā)的貼子里擁有與吧主一致的權(quán)限,用戶(層主)在自己發(fā)的樓層里擁有與吧主一致的權(quán)限。用戶(發(fā)信息者)只對自己發(fā)的信息擁有與吧主一致的權(quán)限。4.2.5查看提醒信息提醒信息總共分為三種類型,通知提醒,回復提醒,提到提醒。通知提醒包括有管理員刪帖,管理員置頂帖,管理員精華帖等?;貜吞嵝丫褪怯袆e人對你的發(fā)言進行了回復后系統(tǒng)發(fā)給你的提醒,提到提醒就是別人發(fā)帖或回帖是特地@到你后體統(tǒng)發(fā)給你的提醒。在本系統(tǒng)中,提醒模塊所包含的內(nèi)容有:系統(tǒng)通知,回復我的,提到我的,我回復的,我提到的共5部分。5系統(tǒng)實現(xiàn)5.1功能實現(xiàn)1.本系統(tǒng)的前臺JSP頁面使用如下代碼重新設(shè)定了相對路徑。<%Stringpath=request.getContextPath(); StringbasePath= request.getScheme()+"://"+ request.getServerName()+":"+ request.getServerPort()+path+"/";%><basehref="<%=basePath%>">這樣把相對位置設(shè)置成了basePath,完美解決了相對位置發(fā)生改變導致頁面找不到的問題。2.本系統(tǒng)的服務(wù)器使用了80端口,并配置了如下信息重新設(shè)置了訪問地址。<ContextdocBase="Graduation"path=""reloadable="true" source="org.eclipse.jst.jee.server:Graduation"/>這樣只需要一個域名或IP地址就可以訪問到本項目了,不需要加端口號和項目名,設(shè)計比較人性化,測試也較為方便。5.1.1登錄注冊登錄: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("×"); }注冊: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)被注冊");}if(dao.findMemberByPhone(member.getPhone())!=null){ thrownewException("該手機號碼已經(jīng)被注冊");}if(dao.findMemberByEmail(member.getEmail().toUpperCase())!=null){ thrownewException("該郵箱已經(jīng)被注冊");}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ù)水平有限以及時間不足的原因,系統(tǒng)現(xiàn)在暫時還沒有圖片上傳功能,在圖片方面,我的設(shè)計初衷就是用戶注冊以及貼吧創(chuàng)建的時候,必須同時上傳一張圖片作為用戶頭像和貼吧Logo,還有用戶發(fā)帖子的時候也可以上傳圖片,這個功能在接下來的時間里我還是會集成到現(xiàn)有系統(tǒng)里面去的。還有一點,就是分頁設(shè)計功能,目前還處于研發(fā)之中?,F(xiàn)在已經(jīng)在測試項目里面實現(xiàn)了這個功能,但是代碼比較分散,JSP頁面里面有,后臺Servlet里面也有,想要往本系統(tǒng)里面集成實在是不易。所以我將會在后續(xù)的修改中,繼續(xù)加油,盡量把分頁功能整合一下。一次實現(xiàn),多次調(diào)用。把本系統(tǒng)里面涉及到分頁功能的地方,全部替換掉。5.3相關(guān)技術(shù)本項目是一個動態(tài)WEB項目,系統(tǒng)采用SpringMVC框架實現(xiàn)了頁面的切換和數(shù)據(jù)的傳遞,采用Hibernate框架實現(xiàn)了數(shù)據(jù)的持久化操作,前臺頁面采用JSP技術(shù)編寫,其數(shù)據(jù)合法性采用了JavaScript,JQuery和Ajax技術(shù),結(jié)合后臺Sertlet進行驗證。現(xiàn)在簡單介紹一下這些技術(shù)以及系統(tǒng)詳細設(shè)計。5.3.1JavaEEWEBJavaEE(JavaPlatform,EnterpriseEdition)是sun公司(2009年4月20日甲骨文將其收購)推出的企業(yè)級應(yīng)用程序版本。這個版本以前稱為J2EE。能夠幫助我們開發(fā)和部署可移植、健壯、可伸縮且安全的服務(wù)器端Java應(yīng)用程序。JavaEE是在JavaSE的基礎(chǔ)上構(gòu)建的,它提供Web服務(wù)、組件模型、管理和通信API,可以用來實現(xiàn)企業(yè)級的面向服務(wù)體系結(jié)構(gòu)(service-orientedarchitecture,SOA)和Web2.0應(yīng)用程序。在當今網(wǎng)絡(luò)時代,無論是因特網(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è)級應(yīng)用對系統(tǒng)各方面的性能要求越來越高,特別是速度、安全、可靠性以及分布式應(yīng)用等方面,在一定程度上決定著系統(tǒng)能否成功。在這些要求的共同作用下,SUN的JavaEE(Java平臺企業(yè)版)規(guī)范利用Java編程語言和企業(yè)API的強大功能,包括EJB技術(shù),提供了一種業(yè)界領(lǐng)先的Web編程技術(shù)平臺。JAVAEEWEB編程技術(shù)已成為計算機領(lǐng)域中最重要的的技術(shù)之一,它是軟件學科中一個不可或缺的分支,是計算機專業(yè)和信息管理專業(yè)一門專業(yè)基礎(chǔ)課,越來越多的人都開始學習JAVAEEWEB編程技術(shù)。5.3.2JSPJSP全名為JavaServerPages,中文名叫java服務(wù)器頁面,其根本是一個簡化的Servlet設(shè)計,它[1]是由SunMicrosystems公司倡導、許多公司參與一起建立的一種動態(tài)網(wǎng)頁技術(shù)標準。JSP技術(shù)有點類似ASP技術(shù),它是在傳統(tǒng)的網(wǎng)頁HTML(標準通用標記語言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件,后綴名為(*.jsp)。用JSP開發(fā)的Web應(yīng)用是跨平臺的,既能在Linux下運行,也能在其他操作系統(tǒng)上運行。它實現(xiàn)了Html語法中的java擴張(以<%,%>形式)。JSP與Servlet一樣,是在服務(wù)器端執(zhí)行的。通常返回給客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。JSP技術(shù)使用Java編程語言編寫類XML的tags和scriptlets,來封裝產(chǎn)生動態(tài)網(wǎng)頁的處理邏輯。網(wǎng)頁還能通過tags和scriptlets訪問存在于服務(wù)端的資源的應(yīng)用邏輯。JSP將網(wǎng)頁邏輯與網(wǎng)頁設(shè)計的顯示分離,支持可重用的基于組件的設(shè)計,使基于Web的應(yīng)用程序的開發(fā)變得迅速和容易。JSP(JavaServerPages)是一種動態(tài)頁面技術(shù),它的主要目的是將表示邏輯從Servlet中分離出來。JavaServlet是JSP的技術(shù)基礎(chǔ),而且大型的Web應(yīng)用程序的開發(fā)需要JavaServlet和JSP配合才能完成。JSP具備了Java技術(shù)的簡單易用,完全的面向?qū)ο?,具有平臺無關(guān)性且安全可靠,主要面向因特網(wǎng)的所有特點。5.3.3ServletServlet是在服務(wù)器上運行的小程序。最早支持Servlet技術(shù)的是JavaSoft的JavaWebServer。此后,一些其它的基于Java的WebServer開始支持標準的ServletAPI。Servlet的主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動態(tài)Web內(nèi)容。這個過程為:1)客戶端發(fā)送請求至服務(wù)器端;2)服務(wù)器將請求信息發(fā)送至Servlet;3)Servlet生成響應(yīng)內(nèi)容并將其傳給服務(wù)器。響應(yīng)內(nèi)容動態(tài)生成,通常取決于客戶端的請求;4)服務(wù)器將響應(yīng)返回給客戶端。Servlet看起來像是通常的Java程序。Servlet導入特定的屬于JavaServletAPI的包。因為是對象字節(jié)碼,可動態(tài)地從網(wǎng)絡(luò)加載,可以說Servlet對Server就如同Applet對Client一樣,但是,由于Servlet運行于Server中,它們并不需要一個圖形用戶界面。從這個角度講,Servlet也被稱為FacelessObject。一個Servlet就是Java編程語言中的一個類,它被用來擴展服務(wù)器的性能,服務(wù)器上駐留著可以通過“請求-響應(yīng)”編程模型來訪問的應(yīng)用程序。雖然Servlet可以對任何類型的請求產(chǎn)生響應(yīng),但通常只用來擴展Web服務(wù)器的應(yīng)用程序。5.3.4JavaScriptJavaScript一種直譯式腳本語言,是一種動態(tài)類型、弱類型、基于原型的語言,內(nèi)置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語言,最早是在HTML(標準通用標記語言下的一個應(yīng)用)網(wǎng)頁上使用,用來給HTML網(wǎng)頁增加動態(tài)功能。5.3.5AjaxAJAX即“AsynchronousJavascriptAndXML”(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。AJAX=異步JavaScript和XML(標準通用標記語言的子集)。AJAX是一種用于創(chuàng)建快速動態(tài)網(wǎng)頁的技術(shù)。通過在后臺與服務(wù)器進行少量數(shù)據(jù)交換,AJAX可以使網(wǎng)頁實現(xiàn)異步更新。這意味著可以在不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分進行更新。傳統(tǒng)的網(wǎng)頁(不使用AJAX)如果需要更新內(nèi)容,必須重載整個網(wǎng)頁頁面。5.3.6HibernateHibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。5.3.7SpringSpring是一個開源框架,Spring是于2003年興起的一個輕量級的Java開發(fā)框架,由RodJohnson在其著作ExpertOne-On-OneJ2EEDevelopmentandDesign中闡述的部分理念和原型衍生而來。它是為了解決企業(yè)應(yīng)用開發(fā)的復雜性而創(chuàng)建的??蚣艿闹饕獌?yōu)勢之一就是其分層架構(gòu),分層架構(gòu)允許使用者選擇使用哪一個組件,同時為J2EE應(yīng)用程序開發(fā)提供集成的框架。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。Spring的核心是控制反轉(zhuǎn)(IoC)和面向切面(AOP)。簡單來說,Spring是一個分層的JavaSE/EEfull-stack(一站式)輕量級開源框架。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)測試圖6-1系統(tǒng)首頁圖6-2未登錄狀態(tài)下位置為首頁的頭文件圖6-3未登錄狀態(tài)下進入貼吧后的頭文件圖6-4已登錄狀態(tài)下進入貼吧后的頭文件圖6-5已登錄狀態(tài)下進入貼吧后的頭文件圖6-6系統(tǒng)首頁-貼吧搜索圖6-7用戶注冊圖6-8查看用戶信息圖6-9修改用戶信息圖6-10創(chuàng)建貼吧圖6-11查看貼吧信息圖6-12修改貼吧信息圖6-13進入新建的貼吧圖6-14發(fā)表了一個新的帖子圖6-15多個用戶發(fā)表了多個帖子圖6-16用戶發(fā)表了信息圖6-17查看系統(tǒng)提醒圖6-18查看系統(tǒng)提醒對本系統(tǒng)功能進行的全面測試結(jié)果顯示,本系統(tǒng)較為健壯,無明顯BUG。任何一個系統(tǒng)的正確運行都是建立在多次測試的基礎(chǔ)上的,只有經(jīng)過多次測試才可以發(fā)現(xiàn)系統(tǒng)存在的漏洞或設(shè)計缺陷。本論壇系統(tǒng)在不斷的調(diào)試過程中也或多或少地遇到一些問題,但最終基本一一解決,主要歸納為以下幾點:實時性問題。由于本系統(tǒng)是B/S模式的,所以系統(tǒng)的響應(yīng)速度是很重要的,當有大量的用戶同時訪問時,這樣系統(tǒng)的響應(yīng)速度必然下降。本系統(tǒng)在設(shè)計階段就考慮了這方面的問題,其中最主要的解決方法就是盡量減少客戶端和服務(wù)器間的通信,把一些能在客戶端完成的驗證都放在客戶端驗證,盡可能多的使用本地的腳本語言,這樣客戶端和服務(wù)器端的通信量就會大大減少,服務(wù)器的響應(yīng)效率會提高很多。密碼加密問題。如果數(shù)據(jù)庫信息泄漏,可能造成很大的損失。所以對用戶密碼進行加密顯得尤其重要,這里采用了MD5算法進行加密。存入數(shù)據(jù)庫的用戶密碼都是經(jīng)過加密后的密文,登錄時驗證輸入密碼加密后的密文與數(shù)據(jù)庫密文的一致性。信息更新問題。由于系統(tǒng)是以對象的形式傳遞數(shù)據(jù),所以一些不提供修改的屬性將會被賦null值,導致傳入后臺提交操作后信息丟失。在Dao層更新信息的方法里查找相應(yīng)信息并將其組成一個舊對象,把新對象的不為null的屬性值賦給舊對象,再用舊對象取更新數(shù)據(jù)庫,既可解決這個問題。提到判定問題。由于一開始的正則表達式選用不恰當,所以當用戶發(fā)信息提到他人時,系統(tǒng)檢測信息不準確,取不到被提到的用戶,在顯示信息時,同樣加不上A標簽。在修正了正則表達式后,問題得以解決。
結(jié)束語在經(jīng)歷了三個月左右的時間后,本系統(tǒng)的開發(fā)工作基本算是結(jié)束了,在本系統(tǒng)里,其實還是有很多的缺陷與不足沒有來得及修正。不過我在之后還是會針對這些不足作修改的。畢業(yè)設(shè)計就是對學生近四年來的學習成果在專業(yè)方面做了一次比較針對性的全面的測試。我學的專業(yè)以及方向是軟件工程的WEB方向,我比較擅長使用Java進行WEB項目的開發(fā)。我見有好多人在做各種各樣的購物系統(tǒng),再加上我也做過購物系統(tǒng)了,再做的話沒有什么新意,所以我選了一個BBS論壇系統(tǒng)。我平時接觸百度貼吧比較多,對其功能等較為熟悉,而且百度貼吧其實也是一種新形態(tài)的論壇系統(tǒng),其開放關(guān)鍵詞的思想非常利于論壇的擴展,所以我本次畢業(yè)設(shè)計的目標就是模仿百度貼吧,做一個實現(xiàn)了其基本功能的貼吧系統(tǒng)。出于對百度貼吧設(shè)計者的敬意以及可能會造成的法律問題,所以我把系統(tǒng)起名為“十度貼吧”。現(xiàn)在比較先進和流行的開發(fā)框架中有一款非常優(yōu)秀,那就是SpringMVC,我在實習公司里見到的很多項目也使用了這個框架,所以我借此機會學習一下它。經(jīng)過簡單的學習,我開始了這個項目的設(shè)計與開發(fā)。由于我現(xiàn)在能力有限,認識不足,對該框架的使用僅僅限于頁面的跳轉(zhuǎn)與傳值。不過,在經(jīng)過各種嘗試與失敗之后,我收獲挺多的,在我心里真切的體會到了這個框架的人性化設(shè)計,以及它功能的強大,以后我會更多的使用它,深入的了解它,我已經(jīng)愛上了它。在數(shù)據(jù)持久化方面,我使用的是Oracle數(shù)據(jù)庫的XE快捷版,因為到目前為止,雖然接觸使用過好幾種數(shù)據(jù)庫軟件,但是我最熟悉的還是Oracle。在程序里,我使用的是Hibernate框架來做數(shù)據(jù)的持久化,本來我想試一試Mybatis的,但是考慮到這個框架一點都沒接觸過,而且簡單學過的Hibernate框架還在一邊半生不熟,掌握的不怎么樣,所以我就決定使用Hibernate了。經(jīng)過這次畢設(shè),我對Hibernate又有了進一步的認識,了解了一些其他的使用方法,還想明白了很多使用習慣的原因,收獲也是挺大的,我相信這一定能為我之后學習Mybatis提供借鑒。在真正進行功能模塊設(shè)計開發(fā)的時候,也是由于考慮不是很周全,做過幾次大翻工,各方面的翻工表明了一個事實,那就是我做分析與設(shè)計的時候還是不夠重視,不夠認真,雖然我明明知道分析與設(shè)計非常重要,但是結(jié)果卻還是這樣。我總結(jié)了一下,不夠認真,經(jīng)驗不足,表面原因應(yīng)該就是這樣了。再進一步,其實我的心態(tài)有問題,當時確定下這個題目的時候,我就根據(jù)我的能力大概想了下,認為這個項目應(yīng)該沒多大問題,大的架構(gòu)上沒什么問題,但是我在小細節(jié)上自大了,思考的比較隨便,考慮不周全,以后一定會注意。前臺的頁面設(shè)計問題不是很大,主要就是模仿百度貼吧的風格。但是,在開發(fā)的時候,實在是叫我頭疼,各種問題頻出,各種意外不斷。我本人對前臺技能掌握不好,不擅長開發(fā)前臺。像div標簽,JQuery等的使用都是只知皮毛,所以很多本來用這些能很容易解決的問題,到我這里可能繞很多彎路才能處理掉,最郁悶的是,不少問題得花很多時間,幾個小時算是短的...以前做的項目前臺頁面都是已經(jīng)做好的,我需要做的就是把后臺得到的數(shù)據(jù)插入進去。這回叫我自己來做前臺真是不容易,我打算在畢設(shè)結(jié)
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基礎(chǔ)路面土方合同范例
- 天津濱海職業(yè)學院《電磁場的數(shù)值方法》2023-2024學年第一學期期末試卷
- 專用裝備采購合同范例
- 施工投標合同范例
- 會計合伙合同范例
- 倉房搭建合同范例
- 叉車購銷轉(zhuǎn)讓合同范例
- 商鋪租賃續(xù)租合同范例
- 口腔內(nèi)科學模擬練習題(附答案)
- 2025年鐵嶺貨運資格證考試有哪些項目
- 全套教學課件《工程倫理學》
- 大數(shù)據(jù)+治理智慧樹知到期末考試答案章節(jié)答案2024年廣州大學
- 江蘇省建筑與裝飾工程計價定額(2014)電子表格版
- T-SDDA 0002-2021 住宅裝飾裝修工程質(zhì)量驗收標準
- 小學寫字閱讀考核實施方案
- 震雄注塑機Ai_01操作說明書(中文)
- 四川省煤礦探放水基準線“兩把鎖”管理規(guī)定
- 壓力管道元件產(chǎn)品合格證
- 10KV變電站供電系統(tǒng)設(shè)計
- 15立方米的液氯儲罐課程設(shè)計說明書
- 發(fā)現(xiàn)所授薪律師及律師助理管理辦法
評論
0/150
提交評論