個人博客畢業(yè)論文_第1頁
已閱讀1頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  學(xué)生個人博客</b></p><p>  摘要:隨著科學(xué)的發(fā)展,技術(shù)的進(jìn)步,計算機(jī)在人們生活學(xué)習(xí)中扮演著越來越重要的角色。人們開始利用計算機(jī)交流溝通也變得越來越頻繁,而博客作為交流的工具,已經(jīng)成為了人們深度交流溝通的網(wǎng)絡(luò)新方式。</p><p>  學(xué)生個人博客主要是為了方便學(xué)生在線交流,溝通,可以交流學(xué)習(xí)心得,展示個人才能,聊天交友,還

2、可以作為網(wǎng)絡(luò)個人日記,發(fā)表自己的心情。</p><p>  本博客主要由三個功能模塊組成:注冊登錄,發(fā)表文章照片,評論及瀏覽組成。采用JavaEE三大核心框架(Struts2,Hibernate,Spring)的設(shè)計模式,利用Hibernate與MySql數(shù)據(jù)庫無縫對接,后臺數(shù)據(jù)庫是MySql5.5,該數(shù)據(jù)庫具有是開源的數(shù)據(jù)庫系統(tǒng),該數(shù)據(jù)庫具有較高的完整性,一致性,安全性,博客網(wǎng)站本身運行在Tomcat6.0服務(wù)

3、器上。</p><p>  關(guān)鍵詞:博客,核心框架,學(xué)子博客,MySql數(shù)據(jù)庫</p><p><b>  目錄</b></p><p><b>  摘要1</b></p><p>  Abstract1</p><p>  第一章 緒 論4</p>

4、<p><b>  1.1選題背景4</b></p><p>  1.2課題研究意義4</p><p>  1.3論文的組織結(jié)構(gòu)和具體安排4</p><p>  第二章 個人博客需求分析5</p><p>  2.1 可行性分析5</p><p>  2.1.1 技術(shù)可行性

5、5</p><p>  2.1.2.經(jīng)濟(jì)可行性5</p><p>  2.2 個人博客需求概述5</p><p>  2.2.1網(wǎng)站目標(biāo)5</p><p>  2.3 個人博客網(wǎng)站需求模型5</p><p>  2.3.1功能描述5</p><p>  2.3.2詳細(xì)功能描述6&l

6、t;/p><p>  2.3.3主要功能模塊處理流程的描述6</p><p>  第三章 整體設(shè)計10</p><p>  3.1 數(shù)據(jù)庫設(shè)計10</p><p>  3.1.1數(shù)據(jù)庫設(shè)計概述10</p><p>  3.1.2 用戶信息表結(jié)構(gòu)設(shè)計11</p><p>  3.1.3個性

7、化設(shè)置表表結(jié)構(gòu)設(shè)計11</p><p>  3.1.4文章列表表結(jié)構(gòu)設(shè)計11</p><p>  3.1.5評論列表表結(jié)構(gòu)設(shè)計12</p><p>  3.1.6點擊量列表表結(jié)構(gòu)設(shè)計12</p><p>  3.1.7留言板列表表結(jié)構(gòu)設(shè)計12</p><p>  第四章 程序設(shè)計與編碼13</p>

8、;<p>  4.1開發(fā)平臺與工具13</p><p>  4.1.1 MyEclipse8.6平臺13</p><p>  4.1.2 服務(wù)器和數(shù)據(jù)庫13</p><p>  4.2程序設(shè)計13</p><p>  4.2.1程序設(shè)計概述13</p><p>  4.2.2 三大框架之間的連接

9、和配置14</p><p>  4.2.3注冊登錄模塊的程序設(shè)計20</p><p>  4.2.4個性化設(shè)置模塊功能的實現(xiàn)24</p><p>  4.2.5 發(fā)表查看文章模塊功能的實現(xiàn)24</p><p>  4.2.6 評論模塊功能的實現(xiàn)27</p><p>  4.2.7 相冊模塊功能的實現(xiàn)29&l

10、t;/p><p>  4.2.8 組件化分頁模塊31</p><p>  4.2.9 個人信息模塊33</p><p>  4.2.10 留言板模塊功能的實現(xiàn)35</p><p>  第五章 測試博客39</p><p>  5.1 軟件測試分析39</p><p>  5.1.1 測試

11、的目的和重要性39</p><p>  5.1.2 測試的方法與步驟39</p><p>  5.2設(shè)計測試用例39</p><p>  5.2.1單元測試39</p><p>  5.2.2集成測試41</p><p>  5.2.3 驗收測試41</p><p>  第六章 結(jié)束

12、語42</p><p>  6.1 完成效果42</p><p>  6.2 改進(jìn)意見42</p><p>  6.3 收獲體會42</p><p><b>  參考文獻(xiàn):43</b></p><p><b>  致 謝44</b></p>&l

13、t;p><b>  第一章 緒 論</b></p><p><b>  1.1選題背景</b></p><p>  在科技飛速發(fā)展的今天,互聯(lián)網(wǎng)正成為人們快速獲取、發(fā)布和傳遞信息的最為便捷的渠道,它在人們?nèi)粘5纳詈蛯W(xué)習(xí)中發(fā)揮著重要的作用。而近年來博客和博客文化正在成為互聯(lián)網(wǎng)的熱點,并被視為是e-mail,bbs,icq之后的第四種網(wǎng)絡(luò)

14、交流方式,由于博客的溝通方式比電子郵件、討論群組等更為簡單容易,現(xiàn)在已經(jīng)成為了家庭、公司、部門、團(tuán)隊之間越來越盛行的溝通工具了。博客正在改變著當(dāng)今社會的交流方式,越來越多的人選擇加入到博客的陣營。</p><p>  我之所以選擇做個人博客,首先是因為可以從中學(xué)到很多的網(wǎng)絡(luò)和編程方面的知識,其次通過這個畢業(yè)設(shè)計可以很好的鍛煉自己的動手能力,并提高自己的個人能力。最后個人博客是當(dāng)前互聯(lián)網(wǎng)上的熱點,它既可以作為一個聊

15、天工具又能作為一個交流的平臺,對大多數(shù)人而言都是非常實用的。</p><p><b>  1.2課題研究意義</b></p><p>  隨著知識經(jīng)濟(jì)的到來,人們已經(jīng)開始向信息化社會邁進(jìn)。信息增長的速度越來越快,人們希望能夠用一種便捷有效的工具來處理這些信息,并從中獲取對自己有用的信息,以提高自己的工作效率。在這個信息化的時代,網(wǎng)絡(luò)技術(shù)的運用和發(fā)展不僅能夠造福于人們,

16、還能夠促進(jìn)社會的進(jìn)步,經(jīng)濟(jì)的發(fā)展。因此,作為一種交流和溝通的工具,對博客的研究是非常有必要有意義的。</p><p>  1.3論文的組織結(jié)構(gòu)和具體安排</p><p>  本次設(shè)計的目標(biāo)是,開發(fā)一個個人博客網(wǎng)站。借助該網(wǎng)站,不同年級不同學(xué)院的學(xué)生可以通過查看文章學(xué)習(xí)到自己需要的知識,并能夠自己發(fā)表文章,發(fā)表個人的心得體會等。還可以上傳自己的照片,聊天交友等等。</p>&l

17、t;p><b>  論文分為五個部分:</b></p><p>  第一章即本章緒論,簡述開發(fā)個人博客的背景,以及研究博客的意義。</p><p>  第二章為需求分析,本章中明確了博客需要實現(xiàn)的功能,分析了博客的開發(fā)流程,并介紹根據(jù)需求選擇相應(yīng)的開發(fā)工具和技術(shù)。</p><p>  第三章是總體設(shè)計,詳細(xì)描述了博客需要的數(shù)據(jù)庫的設(shè)計情況

18、,并給出了總體界面的設(shè)計方案。 </p><p>  第四章為博客的程序設(shè)計和具體的編碼,包括各個模塊的實現(xiàn)方法及其關(guān)鍵的代碼,并截取了一些圖片作為參考,以便能夠更加直觀的了解博客的實現(xiàn)情況。</p><p>  第五章是對博客進(jìn)行整體的測試,測試功能實現(xiàn)并對測試結(jié)果進(jìn)行記錄分析。</p><p>  第六章是結(jié)束語,總結(jié)本次設(shè)計中的難點和亮點以及自己在這次畢業(yè)設(shè)計

19、中學(xué)到的知識。 </p><p>  第二章 個人博客需求分析</p><p>  2.1 可行性分析</p><p>  個人博客作為一種新的交流溝通的工具和平臺,能夠有效地促進(jìn)交流,解決學(xué)生的實際問題,方便學(xué)生的學(xué)習(xí)生活,開發(fā)本網(wǎng)站的可行性研究如下:</p><p>  2.1.1 技術(shù)可行性</p><p>

20、  技術(shù)上的可行性分析主要分析技術(shù)條件能否順利完成開發(fā)工作,能否滿足實際的需求。本網(wǎng)站使用java語言開發(fā),利用開源的Tomcat作為運行服務(wù)器,用戶界面簡潔,易操作。網(wǎng)站的數(shù)據(jù)庫采用開源的MySql存儲數(shù)據(jù),Mysql能夠處理較大的數(shù)據(jù),同時保持?jǐn)?shù)據(jù)的完整性和安全性。因此開發(fā)本網(wǎng)站的平臺是成熟可行的。</p><p>  2.1.2.經(jīng)濟(jì)可行性</p><p>  隨著經(jīng)濟(jì)的發(fā)展,計算機(jī)

21、的普及程度已經(jīng)非常的高了,而開發(fā)本網(wǎng)站的配置和技術(shù)均可行,因此開發(fā)這樣的一個網(wǎng)站成本是可以控制的,并且網(wǎng)站的運行可以加強(qiáng)學(xué)生之間的交流和溝通,方便學(xué)生的學(xué)習(xí)生活,還可以有一定的經(jīng)濟(jì)回報,因此該網(wǎng)站在經(jīng)濟(jì)上是可行的。</p><p>  2.2 個人博客需求概述</p><p><b>  2.2.1網(wǎng)站目標(biāo)</b></p><p>  本網(wǎng)站的

22、核心架構(gòu)是JavaEE中的三大框架,在網(wǎng)站中主要有兩種類型的用戶。即注冊用戶和非注冊用戶。注冊并登陸的用戶可以在網(wǎng)站中查看自己活著他人發(fā)表的文章,可以上傳自己的照片,還可以對自己感興趣的文章加以標(biāo)注和評論。而對于非注冊的用戶,只能以瀏覽者的身份進(jìn)入,可以查看網(wǎng)站中其他人發(fā)表的文章,也可以匿名的發(fā)表評論,但是不能寫文章,也不能上傳自己的圖片等。</p><p>  2.3 個人博客網(wǎng)站需求模型</p>

23、<p><b>  2.3.1功能描述</b></p><p>  個人博客網(wǎng)站的主要目標(biāo)是作為一個交流的工具和一個溝通的平臺,讓不同年級不同專業(yè)的學(xué)生可以在這里交流學(xué)習(xí)的經(jīng)驗,可以發(fā)表自己的想法,還可以上傳自己的圖片來聊天交友,本網(wǎng)站的基本功能如下:</p><p><b>  1.注冊登錄</b></p><p

24、>  凡是要發(fā)表文章顯示個人信息的用戶均必須先注冊賬號,再通過登錄驗證才能夠進(jìn)行各種功能的操作,不注冊登錄的用戶在網(wǎng)站中權(quán)限較低。</p><p><b>  2.網(wǎng)站設(shè)置</b></p><p>  網(wǎng)站制作者可以修改網(wǎng)頁的基本頁面,更改系統(tǒng)時間。</p><p><b>  3.用戶功能 </b></p&g

25、t;<p>  用戶可以查看,刪除,評論相應(yīng)的文章,可以通過問題回自己的賬戶密碼。</p><p><b>  4.其他的功能</b></p><p>  網(wǎng)站制作者可以管理網(wǎng)站,并擁有起亞用戶所擁有的所有的權(quán)限和功能。</p><p>  2.3.2詳細(xì)功能描述</p><p>  學(xué)生通過瀏覽器訪問到本

26、網(wǎng)站,可以使用一下功能:</p><p><b>  1)注冊用戶</b></p><p>  按照規(guī)定注冊一個正確的賬號。</p><p><b>  2)用戶登錄</b></p><p>  輸入注冊過的用戶名和密碼登錄。</p><p><b>  3)修改登

27、錄密碼</b></p><p>  可以修改自己的登錄密碼</p><p><b>  4)查看文章</b></p><p>  可以查看其它人發(fā)表的文章,也可以查看自己已經(jīng)發(fā)表過的文章。</p><p><b>  5)修改個性化設(shè)置</b></p><p>&

28、lt;b>  可以更改個人的設(shè)置</b></p><p><b>  6)評論文章</b></p><p>  可以對好的文章進(jìn)行評論,還可以查看別人的評論。</p><p><b>  7)上傳相冊</b></p><p>  對登錄用戶,可以上傳自己的照片。</p>

29、<p><b>  8)鏈接</b></p><p>  本網(wǎng)站提供了對一些知名博客的鏈接,可以點擊鏈接進(jìn)入其他博客網(wǎng)站。</p><p><b>  8)留言</b></p><p>  本網(wǎng)站提供了留言板,所有登陸用戶都可以進(jìn)行留言或者查看別人的留言。</p><p>  2.3.

30、3主要功能模塊處理流程的描述</p><p>  個人博客網(wǎng)站主要可以分為幾個個大的模塊,第一個模塊是用戶注冊登錄模塊,即進(jìn)入網(wǎng)站模塊。第二個模塊是用戶的個性化設(shè)置,第三個模塊是發(fā)表文章,查看文章內(nèi)容,第四個模塊是相冊模塊開發(fā)與RSS訂閱。</p><p><b>  用戶注冊登錄模塊:</b></p><p><b> ?。?)功能

31、描述</b></p><p>  完成注冊登錄,填寫基本信息</p><p>  查看并修改個人信息。</p><p><b> ?。?)具體流程圖</b></p><p><b>  個性化設(shè)置模塊</b></p><p><b> ?。?)功能描述&

32、lt;/b></p><p>  可以設(shè)置個性化頁面,用于顯示在網(wǎng)站上方。</p><p>  可以修改個性化語句。</p><p><b> ?。?)具體流程圖</b></p><p><b>  發(fā)表,管理文章模塊</b></p><p><b> ?。?

33、)功能描述</b></p><p>  登陸成功后發(fā)表自己的文章。</p><p>  查看管理自己的文章,還可以查看他人的文章。</p><p>  (2)具體的流程圖:</p><p>  相冊模塊開發(fā)與RSS訂閱:</p><p><b> ?。?)功能描述</b></p&

34、gt;<p>  可以點擊上傳圖片到服務(wù)器。</p><p>  通過RSS訂閱能夠快速查找到文章和顯示新添加的文章</p><p><b> ?。?)流程圖</b></p><p><b>  第三章 整體設(shè)計</b></p><p><b>  3.1 數(shù)據(jù)庫設(shè)計<

35、;/b></p><p>  3.1.1數(shù)據(jù)庫設(shè)計概述</p><p>  數(shù)據(jù)庫是整個系統(tǒng)最核心的部分,數(shù)據(jù)庫設(shè)計的好壞直接影響到整個系統(tǒng)的設(shè)計成敗,因此本節(jié)專門來討論有關(guān)數(shù)據(jù)庫的設(shè)計。</p><p>  數(shù)據(jù)庫作為管理數(shù)據(jù)的最新技術(shù)。近年來隨著計算機(jī)的大力發(fā)展數(shù)據(jù)庫管理系統(tǒng)已從專用的應(yīng)用程序發(fā)展成為通用的系統(tǒng)軟件。由于現(xiàn)在的數(shù)據(jù)庫都具有數(shù)據(jù)結(jié)構(gòu)化,最低冗

36、余度,較高的程序與數(shù)據(jù)獨立性,易于擴(kuò)充,易于編制應(yīng)用程序等優(yōu)點,較大的信息系統(tǒng)都是建立在數(shù)據(jù)庫設(shè)計之上的。</p><p>  數(shù)據(jù)庫的出現(xiàn)改變了人們存儲數(shù)據(jù)的方式,極大地提高了存儲數(shù)據(jù)的能力,方便了人們對數(shù)據(jù)的管理和利用,并提高了人們的決策的可靠性。目前,數(shù)據(jù)庫已經(jīng)成為現(xiàn)代信息系統(tǒng)不可分割的重要組成部分。數(shù)據(jù)庫技術(shù)也已經(jīng)成為計算機(jī)領(lǐng)域中發(fā)展最快的技術(shù)之一。</p><p>  數(shù)據(jù)庫設(shè)計

37、是將現(xiàn)實世界的實體模型與需求轉(zhuǎn)換成數(shù)據(jù)庫的模型的過程,它是建立數(shù)據(jù)庫應(yīng)用系統(tǒng)的核心問題。數(shù)據(jù)庫及其應(yīng)用的性能都建立在良好的數(shù)據(jù)庫設(shè)計的基礎(chǔ)之上,數(shù)據(jù)庫的數(shù)據(jù)是一切操作的基礎(chǔ),如果數(shù)據(jù)庫設(shè)計不好,那么其它一切用于提高數(shù)據(jù)庫性能的方法收效都是有限的。數(shù)據(jù)庫設(shè)計的關(guān)鍵是如何使設(shè)計的數(shù)據(jù)庫能合理地存儲用戶的數(shù)據(jù),方便用戶進(jìn)行數(shù)據(jù)處理。</p><p>  數(shù)據(jù)庫的設(shè)計都必須遵循一定的規(guī)則,每一個數(shù)據(jù)庫都有自己不同的規(guī)則,

38、在關(guān)系型數(shù)據(jù)庫中,這種規(guī)則就是范式,范式是符合某一種級別的關(guān)系模式的集合。一般人們設(shè)計數(shù)據(jù)庫都遵循第三范式。即:數(shù)據(jù)庫表中不包含已在其他表中包含的非主關(guān)鍵字信息。采用范式減少了數(shù)據(jù)冗余,節(jié)約了存儲空間,同時加快了操作數(shù)據(jù)庫的速度。</p><p>  整個博客網(wǎng)站所包括的信息表有 </p><p>  1:用戶信息表:(B_User)</p><p>  2:個性化

39、設(shè)置表:(B_blog)</p><p>  3:文章列表:(B_Article)</p><p>  4:評論列表:(B_Criticle)</p><p>  5:點擊量列表:(B_Clickrate)</p><p>  5:留言板列表:(guestbook)等相應(yīng)信息表??蓪⑦@些信息抽象為所需要的數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu)</p>

40、<p>  1) 用戶信息表(用戶ID,用戶姓名,昵稱,郵箱,密碼,驗證碼,是否驗證,密保問題,密保答案)</p><p>  2) 個性化設(shè)置表(個性化ID,用戶ID,個性化題目,個性化內(nèi)容)</p><p>  3) 文章列表(文章ID,文章標(biāo)題,文章內(nèi)容,用戶姓名,發(fā)表日期,是否已讀)</p><p>  4) 評論列表(評論ID,文章ID,評論內(nèi)

41、容,用戶姓名)</p><p>  5) 點擊量列表(點擊量ID,文章ID,點擊IP地址,點擊時間)</p><p>  6) 留言板列表(留言ID,作者,標(biāo)題,內(nèi)容,留言時間)</p><p>  注:帶方框的表示表的主鍵</p><p>  3.1.2 用戶信息表結(jié)構(gòu)設(shè)計</p><p>  用戶信息表主要保存博客

42、網(wǎng)站已經(jīng)注冊過的用戶基本信息,主要包括用戶的登錄賬戶和密碼以及一些基本的驗證。表的具體結(jié)構(gòu)如下所示:</p><p>  用戶信息表 B_User</p><p>  3.1.3個性化設(shè)置表表結(jié)構(gòu)設(shè)計</p><p>  該表的設(shè)計主要是用于存儲登錄用戶的個性化設(shè)置,主要設(shè)置其頁面,包括個性化標(biāo)題和個性化內(nèi)容,當(dāng)用戶進(jìn)入時其個性化語句會顯示在上方頁面的中央,表的具體

43、結(jié)構(gòu)設(shè)計如下所示:</p><p>  個性化設(shè)置表B_Blog</p><p>  3.1.4文章列表表結(jié)構(gòu)設(shè)計</p><p>  文章列表主要用來存儲用戶發(fā)表的文章,包括文章的標(biāo)題,內(nèi)容,該用戶是否已閱讀,查看的日期以及用戶名。用過該表可以讀取當(dāng)前博客網(wǎng)站的所有文章信息,還可以根據(jù)登錄用戶名查看用戶個人發(fā)表的文章信息,表的具體結(jié)構(gòu)設(shè)計如下所示:</p&g

44、t;<p>  文章列表B_Article</p><p>  3.1.5評論列表表結(jié)構(gòu)設(shè)計</p><p>  此表的設(shè)計主要用于存儲用戶對文章的評論信息,主要有兩種用戶:未登錄的用戶和登錄用戶,登錄用戶在評論后會顯示其用戶名,未登錄用戶只能以匿名的方式發(fā)表評論,表的具體結(jié)構(gòu)設(shè)計如下所示:</p><p>  評論列表B_Criticle</p

45、><p>  3.1.6點擊量列表表結(jié)構(gòu)設(shè)計</p><p>  該表的設(shè)計主要用于記錄文章的點擊數(shù)量,這里要根據(jù)用戶的IP地址來判斷不同的用戶,因此該表存儲文章的ID號,用戶的IP地址以及點擊的時間。表的具體結(jié)構(gòu)設(shè)計如下所示:</p><p>  點擊量列表 B_Clicrate</p><p>  3.1.7留言板列表表結(jié)構(gòu)設(shè)計</p

46、><p>  該表的設(shè)計主要用于記錄文章的點擊數(shù)量,這里要根據(jù)用戶的IP地址來判斷不同的用戶,因此該表存儲文章的ID號,用戶的IP地址以及點擊的時間。表的具體結(jié)構(gòu)設(shè)計如下所示:</p><p>  留言列表 guestbook</p><p>  第四章 程序設(shè)計與編碼</p><p>  4.1開發(fā)平臺與工具</p><p

47、>  4.1.1 MyEclipse8.6平臺</p><p>  本博客采用MyEclipse工作平臺,MyEclipse企業(yè)級工作平臺(MyEclipse Enterprise Workbench ,簡稱MyEclipse)是對Eclipse IDE的擴(kuò)展,利用它我們可以在數(shù)據(jù)庫和J2EE的開發(fā)、發(fā)布,以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的J2EE集成開發(fā)環(huán)境,包括了完備的編碼、

48、調(diào)試、測試和發(fā)布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。在結(jié)構(gòu)上MyEclipse的特征可以分為七類:1、J2EE模型;2、WEB開發(fā)工具;3、EJB開發(fā)工具;3、應(yīng)用程序服務(wù)器的連接;4、J2EE項目部署服務(wù);6、數(shù)據(jù)庫服務(wù);7、MyEclipse整合幫助。</p><p>  在個人博客的開發(fā)過程中,應(yīng)用的是MyEclipse8.6這

49、個版本,作為MyEclipse較新的版本,MyEclipse8.6中的關(guān)鍵特性有:支持最新版本的Apache Tomcat,支持Spring項目,Spring安全向?qū)?,Spring服務(wù)從WSDL,Spring代碼輔助管理,完整的Java探測,支持Ajax工具,支持Web服務(wù)工具。因此個人博客運行的服務(wù)器我選擇的是新版本的Apache Tomcat 6.0.35版本。</p><p>  4.1.2 服務(wù)器和數(shù)據(jù)庫

50、</p><p>  在系統(tǒng)的開發(fā)過程中使用的服務(wù)器是Tomcat,Tomcat來源于Apache軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,,由Apache、Sun 和其他一些公司及個人共同開發(fā)而成。由于有了前Sun公司的參與和支持,最新的Servlet 和JSP 規(guī)范總是能在Tomcat 中得到體現(xiàn)。并且因為Tomcat 技術(shù)先進(jìn)、性能穩(wěn)定,而且免

51、費,成為目前比較流行的Web 應(yīng)用服務(wù)器。因此本博客選擇了Tomcat作為其服務(wù)器。</p><p>  開發(fā)用的系統(tǒng)工具如下表所示:</p><p>  個人博客開發(fā)平臺和工具</p><p><b>  4.2程序設(shè)計</b></p><p>  4.2.1程序設(shè)計概述</p><p>  本

52、博客在設(shè)計的過程中運用了當(dāng)今非常流行的編程模式---三層架構(gòu)的思想,即將界面層,業(yè)務(wù)邏輯層,數(shù)據(jù)操作層相分離,使用JavaEE中非常著名的三大框架(Struts2,Spring,Hibernate)來分別實現(xiàn),其中界面層使用Struts2,業(yè)務(wù)邏輯層使用Spring,數(shù)據(jù)操作層使用Hibernate。</p><p>  Struts2是用于Web項目中UI層的開源的框架,是經(jīng)典的MVC模式實現(xiàn)的案例。作為一款開

53、源的框架,Struts2具有非常明顯的優(yōu)勢和特點:1.Struts2中將業(yè)務(wù)數(shù)據(jù),顯示頁面,動作處理等進(jìn)行分離,極大地方便了代碼的維護(hù)。2.Struts2采用的是Front Controller模式來實現(xiàn)對各種觸發(fā)動作的處理,要求所有的請求都經(jīng)過統(tǒng)一的入口,再進(jìn)行轉(zhuǎn)發(fā),方便了我們對代碼的統(tǒng)一控制和管理。3.Struts2中通過Action類實現(xiàn)各種邏輯,并且利用Struts2的核心標(biāo)簽來完成對數(shù)據(jù)的呈現(xiàn)。4.struts2在servle

54、t容器中運行,通過配置文件web.xml來完成到相應(yīng)的Action的跳轉(zhuǎn)。</p><p>  Spring主要運用于業(yè)務(wù)邏輯層,在功能上有潤滑劑的美稱。Spring主要通過控制反轉(zhuǎn),AOP應(yīng)用,面向接口編程來降低組件之間的耦合度,增加系統(tǒng)的擴(kuò)展性。Spring作為一個分層框架,由七個定義良好的模塊組成,其中最重要的模塊是核心容器。核心容器定義了創(chuàng)建、配置和管理bean的方式,并且提供了Spring框架的基本功能

55、。Beanfactory作為核心容器的組件,是工廠模式的實現(xiàn)。其利用控制反轉(zhuǎn)將應(yīng)用程序的配置和應(yīng)用分開,減少了代碼的耦合。</p><p>  Hibernate主要作用于數(shù)據(jù)層,主要用于封裝數(shù)據(jù)訪問層的組件。在應(yīng)用程序中的數(shù)據(jù)用對象來體現(xiàn),而數(shù)據(jù)庫中,數(shù)據(jù)用表的形式保存。Hibernate利用對象- 關(guān)系映射,將應(yīng)用程序中的對象(Object)與表中的數(shù)據(jù)(Relationship)之間的映射(Mapping)

56、。利用Hibernate可以直接從數(shù)據(jù)庫中取出java對象,并將java對象直接保存在數(shù)據(jù)庫中,中間的sql等語句都被封裝了。</p><p>  4.2.2 三大框架之間的連接和配置</p><p>  <!-- 配置監(jiān)聽器,用于spring初始化的監(jiān)聽器 --></p><p>  <listener></p><p&

57、gt;  <listener-class>org.springframework.web.context.ContextLoaderListener</p><p>  </listener-class></p><p>  </listener></p><p>  <context-param></p>

58、<p>  <param-name>contextConfigLocation</param-name></p><p>  <param-value>classpath:config/spring/applicationContext.xml</param-value></p><p>  </context-param

59、></p><p>  根據(jù)需求將Spring分配置文件分類:</p><p>  基本的配置信息(db.properties),主要用于連接數(shù)據(jù)庫:</p><p>  在Spring的配置文件applicationContext.xml中加載外部配置文件信息:</p><p>  <!-- 加載外部的properties文件,

60、用于解析${}形式的變量,如果需要加載多個properties文件,就寫在一起,用逗號分隔 --> </p><p>  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"></p><p>  <property name=&q

61、uot;locations"></p><p><b>  <list></b></p><p>  <value>classpath:config/props/db.properties</value></p><p><b>  </list></b>&l

62、t;/p><p>  </property></p><p><b>  </bean></b></p><p>  <!-- 定義數(shù)據(jù)源獲取數(shù)據(jù)庫信息 --></p><p>  <bean id="dataSource" class=</p>&

63、lt;p>  "org.springframework.jdbc.datasource.DriverManagerDataSource"></p><p>  <property name="driverClassName" value="${driverClassName}"/></p><p>  &l

64、t;property name="url" value="${url}"/></p><p>  <property name="username" value="${username}"/></p><p>  <property name="password" v

65、alue="${password}"/></p><p><b>  </bean></b></p><p>  <!-- 通過spring管理hibernate(SesionFactory) --> </p><p>  <!-- 定義SessionFactory --></

66、p><p>  <bean id="sessionFactory" class="org.springframework.orm.</p><p>  hibernate3.LocalSessionFactoryBean"></p><p>  <property name="dataSource&qu

67、ot; ref="dataSource" /></p><p>  <property name="hibernateProperties"></p><p><b>  <props></b></p><p>  <prop key="hibernate.d

68、ialect">${dialect}</prop></p><p>  <prop key="hibernate.format_sql">${format_sql}</prop></p><p>  <prop key="hibernate.show_sql">${show_sql}&l

69、t;/prop></p><p><b>  </props></b></p><p>  </property></p><p>  <!-- 管理orm映射文件 --></p><p>  <property name="mappingResources&qu

70、ot;></p><p><b>  <list></b></p><p>  <value>config/hibernate/hbm/User.hbm.xml</value></p><p>  <value>config/hibernate/hbm/Blog.hbm.xml</va

71、lue></p><p>  <value>config/hibernate/hbm/Article.hbm.xml</value></p><p>  <value>config/hibernate/hbm/ClickRate.hbm.xml</value></p><p>  <value>con

72、fig/hibernate/hbm/Critique.hbm.xml</value></p><p><b>  </list></b></p><p>  </property></p><p><b>  </bean></b></p><p> 

73、 <!-- 定義HibernateTemplate ,讓spring管理hibernate--></p><p>  <bean id = "hibernateTemplate" class="org.springframework.</p><p>  orm.hibernate3.HibernateTemplate">&l

74、t;/p><p>  <property name="sessionFactory" ref="sessionFactory" /></p><p><b>  </bean></b></p><p>  在Hibernate的配置文件里加載數(shù)據(jù)庫表信息</p><

75、p>  Hbm配置文件主要放置表的信息:(如Article.hbm.xml文件)</p><p>  <hibernate-mapping></p><p>  <class name="com.jiadong.entity.Article" table="b_article" ></p><p>

76、;  <id name="articleId" type="java.lang.Integer" column="article_id"></p><p>  <generator class="native" /></p><p><b>  </id></

77、b></p><p>  <property name="title" type="java.lang.String" not-null="true" /></p><p>  <property name="content" type="java.lang.String&q

78、uot; not-null="true" /></p><p>  <property name="username" type="java.lang.String" not-null="true" /></p><p>  <property name="hasread&

79、quot; type="java.lang.Integer" not-null="true" /></p><p>  <property name="date" /></p><p><b>  </class></b></p><p>  <

80、/hibernate-mapping></p><p>  Struts2的配置文件放在自定義的文件夾下:</p><p>  在web.xml中添加struts2監(jiān)視器:</p><p>  <!-- struts2監(jiān)視器 --></p><p><b>  <filter></b><

81、;/p><p>  <filter-name>struts2</filter-name></p><p>  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></p><p>

82、  <init-param></p><p>  <param-name>config</param-name></p><p>  <param-value>struts-default.xml,struts-plugin.xml,config/struts/struts.xml</param-value></p>

83、<p>  </init-param></p><p><b>  </filter></b></p><p>  <filter-mapping></p><p>  <filter-name>struts2</filter-name></p><p&

84、gt;  <url-pattern>*.action</url-pattern></p><p>  </filter-mapping></p><p>  <filter-mapping></p><p>  <filter-name>struts2</filter-name></p&g

85、t;<p>  <url-pattern>*.jsp</url-pattern></p><p>  </filter-mapping></p><p>  聲明Spring對Struts2管理:</p><p>  <!--引入其他配置文件--></p><p>  <im

86、port resource="applicationContext-web.xml"/></p><p>  <import resource="applicationContext-biz.xml"/></p><p>  <import resource="applicationContext-dao.xml&q

87、uot;/></p><p>  其中applicationContext-web.xml主要用于聲明Struts2中的Action:(部分代碼)</p><p>  <!-- 進(jìn)入注冊Action --></p><p>  <bean id = "toRegistAction" class=</p>&l

88、t;p>  "com.jiadong.struts2.web.action.user.ToRegistAction"></p><p><b>  </bean></b></p><p>  <!-- 驗證注冊Action --></p><p>  <bean id =&q

89、uot;doRegistAction" class=</p><p>  "com.jiadong.struts2.web.action.user.DoRegistAction"></p><p>  <property name="userService" ref="userService" />&l

90、t;/p><p><b>  </bean></b></p><p>  <!-- 進(jìn)入查詢所有用戶文章Action --></p><p>  <bean id ="toFindUserAllArticle" class=</p><p>  "com.jiado

91、ng.struts2.web.action.article.ToFindUserAllArticle"></p><p>  <property name="articleService" ref="articleService" /></p><p>  <property name="critiqueS

92、ervice" ref="critiqueService" /></p><p><b>  </bean></b></p><p>  <!-- 進(jìn)入查詢?nèi)课恼翧ction --></p><p>  <bean id ="toFindAllArticleActio

93、n" class=</p><p>  "com.jiadong.struts2.web.action.article.ToFindAllArticleAction"></p><p>  <property name="articleService" ref="articleService" />&l

94、t;/p><p>  <property name="critiqueService" ref="critiqueService" /></p><p><b>  </bean></b></p><p>  <!--查詢文章內(nèi)容Action --></p>

95、<p>  <bean id ="showArticle" class=</p><p>  "com.jiadong.struts2.web.action.article.ShowArticle"></p><p>  <property name="articleService" ref=&q

96、uot;articleService" /></p><p>  <property name="clickRateService" ref="clickRateService" /></p><p>  <property name="critiqueService" ref="cri

97、tiqueService" /></p><p>  <property name="blogInfoService" ref="blogInfoService"/></p><p><b>  </bean></b></p><p>  其中application

98、Context-biz.xml主要加載業(yè)務(wù)邏輯層的Action:(部分代碼)</p><p>  <!-- 配置 BlogInfoService業(yè)務(wù)邏輯組件--></p><p>  <bean id = "blogInfoService" class=</p><p>  "com.jiadong.service.i

99、mpl.BlogInfoServiceImpl"></p><p>  <property name="blogDao" ref="blogDao"></p><p>  </property></p><p><b>  </bean></b><

100、/p><p>  <!-- 配置ArticleService業(yè)務(wù)邏輯組件 --></p><p>  <bean id = "articleService" class =</p><p>  "com.jiadong.service.impl.ArticleServiceImpl"></p>

101、<p>  <property name="articleDao" ref="articleDao" /></p><p><b>  </bean></b></p><p>  applicationContext-dao.xml主要加載dao層的Action:</p><

102、;p>  <!-- 為DAO注入hibernateTemplate --></p><p>  <!-- 1.配置userDao --></p><p>  <bean id = "userDao" class="com.jiadong.dao.impl.UserDaoImpl"></p>&l

103、t;p>  <property name="hibernateTemplate" ref="hibernateTemplate" /></p><p><b>  </bean></b></p><p>  <!—配置blogInfoDao --></p><p>

104、;  <bean id = "blogDao" class="com.jiadong.dao.impl.BlogInfoDaoImpl"></p><p>  <property name="hibernateTemplate" ref="hibernateTemplate" /></p><

105、;p><b>  </bean></b></p><p>  <!—配置articleDao --></p><p>  <bean id ="articleDao" class="com.jiadong.dao.impl.ArticleDaoImpl"></p><

106、p>  <property name="hibernateTemplate" ref="hibernateTemplate" /></p><p><b>  </bean></b></p><p>  4.2.3注冊登錄模塊的程序設(shè)計</p><p>  本模塊主要用于用戶

107、第一次進(jìn)入時注冊和登錄,用戶注冊時根據(jù)提示正確的填寫基本信息,成功后即完成。登錄時必須輸入正確的用戶名和密碼,否者會提示錯誤,并禁止用戶發(fā)表文章。</p><p><b>  注冊界面</b></p><p><b>  登錄界面</b></p><p>  沒有賬號的用戶首先選擇注冊賬戶,在成功注冊后既可以開始登錄了。在

108、正確輸入了用戶名,密碼和驗證碼后用戶登錄成功。這里注冊界面我用了兩種校驗,第一種是在客戶端jsp頁面進(jìn)行校驗,第二層校驗是在服務(wù)器端校驗,利用struts2提供的方法進(jìn)行。</p><p><b>  注冊模塊代碼:</b></p><p>  public class DoRegistAction extends BaseAction{</p>&l

109、t;p>  private User user;</p><p>  private String validateCode;</p><p>  private String getErrorInfo;</p><p>  private IUserService userService; //這里要利用spring的配置獲取器對象</p>&

110、lt;p>  public void validate() {</p><p><b>  //用戶名檢驗</b></p><p>  if(null == user.getUsername() ||"".equals(user.getUsername().trim()))</p><p><b>  {&l

111、t;/b></p><p>  this.addFieldError("user.username", "用戶名不能為空");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(user

112、.getUsername().length()<5 ||user.getUsername().length()>20)</p><p><b>  {</b></p><p>  this.addFieldError("user.username", "用戶名長度應(yīng)為5~20位");</p><p

113、><b>  return;</b></p><p><b>  }</b></p><p><b>  //密碼檢驗</b></p><p>  if(null == user.getPassword() ||"".equals(user.getPassword().tri

114、m()))</p><p><b>  {</b></p><p>  this.addFieldError("user.password", "密碼不能為空");</p><p><b>  return;</b></p><p><b>  }&

115、lt;/b></p><p>  if(user.getPassword().length()< 5 ||user.getPassword().length()> 20)</p><p><b>  {</b></p><p>  this.addFieldError("user.password", &q

116、uot;密碼長度應(yīng)為5~20位");</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  //確認(rèn)密碼檢驗</b></p><p>  if(null == user.getRepassword()

117、||"".equals(user.getRepassword().trim()))</p><p><b>  {</b></p><p>  this.addFieldError("user.repassword", "重復(fù)密碼不能為空");</p><p><b>  r

118、eturn;</b></p><p><b>  }</b></p><p>  if(!user.getRepassword().equals(user.getPassword()))</p><p><b>  {</b></p><p>  this.addFieldError(&

119、quot;user.repassword", "兩次輸入密碼不一致");</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  //昵稱檢驗</b></p><p>  if(nul

120、l == user.getNickname() ||"".equals(user.getNickname().trim()))</p><p><b>  {</b></p><p>  this.addFieldError("user.nickname", "昵稱不能為空");</p><

121、;p><b>  return;</b></p><p><b>  }</b></p><p>  if(user.getNickname().length()<2 ||user.getNickname().length()>20)</p><p><b>  {</b></

122、p><p>  this.addFieldError("user.nickname", "昵稱長度應(yīng)為2~20位");</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  //郵箱驗證&

123、lt;/b></p><p><b>  //昵稱檢驗</b></p><p>  if(null == user.getEmail() ||"".equals(user.getEmail().trim()))</p><p><b>  {</b></p><p>  t

124、his.addFieldError("user.email", "郵箱不能為空");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(user.getEmail().length()<2 ||user.get

125、Email().length()>20)</p><p><b>  {</b></p><p>  this.addFieldError("user.email", "郵箱長度應(yīng)為2~20位");</p><p><b>  return;</b></p>&l

126、t;p><b>  }</b></p><p>  //密碼保護(hù)答案檢驗</p><p>  if(null == user.getAnswer() ||"".equals(user.getAnswer().trim()))</p><p><b>  {</b></p><p

127、>  this.addFieldError("user.answer", "密碼保護(hù)答案不能為空");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  if(user.getAnswer().length()<

128、;2 ||user.getAnswer().length()>50)</p><p><b>  {</b></p><p>  this.addFieldError("user.answer", "問題長度應(yīng)為2~50位");</p><p><b>  return;</b>

129、;</p><p><b>  }</b></p><p>  //檢驗驗證碼是否正確</p><p>  if(null == validateCode || "".equals(validateCode))</p><p><b>  {</b></p><

130、;p>  this.addFieldError("validateCode", "驗證碼不能為空");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  //獲取生成的驗證碼</p><p>

131、  String code = (String) this.session.get("imageCode");</p><p>  if(!code .equals( validateCode))</p><p><b>  {</b></p><p>  this.addFieldError("validateC

132、ode", "驗證碼不正確");</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  public String execute(){</p&

133、gt;<p><b>  try {</b></p><p>  //模擬生成郵箱驗證碼</p><p>  String emailCode = EmailCode.emailValidateCode().toString();</p><p>  user.setEmailValidateCode(emailCode);<

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論