

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 學(xué)生個(gè)人博客</b></p><p> 摘要:隨著科學(xué)的發(fā)展,技術(shù)的進(jìn)步,計(jì)算機(jī)在人們生活學(xué)習(xí)中扮演著越來(lái)越重要的角色。人們開(kāi)始利用計(jì)算機(jī)交流溝通也變得越來(lái)越頻繁,而博客作為交流的工具,已經(jīng)成為了人們深度交流溝通的網(wǎng)絡(luò)新方式。</p><p> 學(xué)生個(gè)人博客主要是為了方便學(xué)生在線交流,溝通,可以交流學(xué)習(xí)心得,展示個(gè)人才能,聊天交友,還
2、可以作為網(wǎng)絡(luò)個(gè)人日記,發(fā)表自己的心情。</p><p> 本博客主要由三個(gè)功能模塊組成:注冊(cè)登錄,發(fā)表文章照片,評(píng)論及瀏覽組成。采用JavaEE三大核心框架(Struts2,Hibernate,Spring)的設(shè)計(jì)模式,利用Hibernate與MySql數(shù)據(jù)庫(kù)無(wú)縫對(duì)接,后臺(tái)數(shù)據(jù)庫(kù)是MySql5.5,該數(shù)據(jù)庫(kù)具有是開(kāi)源的數(shù)據(jù)庫(kù)系統(tǒng),該數(shù)據(jù)庫(kù)具有較高的完整性,一致性,安全性,博客網(wǎng)站本身運(yùn)行在Tomcat6.0服務(wù)
3、器上。</p><p> 關(guān)鍵詞:博客,核心框架,學(xué)子博客,MySql數(shù)據(jù)庫(kù)</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> 第二章 個(gè)人博客需求分析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 個(gè)人博客需求概述5</p><p> 2.2.1網(wǎng)站目標(biāo)5</p><p> 2.3 個(gè)人博客網(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è)計(jì)10</p><p> 3.1 數(shù)據(jù)庫(kù)設(shè)計(jì)10</p><p> 3.1.1數(shù)據(jù)庫(kù)設(shè)計(jì)概述10</p><p> 3.1.2 用戶信息表結(jié)構(gòu)設(shè)計(jì)11</p><p> 3.1.3個(gè)性
7、化設(shè)置表表結(jié)構(gòu)設(shè)計(jì)11</p><p> 3.1.4文章列表表結(jié)構(gòu)設(shè)計(jì)11</p><p> 3.1.5評(píng)論列表表結(jié)構(gòu)設(shè)計(jì)12</p><p> 3.1.6點(diǎn)擊量列表表結(jié)構(gòu)設(shè)計(jì)12</p><p> 3.1.7留言板列表表結(jié)構(gòu)設(shè)計(jì)12</p><p> 第四章 程序設(shè)計(jì)與編碼13</p>
8、;<p> 4.1開(kāi)發(fā)平臺(tái)與工具13</p><p> 4.1.1 MyEclipse8.6平臺(tái)13</p><p> 4.1.2 服務(wù)器和數(shù)據(jù)庫(kù)13</p><p> 4.2程序設(shè)計(jì)13</p><p> 4.2.1程序設(shè)計(jì)概述13</p><p> 4.2.2 三大框架之間的連接
9、和配置14</p><p> 4.2.3注冊(cè)登錄模塊的程序設(shè)計(jì)20</p><p> 4.2.4個(gè)性化設(shè)置模塊功能的實(shí)現(xiàn)24</p><p> 4.2.5 發(fā)表查看文章模塊功能的實(shí)現(xiàn)24</p><p> 4.2.6 評(píng)論模塊功能的實(shí)現(xiàn)27</p><p> 4.2.7 相冊(cè)模塊功能的實(shí)現(xiàn)29&l
10、t;/p><p> 4.2.8 組件化分頁(yè)模塊31</p><p> 4.2.9 個(gè)人信息模塊33</p><p> 4.2.10 留言板模塊功能的實(shí)現(xiàn)35</p><p> 第五章 測(cè)試博客39</p><p> 5.1 軟件測(cè)試分析39</p><p> 5.1.1 測(cè)試
11、的目的和重要性39</p><p> 5.1.2 測(cè)試的方法與步驟39</p><p> 5.2設(shè)計(jì)測(cè)試用例39</p><p> 5.2.1單元測(cè)試39</p><p> 5.2.2集成測(cè)試41</p><p> 5.2.3 驗(yàn)收測(cè)試41</p><p> 第六章 結(jié)束
12、語(yǔ)42</p><p> 6.1 完成效果42</p><p> 6.2 改進(jìn)意見(jiàn)42</p><p> 6.3 收獲體會(huì)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ā)揮著重要的作用。而近年來(lái)博客和博客文化正在成為互聯(lián)網(wǎng)的熱點(diǎn),并被視為是e-mail,bbs,icq之后的第四種網(wǎng)絡(luò)
14、交流方式,由于博客的溝通方式比電子郵件、討論群組等更為簡(jiǎn)單容易,現(xiàn)在已經(jīng)成為了家庭、公司、部門(mén)、團(tuán)隊(duì)之間越來(lái)越盛行的溝通工具了。博客正在改變著當(dāng)今社會(huì)的交流方式,越來(lái)越多的人選擇加入到博客的陣營(yíng)。</p><p> 我之所以選擇做個(gè)人博客,首先是因?yàn)榭梢詮闹袑W(xué)到很多的網(wǎng)絡(luò)和編程方面的知識(shí),其次通過(guò)這個(gè)畢業(yè)設(shè)計(jì)可以很好的鍛煉自己的動(dòng)手能力,并提高自己的個(gè)人能力。最后個(gè)人博客是當(dāng)前互聯(lián)網(wǎng)上的熱點(diǎn),它既可以作為一個(gè)聊
15、天工具又能作為一個(gè)交流的平臺(tái),對(duì)大多數(shù)人而言都是非常實(shí)用的。</p><p><b> 1.2課題研究意義</b></p><p> 隨著知識(shí)經(jīng)濟(jì)的到來(lái),人們已經(jīng)開(kāi)始向信息化社會(huì)邁進(jìn)。信息增長(zhǎng)的速度越來(lái)越快,人們希望能夠用一種便捷有效的工具來(lái)處理這些信息,并從中獲取對(duì)自己有用的信息,以提高自己的工作效率。在這個(gè)信息化的時(shí)代,網(wǎng)絡(luò)技術(shù)的運(yùn)用和發(fā)展不僅能夠造福于人們,
16、還能夠促進(jìn)社會(huì)的進(jìn)步,經(jīng)濟(jì)的發(fā)展。因此,作為一種交流和溝通的工具,對(duì)博客的研究是非常有必要有意義的。</p><p> 1.3論文的組織結(jié)構(gòu)和具體安排</p><p> 本次設(shè)計(jì)的目標(biāo)是,開(kāi)發(fā)一個(gè)個(gè)人博客網(wǎng)站。借助該網(wǎng)站,不同年級(jí)不同學(xué)院的學(xué)生可以通過(guò)查看文章學(xué)習(xí)到自己需要的知識(shí),并能夠自己發(fā)表文章,發(fā)表個(gè)人的心得體會(huì)等。還可以上傳自己的照片,聊天交友等等。</p>&l
17、t;p><b> 論文分為五個(gè)部分:</b></p><p> 第一章即本章緒論,簡(jiǎn)述開(kāi)發(fā)個(gè)人博客的背景,以及研究博客的意義。</p><p> 第二章為需求分析,本章中明確了博客需要實(shí)現(xiàn)的功能,分析了博客的開(kāi)發(fā)流程,并介紹根據(jù)需求選擇相應(yīng)的開(kāi)發(fā)工具和技術(shù)。</p><p> 第三章是總體設(shè)計(jì),詳細(xì)描述了博客需要的數(shù)據(jù)庫(kù)的設(shè)計(jì)情況
18、,并給出了總體界面的設(shè)計(jì)方案。 </p><p> 第四章為博客的程序設(shè)計(jì)和具體的編碼,包括各個(gè)模塊的實(shí)現(xiàn)方法及其關(guān)鍵的代碼,并截取了一些圖片作為參考,以便能夠更加直觀的了解博客的實(shí)現(xiàn)情況。</p><p> 第五章是對(duì)博客進(jìn)行整體的測(cè)試,測(cè)試功能實(shí)現(xiàn)并對(duì)測(cè)試結(jié)果進(jìn)行記錄分析。</p><p> 第六章是結(jié)束語(yǔ),總結(jié)本次設(shè)計(jì)中的難點(diǎn)和亮點(diǎn)以及自己在這次畢業(yè)設(shè)計(jì)
19、中學(xué)到的知識(shí)。 </p><p> 第二章 個(gè)人博客需求分析</p><p> 2.1 可行性分析</p><p> 個(gè)人博客作為一種新的交流溝通的工具和平臺(tái),能夠有效地促進(jìn)交流,解決學(xué)生的實(shí)際問(wèn)題,方便學(xué)生的學(xué)習(xí)生活,開(kāi)發(fā)本網(wǎng)站的可行性研究如下:</p><p> 2.1.1 技術(shù)可行性</p><p>
20、 技術(shù)上的可行性分析主要分析技術(shù)條件能否順利完成開(kāi)發(fā)工作,能否滿足實(shí)際的需求。本網(wǎng)站使用java語(yǔ)言開(kāi)發(fā),利用開(kāi)源的Tomcat作為運(yùn)行服務(wù)器,用戶界面簡(jiǎn)潔,易操作。網(wǎng)站的數(shù)據(jù)庫(kù)采用開(kāi)源的MySql存儲(chǔ)數(shù)據(jù),Mysql能夠處理較大的數(shù)據(jù),同時(shí)保持?jǐn)?shù)據(jù)的完整性和安全性。因此開(kāi)發(fā)本網(wǎng)站的平臺(tái)是成熟可行的。</p><p> 2.1.2.經(jīng)濟(jì)可行性</p><p> 隨著經(jīng)濟(jì)的發(fā)展,計(jì)算機(jī)
21、的普及程度已經(jīng)非常的高了,而開(kāi)發(fā)本網(wǎng)站的配置和技術(shù)均可行,因此開(kāi)發(fā)這樣的一個(gè)網(wǎng)站成本是可以控制的,并且網(wǎng)站的運(yùn)行可以加強(qiáng)學(xué)生之間的交流和溝通,方便學(xué)生的學(xué)習(xí)生活,還可以有一定的經(jīng)濟(jì)回報(bào),因此該網(wǎng)站在經(jīng)濟(jì)上是可行的。</p><p> 2.2 個(gè)人博客需求概述</p><p><b> 2.2.1網(wǎng)站目標(biāo)</b></p><p> 本網(wǎng)站的
22、核心架構(gòu)是JavaEE中的三大框架,在網(wǎng)站中主要有兩種類(lèi)型的用戶。即注冊(cè)用戶和非注冊(cè)用戶。注冊(cè)并登陸的用戶可以在網(wǎng)站中查看自己活著他人發(fā)表的文章,可以上傳自己的照片,還可以對(duì)自己感興趣的文章加以標(biāo)注和評(píng)論。而對(duì)于非注冊(cè)的用戶,只能以瀏覽者的身份進(jìn)入,可以查看網(wǎng)站中其他人發(fā)表的文章,也可以匿名的發(fā)表評(píng)論,但是不能寫(xiě)文章,也不能上傳自己的圖片等。</p><p> 2.3 個(gè)人博客網(wǎng)站需求模型</p>
23、<p><b> 2.3.1功能描述</b></p><p> 個(gè)人博客網(wǎng)站的主要目標(biāo)是作為一個(gè)交流的工具和一個(gè)溝通的平臺(tái),讓不同年級(jí)不同專(zhuān)業(yè)的學(xué)生可以在這里交流學(xué)習(xí)的經(jīng)驗(yàn),可以發(fā)表自己的想法,還可以上傳自己的圖片來(lái)聊天交友,本網(wǎng)站的基本功能如下:</p><p><b> 1.注冊(cè)登錄</b></p><p
24、> 凡是要發(fā)表文章顯示個(gè)人信息的用戶均必須先注冊(cè)賬號(hào),再通過(guò)登錄驗(yàn)證才能夠進(jìn)行各種功能的操作,不注冊(cè)登錄的用戶在網(wǎng)站中權(quán)限較低。</p><p><b> 2.網(wǎng)站設(shè)置</b></p><p> 網(wǎng)站制作者可以修改網(wǎng)頁(yè)的基本頁(yè)面,更改系統(tǒng)時(shí)間。</p><p><b> 3.用戶功能 </b></p&g
25、t;<p> 用戶可以查看,刪除,評(píng)論相應(yīng)的文章,可以通過(guò)問(wèn)題回自己的賬戶密碼。</p><p><b> 4.其他的功能</b></p><p> 網(wǎng)站制作者可以管理網(wǎng)站,并擁有起亞用戶所擁有的所有的權(quán)限和功能。</p><p> 2.3.2詳細(xì)功能描述</p><p> 學(xué)生通過(guò)瀏覽器訪問(wèn)到本
26、網(wǎng)站,可以使用一下功能:</p><p><b> 1)注冊(cè)用戶</b></p><p> 按照規(guī)定注冊(cè)一個(gè)正確的賬號(hào)。</p><p><b> 2)用戶登錄</b></p><p> 輸入注冊(cè)過(guò)的用戶名和密碼登錄。</p><p><b> 3)修改登
27、錄密碼</b></p><p> 可以修改自己的登錄密碼</p><p><b> 4)查看文章</b></p><p> 可以查看其它人發(fā)表的文章,也可以查看自己已經(jīng)發(fā)表過(guò)的文章。</p><p><b> 5)修改個(gè)性化設(shè)置</b></p><p>&
28、lt;b> 可以更改個(gè)人的設(shè)置</b></p><p><b> 6)評(píng)論文章</b></p><p> 可以對(duì)好的文章進(jìn)行評(píng)論,還可以查看別人的評(píng)論。</p><p><b> 7)上傳相冊(cè)</b></p><p> 對(duì)登錄用戶,可以上傳自己的照片。</p>
29、<p><b> 8)鏈接</b></p><p> 本網(wǎng)站提供了對(duì)一些知名博客的鏈接,可以點(diǎn)擊鏈接進(jìn)入其他博客網(wǎng)站。</p><p><b> 8)留言</b></p><p> 本網(wǎng)站提供了留言板,所有登陸用戶都可以進(jìn)行留言或者查看別人的留言。</p><p> 2.3.
30、3主要功能模塊處理流程的描述</p><p> 個(gè)人博客網(wǎng)站主要可以分為幾個(gè)個(gè)大的模塊,第一個(gè)模塊是用戶注冊(cè)登錄模塊,即進(jìn)入網(wǎng)站模塊。第二個(gè)模塊是用戶的個(gè)性化設(shè)置,第三個(gè)模塊是發(fā)表文章,查看文章內(nèi)容,第四個(gè)模塊是相冊(cè)模塊開(kāi)發(fā)與RSS訂閱。</p><p><b> 用戶注冊(cè)登錄模塊:</b></p><p><b> ?。?)功能
31、描述</b></p><p> 完成注冊(cè)登錄,填寫(xiě)基本信息</p><p> 查看并修改個(gè)人信息。</p><p><b> (2)具體流程圖</b></p><p><b> 個(gè)性化設(shè)置模塊</b></p><p><b> ?。?)功能描述&
32、lt;/b></p><p> 可以設(shè)置個(gè)性化頁(yè)面,用于顯示在網(wǎng)站上方。</p><p> 可以修改個(gè)性化語(yǔ)句。</p><p><b> (2)具體流程圖</b></p><p><b> 發(fā)表,管理文章模塊</b></p><p><b> ?。?
33、)功能描述</b></p><p> 登陸成功后發(fā)表自己的文章。</p><p> 查看管理自己的文章,還可以查看他人的文章。</p><p> ?。?)具體的流程圖:</p><p> 相冊(cè)模塊開(kāi)發(fā)與RSS訂閱:</p><p><b> ?。?)功能描述</b></p&
34、gt;<p> 可以點(diǎn)擊上傳圖片到服務(wù)器。</p><p> 通過(guò)RSS訂閱能夠快速查找到文章和顯示新添加的文章</p><p><b> ?。?)流程圖</b></p><p><b> 第三章 整體設(shè)計(jì)</b></p><p><b> 3.1 數(shù)據(jù)庫(kù)設(shè)計(jì)<
35、;/b></p><p> 3.1.1數(shù)據(jù)庫(kù)設(shè)計(jì)概述</p><p> 數(shù)據(jù)庫(kù)是整個(gè)系統(tǒng)最核心的部分,數(shù)據(jù)庫(kù)設(shè)計(jì)的好壞直接影響到整個(gè)系統(tǒng)的設(shè)計(jì)成敗,因此本節(jié)專(zhuān)門(mén)來(lái)討論有關(guān)數(shù)據(jù)庫(kù)的設(shè)計(jì)。</p><p> 數(shù)據(jù)庫(kù)作為管理數(shù)據(jù)的最新技術(shù)。近年來(lái)隨著計(jì)算機(jī)的大力發(fā)展數(shù)據(jù)庫(kù)管理系統(tǒng)已從專(zhuān)用的應(yīng)用程序發(fā)展成為通用的系統(tǒng)軟件。由于現(xiàn)在的數(shù)據(jù)庫(kù)都具有數(shù)據(jù)結(jié)構(gòu)化,最低冗
36、余度,較高的程序與數(shù)據(jù)獨(dú)立性,易于擴(kuò)充,易于編制應(yīng)用程序等優(yōu)點(diǎn),較大的信息系統(tǒng)都是建立在數(shù)據(jù)庫(kù)設(shè)計(jì)之上的。</p><p> 數(shù)據(jù)庫(kù)的出現(xiàn)改變了人們存儲(chǔ)數(shù)據(jù)的方式,極大地提高了存儲(chǔ)數(shù)據(jù)的能力,方便了人們對(duì)數(shù)據(jù)的管理和利用,并提高了人們的決策的可靠性。目前,數(shù)據(jù)庫(kù)已經(jīng)成為現(xiàn)代信息系統(tǒng)不可分割的重要組成部分。數(shù)據(jù)庫(kù)技術(shù)也已經(jīng)成為計(jì)算機(jī)領(lǐng)域中發(fā)展最快的技術(shù)之一。</p><p> 數(shù)據(jù)庫(kù)設(shè)計(jì)
37、是將現(xiàn)實(shí)世界的實(shí)體模型與需求轉(zhuǎn)換成數(shù)據(jù)庫(kù)的模型的過(guò)程,它是建立數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的核心問(wèn)題。數(shù)據(jù)庫(kù)及其應(yīng)用的性能都建立在良好的數(shù)據(jù)庫(kù)設(shè)計(jì)的基礎(chǔ)之上,數(shù)據(jù)庫(kù)的數(shù)據(jù)是一切操作的基礎(chǔ),如果數(shù)據(jù)庫(kù)設(shè)計(jì)不好,那么其它一切用于提高數(shù)據(jù)庫(kù)性能的方法收效都是有限的。數(shù)據(jù)庫(kù)設(shè)計(jì)的關(guān)鍵是如何使設(shè)計(jì)的數(shù)據(jù)庫(kù)能合理地存儲(chǔ)用戶的數(shù)據(jù),方便用戶進(jìn)行數(shù)據(jù)處理。</p><p> 數(shù)據(jù)庫(kù)的設(shè)計(jì)都必須遵循一定的規(guī)則,每一個(gè)數(shù)據(jù)庫(kù)都有自己不同的規(guī)則,
38、在關(guān)系型數(shù)據(jù)庫(kù)中,這種規(guī)則就是范式,范式是符合某一種級(jí)別的關(guān)系模式的集合。一般人們?cè)O(shè)計(jì)數(shù)據(jù)庫(kù)都遵循第三范式。即:數(shù)據(jù)庫(kù)表中不包含已在其他表中包含的非主關(guān)鍵字信息。采用范式減少了數(shù)據(jù)冗余,節(jié)約了存儲(chǔ)空間,同時(shí)加快了操作數(shù)據(jù)庫(kù)的速度。</p><p> 整個(gè)博客網(wǎng)站所包括的信息表有 </p><p> 1:用戶信息表:(B_User)</p><p> 2:個(gè)性化
39、設(shè)置表:(B_blog)</p><p> 3:文章列表:(B_Article)</p><p> 4:評(píng)論列表:(B_Criticle)</p><p> 5:點(diǎn)擊量列表:(B_Clickrate)</p><p> 5:留言板列表:(guestbook)等相應(yīng)信息表??蓪⑦@些信息抽象為所需要的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)</p>
40、<p> 1) 用戶信息表(用戶ID,用戶姓名,昵稱(chēng),郵箱,密碼,驗(yàn)證碼,是否驗(yàn)證,密保問(wèn)題,密保答案)</p><p> 2) 個(gè)性化設(shè)置表(個(gè)性化ID,用戶ID,個(gè)性化題目,個(gè)性化內(nèi)容)</p><p> 3) 文章列表(文章ID,文章標(biāo)題,文章內(nèi)容,用戶姓名,發(fā)表日期,是否已讀)</p><p> 4) 評(píng)論列表(評(píng)論ID,文章ID,評(píng)論內(nèi)
41、容,用戶姓名)</p><p> 5) 點(diǎn)擊量列表(點(diǎn)擊量ID,文章ID,點(diǎn)擊IP地址,點(diǎn)擊時(shí)間)</p><p> 6) 留言板列表(留言ID,作者,標(biāo)題,內(nèi)容,留言時(shí)間)</p><p> 注:帶方框的表示表的主鍵</p><p> 3.1.2 用戶信息表結(jié)構(gòu)設(shè)計(jì)</p><p> 用戶信息表主要保存博客
42、網(wǎng)站已經(jīng)注冊(cè)過(guò)的用戶基本信息,主要包括用戶的登錄賬戶和密碼以及一些基本的驗(yàn)證。表的具體結(jié)構(gòu)如下所示:</p><p> 用戶信息表 B_User</p><p> 3.1.3個(gè)性化設(shè)置表表結(jié)構(gòu)設(shè)計(jì)</p><p> 該表的設(shè)計(jì)主要是用于存儲(chǔ)登錄用戶的個(gè)性化設(shè)置,主要設(shè)置其頁(yè)面,包括個(gè)性化標(biāo)題和個(gè)性化內(nèi)容,當(dāng)用戶進(jìn)入時(shí)其個(gè)性化語(yǔ)句會(huì)顯示在上方頁(yè)面的中央,表的具體
43、結(jié)構(gòu)設(shè)計(jì)如下所示:</p><p> 個(gè)性化設(shè)置表B_Blog</p><p> 3.1.4文章列表表結(jié)構(gòu)設(shè)計(jì)</p><p> 文章列表主要用來(lái)存儲(chǔ)用戶發(fā)表的文章,包括文章的標(biāo)題,內(nèi)容,該用戶是否已閱讀,查看的日期以及用戶名。用過(guò)該表可以讀取當(dāng)前博客網(wǎng)站的所有文章信息,還可以根據(jù)登錄用戶名查看用戶個(gè)人發(fā)表的文章信息,表的具體結(jié)構(gòu)設(shè)計(jì)如下所示:</p&g
44、t;<p> 文章列表B_Article</p><p> 3.1.5評(píng)論列表表結(jié)構(gòu)設(shè)計(jì)</p><p> 此表的設(shè)計(jì)主要用于存儲(chǔ)用戶對(duì)文章的評(píng)論信息,主要有兩種用戶:未登錄的用戶和登錄用戶,登錄用戶在評(píng)論后會(huì)顯示其用戶名,未登錄用戶只能以匿名的方式發(fā)表評(píng)論,表的具體結(jié)構(gòu)設(shè)計(jì)如下所示:</p><p> 評(píng)論列表B_Criticle</p
45、><p> 3.1.6點(diǎn)擊量列表表結(jié)構(gòu)設(shè)計(jì)</p><p> 該表的設(shè)計(jì)主要用于記錄文章的點(diǎn)擊數(shù)量,這里要根據(jù)用戶的IP地址來(lái)判斷不同的用戶,因此該表存儲(chǔ)文章的ID號(hào),用戶的IP地址以及點(diǎn)擊的時(shí)間。表的具體結(jié)構(gòu)設(shè)計(jì)如下所示:</p><p> 點(diǎn)擊量列表 B_Clicrate</p><p> 3.1.7留言板列表表結(jié)構(gòu)設(shè)計(jì)</p
46、><p> 該表的設(shè)計(jì)主要用于記錄文章的點(diǎn)擊數(shù)量,這里要根據(jù)用戶的IP地址來(lái)判斷不同的用戶,因此該表存儲(chǔ)文章的ID號(hào),用戶的IP地址以及點(diǎn)擊的時(shí)間。表的具體結(jié)構(gòu)設(shè)計(jì)如下所示:</p><p> 留言列表 guestbook</p><p> 第四章 程序設(shè)計(jì)與編碼</p><p> 4.1開(kāi)發(fā)平臺(tái)與工具</p><p
47、> 4.1.1 MyEclipse8.6平臺(tái)</p><p> 本博客采用MyEclipse工作平臺(tái),MyEclipse企業(yè)級(jí)工作平臺(tái)(MyEclipse Enterprise Workbench ,簡(jiǎn)稱(chēng)MyEclipse)是對(duì)Eclipse IDE的擴(kuò)展,利用它我們可以在數(shù)據(jù)庫(kù)和J2EE的開(kāi)發(fā)、發(fā)布,以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的J2EE集成開(kāi)發(fā)環(huán)境,包括了完備的編碼、
48、調(diào)試、測(cè)試和發(fā)布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。在結(jié)構(gòu)上MyEclipse的特征可以分為七類(lèi):1、J2EE模型;2、WEB開(kāi)發(fā)工具;3、EJB開(kāi)發(fā)工具;3、應(yīng)用程序服務(wù)器的連接;4、J2EE項(xiàng)目部署服務(wù);6、數(shù)據(jù)庫(kù)服務(wù);7、MyEclipse整合幫助。</p><p> 在個(gè)人博客的開(kāi)發(fā)過(guò)程中,應(yīng)用的是MyEclipse8.6這
49、個(gè)版本,作為MyEclipse較新的版本,MyEclipse8.6中的關(guān)鍵特性有:支持最新版本的Apache Tomcat,支持Spring項(xiàng)目,Spring安全向?qū)?,Spring服務(wù)從WSDL,Spring代碼輔助管理,完整的Java探測(cè),支持Ajax工具,支持Web服務(wù)工具。因此個(gè)人博客運(yùn)行的服務(wù)器我選擇的是新版本的Apache Tomcat 6.0.35版本。</p><p> 4.1.2 服務(wù)器和數(shù)據(jù)庫(kù)
50、</p><p> 在系統(tǒng)的開(kāi)發(fā)過(guò)程中使用的服務(wù)器是Tomcat,Tomcat來(lái)源于Apache軟件基金會(huì)(Apache Software Foundation)的Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,,由Apache、Sun 和其他一些公司及個(gè)人共同開(kāi)發(fā)而成。由于有了前Sun公司的參與和支持,最新的Servlet 和JSP 規(guī)范總是能在Tomcat 中得到體現(xiàn)。并且因?yàn)門(mén)omcat 技術(shù)先進(jìn)、性能穩(wěn)定,而且免
51、費(fèi),成為目前比較流行的Web 應(yīng)用服務(wù)器。因此本博客選擇了Tomcat作為其服務(wù)器。</p><p> 開(kāi)發(fā)用的系統(tǒng)工具如下表所示:</p><p> 個(gè)人博客開(kāi)發(fā)平臺(tái)和工具</p><p><b> 4.2程序設(shè)計(jì)</b></p><p> 4.2.1程序設(shè)計(jì)概述</p><p> 本
52、博客在設(shè)計(jì)的過(guò)程中運(yùn)用了當(dāng)今非常流行的編程模式---三層架構(gòu)的思想,即將界面層,業(yè)務(wù)邏輯層,數(shù)據(jù)操作層相分離,使用JavaEE中非常著名的三大框架(Struts2,Spring,Hibernate)來(lái)分別實(shí)現(xiàn),其中界面層使用Struts2,業(yè)務(wù)邏輯層使用Spring,數(shù)據(jù)操作層使用Hibernate。</p><p> Struts2是用于Web項(xiàng)目中UI層的開(kāi)源的框架,是經(jīng)典的MVC模式實(shí)現(xiàn)的案例。作為一款開(kāi)
53、源的框架,Struts2具有非常明顯的優(yōu)勢(shì)和特點(diǎn):1.Struts2中將業(yè)務(wù)數(shù)據(jù),顯示頁(yè)面,動(dòng)作處理等進(jìn)行分離,極大地方便了代碼的維護(hù)。2.Struts2采用的是Front Controller模式來(lái)實(shí)現(xiàn)對(duì)各種觸發(fā)動(dòng)作的處理,要求所有的請(qǐng)求都經(jīng)過(guò)統(tǒng)一的入口,再進(jìn)行轉(zhuǎn)發(fā),方便了我們對(duì)代碼的統(tǒng)一控制和管理。3.Struts2中通過(guò)Action類(lèi)實(shí)現(xiàn)各種邏輯,并且利用Struts2的核心標(biāo)簽來(lái)完成對(duì)數(shù)據(jù)的呈現(xiàn)。4.struts2在servle
54、t容器中運(yùn)行,通過(guò)配置文件web.xml來(lái)完成到相應(yīng)的Action的跳轉(zhuǎn)。</p><p> Spring主要運(yùn)用于業(yè)務(wù)邏輯層,在功能上有潤(rùn)滑劑的美稱(chēng)。Spring主要通過(guò)控制反轉(zhuǎn),AOP應(yīng)用,面向接口編程來(lái)降低組件之間的耦合度,增加系統(tǒng)的擴(kuò)展性。Spring作為一個(gè)分層框架,由七個(gè)定義良好的模塊組成,其中最重要的模塊是核心容器。核心容器定義了創(chuàng)建、配置和管理bean的方式,并且提供了Spring框架的基本功能
55、。Beanfactory作為核心容器的組件,是工廠模式的實(shí)現(xiàn)。其利用控制反轉(zhuǎn)將應(yīng)用程序的配置和應(yīng)用分開(kāi),減少了代碼的耦合。</p><p> Hibernate主要作用于數(shù)據(jù)層,主要用于封裝數(shù)據(jù)訪問(wèn)層的組件。在應(yīng)用程序中的數(shù)據(jù)用對(duì)象來(lái)體現(xiàn),而數(shù)據(jù)庫(kù)中,數(shù)據(jù)用表的形式保存。Hibernate利用對(duì)象- 關(guān)系映射,將應(yīng)用程序中的對(duì)象(Object)與表中的數(shù)據(jù)(Relationship)之間的映射(Mapping)
56、。利用Hibernate可以直接從數(shù)據(jù)庫(kù)中取出java對(duì)象,并將java對(duì)象直接保存在數(shù)據(jù)庫(kù)中,中間的sql等語(yǔ)句都被封裝了。</p><p> 4.2.2 三大框架之間的連接和配置</p><p> <!-- 配置監(jiān)聽(tīng)器,用于spring初始化的監(jiān)聽(tīng)器 --></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分配置文件分類(lèi):</p><p> 基本的配置信息(db.properties),主要用于連接數(shù)據(jù)庫(kù):</p><p> 在Spring的配置文件applicationContext.xml中加載外部配置文件信息:</p><p> <!-- 加載外部的properties文件,
60、用于解析${}形式的變量,如果需要加載多個(gè)properties文件,就寫(xiě)在一起,用逗號(hào)分隔 --> </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ù)庫(kù)信息 --></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> <!-- 通過(guò)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ù)庫(kù)表信息</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對(duì)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)入注冊(cè)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> <!-- 驗(yàn)證注冊(cè)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)入查詢(xú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)入查詢(xú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> <!--查詢(xún)文章內(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注冊(cè)登錄模塊的程序設(shè)計(jì)</p><p> 本模塊主要用于用戶
107、第一次進(jìn)入時(shí)注冊(cè)和登錄,用戶注冊(cè)時(shí)根據(jù)提示正確的填寫(xiě)基本信息,成功后即完成。登錄時(shí)必須輸入正確的用戶名和密碼,否者會(huì)提示錯(cuò)誤,并禁止用戶發(fā)表文章。</p><p><b> 注冊(cè)界面</b></p><p><b> 登錄界面</b></p><p> 沒(méi)有賬號(hào)的用戶首先選擇注冊(cè)賬戶,在成功注冊(cè)后既可以開(kāi)始登錄了。在
108、正確輸入了用戶名,密碼和驗(yàn)證碼后用戶登錄成功。這里注冊(cè)界面我用了兩種校驗(yàn),第一種是在客戶端jsp頁(yè)面進(jìn)行校驗(yàn),第二層校驗(yàn)是在服務(wù)器端校驗(yàn),利用struts2提供的方法進(jìn)行。</p><p><b> 注冊(cè)模塊代碼:</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的配置獲取器對(duì)象</p>&
110、lt;p> public void validate() {</p><p><b> //用戶名檢驗(yàn)</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", "用戶名長(zhǎng)度應(yīng)為5~20位");</p><p
113、><b> return;</b></p><p><b> }</b></p><p><b> //密碼檢驗(yàn)</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;密碼長(zhǎng)度應(yīng)為5~20位");</p><p><b> return;</b></p><p><b> }</b></p><p><b> //確認(rèn)密碼檢驗(yà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> //昵稱(chēng)檢驗(yàn)</b></p><p> if(nul
120、l == user.getNickname() ||"".equals(user.getNickname().trim()))</p><p><b> {</b></p><p> this.addFieldError("user.nickname", "昵稱(chēng)不能為空");</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", "昵稱(chēng)長(zhǎng)度應(yīng)為2~20位");</p><p><b> return;</b></p><p><b> }</b></p><p><b> //郵箱驗(yàn)證&
123、lt;/b></p><p><b> //昵稱(chēng)檢驗(yàn)</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", "郵箱長(zhǎng)度應(yīng)為2~20位");</p><p><b> return;</b></p>&l
126、t;p><b> }</b></p><p> //密碼保護(hù)答案檢驗(yàn)</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", "問(wèn)題長(zhǎng)度應(yīng)為2~50位");</p><p><b> return;</b>
129、;</p><p><b> }</b></p><p> //檢驗(yàn)驗(yàn)證碼是否正確</p><p> if(null == validateCode || "".equals(validateCode))</p><p><b> {</b></p><
130、;p> this.addFieldError("validateCode", "驗(yàn)證碼不能為空");</p><p><b> return;</b></p><p><b> }</b></p><p> //獲取生成的驗(yàn)證碼</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", "驗(yàn)證碼不正確");</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> //模擬生成郵箱驗(yàn)證碼</p><p> String emailCode = EmailCode.emailValidateCode().toString();</p><p> user.setEmailValidateCode(emailCode);<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人博客畢業(yè)論文
- 個(gè)人博客系統(tǒng)畢業(yè)論文
- 個(gè)人博客網(wǎng)站畢業(yè)論文
- 個(gè)人博客網(wǎng)站畢業(yè)論文
- 個(gè)人博客網(wǎng)站畢業(yè)論文
- 個(gè)人博客畢業(yè)論文設(shè)計(jì)
- 學(xué)生個(gè)人博客畢業(yè)論文
- 個(gè)人博客網(wǎng)站設(shè)計(jì)畢業(yè)論文
- 畢業(yè)論文學(xué)生個(gè)人博客
- 個(gè)人博客系統(tǒng)畢業(yè)論文--博客網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)
- 個(gè)人博客的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 個(gè)人博客系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 個(gè)人博客網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn) 畢業(yè)論文
- 畢業(yè)論文-- 個(gè)人博客系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)
- 個(gè)人博客系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 畢業(yè)論文
- 畢業(yè)論文——基于react和node開(kāi)發(fā)個(gè)人博客
- 畢業(yè)論文——基于react和node開(kāi)發(fā)個(gè)人博客
- 基于laravel框架的個(gè)人博客發(fā)布系統(tǒng)【畢業(yè)論文】
- 計(jì)算機(jī)畢業(yè)論文基于nodejs的個(gè)人博客
- 基于laravel框架的個(gè)人博客發(fā)布系統(tǒng)【畢業(yè)論文】
評(píng)論
0/150
提交評(píng)論