版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人博客畢業(yè)論文
- 個人博客系統(tǒng)畢業(yè)論文
- 個人博客網(wǎng)站畢業(yè)論文
- 個人博客網(wǎng)站畢業(yè)論文
- 個人博客網(wǎng)站畢業(yè)論文
- 個人博客畢業(yè)論文設(shè)計
- 學(xué)生個人博客畢業(yè)論文
- 個人博客網(wǎng)站設(shè)計畢業(yè)論文
- 畢業(yè)論文學(xué)生個人博客
- 個人博客系統(tǒng)畢業(yè)論文--博客網(wǎng)站的設(shè)計與實現(xiàn)
- 個人博客的設(shè)計與實現(xiàn)畢業(yè)論文
- 個人博客系統(tǒng)的設(shè)計與實現(xiàn)畢業(yè)論文
- 個人博客網(wǎng)站的設(shè)計與實現(xiàn) 畢業(yè)論文
- 畢業(yè)論文-- 個人博客系統(tǒng)的設(shè)計與開發(fā)
- 個人博客系統(tǒng)的設(shè)計與實現(xiàn) 畢業(yè)論文
- 畢業(yè)論文——基于react和node開發(fā)個人博客
- 畢業(yè)論文——基于react和node開發(fā)個人博客
- 基于laravel框架的個人博客發(fā)布系統(tǒng)【畢業(yè)論文】
- 計算機(jī)畢業(yè)論文基于nodejs的個人博客
- 基于laravel框架的個人博客發(fā)布系統(tǒng)【畢業(yè)論文】
評論
0/150
提交評論