一個簡單網(wǎng)絡(luò)論壇系統(tǒng)的設(shè)計與實現(xiàn)【畢業(yè)設(shè)計】_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  本科畢業(yè)設(shè)計(論文)</p><p><b> ?。ǘ?屆)</b></p><p>  一個簡單網(wǎng)絡(luò)論壇系統(tǒng)的設(shè)計與實現(xiàn)</p><p>  所在學(xué)院 </p><p>  專業(yè)班級 計算機科學(xué)與技術(shù) </p&

2、gt;<p>  學(xué)生姓名 學(xué)號 </p><p>  指導(dǎo)教師 職稱 </p><p>  完成日期 年 月 </p><p>  摘要:Java技術(shù)隨著Internet的迅猛發(fā)展,已經(jīng)成為軟件業(yè)的主流技術(shù)。為了編碼的規(guī)范

3、化和標準化,各種框架技術(shù)不斷涌現(xiàn)出來,其中最有名的是Struts2、Spring和Hibernate。Struts2.0版本是在2007年推出的全新框架,它改進了Strutsl的一些主要不足。Struts2比Strutsl更加簡單,更加靈活,例如它取消了ActionForm組件、支持OGNL語言,支持多種視圖技術(shù),如JSP,F(xiàn)reeMarker,等。Hibernate3借助新的Hibernate Annotation庫,即可一次性地分配

4、所有舊映射文件——一切都會按照您的想法來定義——注釋直接嵌入到您的Java類中,并提供一種強大及靈活的方法來聲明持久性映射.本文首先討論了Struts2、Spring2和Hibernate基礎(chǔ)及其相關(guān)技術(shù),包括各個架構(gòu)的關(guān)鍵支撐技術(shù)。最后在BBS論壇系統(tǒng)中應(yīng)用了Struts2、Spring和Hibernate整合技術(shù)。</p><p>  關(guān)鍵字:Java;Struts;Spring;JSP;BBS論壇</

5、p><p>  The Design and Implementation of A Simple BBS System</p><p>  Abstract:With the rapid development of Interne, Java technology has become a mainstream technology of the software industry. In

6、 order to process the normalization and standardization in coding, frameworks technology continues to emerge, the most famous of them is the Struts2, Spring and Hibernate. Struts2.0 version is launched in 2007, a new fra

7、mework, which improves the major deficiencies in Strutsl. Struts2 is more than simple Strutsl, more flexible, for example, it canceled the ActionForm com</p><p>  Keywords: Java; Struts; Spring; JSP; BBS<

8、/p><p><b>  目錄</b></p><p><b>  1 緒論1</b></p><p>  2 基本技術(shù)介紹2</p><p>  3 網(wǎng)絡(luò)論壇詳細設(shè)計5</p><p>  3.1 需求分析5</p><p>  3.2

9、 總體設(shè)計5</p><p>  3.3 實體類設(shè)計與實現(xiàn)6</p><p>  3.4 網(wǎng)絡(luò)論壇的基本流程9</p><p>  3.5 網(wǎng)絡(luò)論壇各頁面功能10</p><p>  3.5.1 網(wǎng)絡(luò)論壇首頁Article-list.jsp詳細功能及描述10</p><p>  3.5.2 顯示圖書

10、詳細信息bookShow.jsp頁面詳細功能及描述10</p><p>  3.5.3 用戶發(fā)帖Article-addInput.jsp頁面詳細功能及描述10</p><p>  3.5.4 網(wǎng)絡(luò)論壇用戶登錄User-login.jsp頁面詳細功能及描述10</p><p>  3.5.5 網(wǎng)上論壇注冊User-regist.jsp頁面詳細功能及描述1

11、0</p><p>  3.5.6 帖子回復(fù)ArticleBack-addInput.jsp頁面詳細功能及描述10</p><p>  3.5.7 帖子刪除Article-delete.jsp頁面詳細功能及描述11</p><p>  4 系統(tǒng)實現(xiàn)12</p><p>  4.1 游客注冊功能12</p><

12、;p>  4.2 用戶登錄功能15</p><p>  4.3 游客的操作16</p><p>  4.3.1 瀏覽論壇的所有版塊16</p><p>  4.3.2 瀏覽論壇帖子的信息17</p><p>  4.3.3 文件下載19</p><p>  4.4 普通用戶的操作20<

13、;/p><p>  4.4.1 用戶信息的修改20</p><p>  4.4.2 添加版塊21</p><p>  4.4.3 發(fā)表帖子22</p><p>  4.4.4 回復(fù)帖子23</p><p>  4.4.5 文件上傳23</p><p>  4.5 管理員的操作

14、25</p><p>  5 開發(fā)工具與環(huán)境27</p><p>  5.1 JDK27</p><p>  5.2 MyEclipse27</p><p>  5.3 Tomcat27</p><p>  5.4 MySQL數(shù)據(jù)庫27</p><p>  5.5 Log4

15、j27</p><p><b>  6 總結(jié)28</b></p><p>  致謝錯誤!未定義書簽。</p><p><b>  參考文獻29</b></p><p><b>  1 緒論</b></p><p>  網(wǎng)絡(luò)論壇專業(yè)叫法叫做BB

16、S,是用戶可以交換信息的系統(tǒng),各地的用戶都可以通過本地的業(yè)余BBS站與遠在異地的網(wǎng)友互通信息。</p><p>  在國外,1978年在美國芝加哥便開發(fā)出了最早的BBS系統(tǒng),但只是基于8080芯片的CBBS/Chicago(Computerized Bulletin Board System/Chicago。直到1983年,通Capital PC User Group(CPCUG)的Communication S

17、pecial Interest Group會員的努力,改寫出了個人計算機系統(tǒng)的BBS。我國直到1995年,隨著計算機及其外設(shè)的大幅降價,BBS才逐漸被人們知道。但是之后便以驚人的速度發(fā)展。國內(nèi)的BBS系統(tǒng)大致分兩類:一類是有商業(yè)性質(zhì)的。一般是有大公司建立,人們利用其交流對商品的看法,解決商品的使用等問題。一類是個人或小型集體建立的。有商業(yè)性質(zhì)的BBS要繳納一筆費用,而非商業(yè)性質(zhì)的網(wǎng)絡(luò)論壇一般都有志愿者開發(fā),他們推動了中國計算機網(wǎng)絡(luò)的健康

18、發(fā)展,為廣大網(wǎng)友提供信息交流的平臺。</p><p>  隨著BBS系統(tǒng)的發(fā)展,國內(nèi)已經(jīng)出現(xiàn)了一些多線站,一次可以允許多個用戶同時訪問,解決了多人同時撥號一個站臺發(fā)生沖突的問題。隨著WEB2.0時代的到來,BBS將朝著以下兩個方面發(fā)展:(1)BBS論壇系統(tǒng)將朝著即時性方面發(fā)展。使論壇成員在不用刷新頁面時就可以看到別人剛剛發(fā)的帖子。(2)BBS論壇系統(tǒng)也將朝著圖形化方向發(fā)展。通過外形的不同來區(qū)分不同社區(qū)的朋友而不是

19、通過ID。</p><p><b>  2 基本技術(shù)介紹</b></p><p>  本次論壇將采用Java程序語言后臺開發(fā),整合Hibernate,Struts2,Spring應(yīng)用框架,使用JSP作為前臺頁面的實現(xiàn),采用jQuery和Javascript技術(shù)進行前臺開發(fā),MYSQL作為數(shù)據(jù)庫系統(tǒng),Tomcat作為服務(wù)器,將實現(xiàn)一個提供大家交流的系統(tǒng),使用戶可以充分

20、交流自己的知識,看法,經(jīng)驗。</p><p>  MVC設(shè)計模式。MVC設(shè)計模式將應(yīng)用程序分為模型,視圖,控制器三個部分,按照模型層,視圖層,控制層進行分解,從而使得整個系統(tǒng)責(zé)任明確、接口清晰,加快了設(shè)計開發(fā)過程。模型層就是指業(yè)務(wù)邏輯的處理和數(shù)據(jù)儲存。它分為兩層:業(yè)務(wù)邏輯模型和數(shù)據(jù)模型。模型接收視圖的數(shù)據(jù),并返回最終的處理結(jié)果。數(shù)據(jù)模型是指對數(shù)據(jù)的持久化,它是線路對視圖和模型的交換的支持。實現(xiàn)時把“做什么”和“怎

21、么做”分離,這樣可以實現(xiàn)業(yè)務(wù)邏輯的重用。視圖層主要用來展現(xiàn)用戶所需的數(shù)據(jù),他是用戶和系統(tǒng)進行交互的界面,這部分工作一般可以由美工人員進行開發(fā)和維護,一般可以采用HTML頁面,JSP等技術(shù)。一般來說,視圖只接收來自模型的數(shù)據(jù)并顯示給用戶,以及將用戶界面的輸入數(shù)據(jù)和請求傳遞給控制和模型。MVC設(shè)計模式對于視圖的處理僅是視圖的采集和處理,以及用戶的請求而視圖上業(yè)務(wù)的處理,業(yè)務(wù)流程的處理和狀態(tài)的改變交個模型層來處理。視圖部分大致的處理流程是:頁

22、面模板定義布局,視圖標簽的具體內(nèi)容,而頁面布局初始化并加載頁面。用戶部件提交參數(shù),通過表示層的校驗,將數(shù)據(jù)提交給業(yè)務(wù)實體,即模型??刂茖邮且粋€分發(fā)器,選擇什么樣的模型,選擇什么樣的視圖,可以完成</p><p>  Hibernate的JDBC封裝和注釋簡介。本次網(wǎng)絡(luò)論壇的開發(fā)將使用這些目前廣泛運用的開發(fā)技術(shù)。利用Hibernate對JDBC進行了非常輕量級的對象封裝,避免去寫使用JDBC連接數(shù)據(jù)庫的重復(fù)的代碼和

23、SQL語句,可以使用面向?qū)ο蟮乃季S來對數(shù)據(jù)庫進行增刪改查等操作。傳統(tǒng)的Hibernate的配置依賴于外部XML文件,數(shù)據(jù)庫映射是啟動時加載XML映射 文件進行的。這需要寫大量的Hibernate映射文件。Hibernate注釋巧妙的借助Hibernate Annotation庫,講一切的映射關(guān)系一注釋的形式嵌入到Java類中,強大而且靈活。Hibernate核心接口[2]:Session接口。Session接口負責(zé)執(zhí)行被持久化對象的CR

24、UD操作(CRUD的任務(wù)是完成與數(shù)據(jù)庫的交流,包含了很多常見的SQL語句。SessionFactory接口。SessionFactory接口負責(zé)初始化Hibernate。它充當(dāng)數(shù)據(jù)存儲源的代理,并負責(zé)創(chuàng)建Session對象。一個項目通常只需要一個SessionFactory就夠,當(dāng)需要操作多個數(shù)據(jù)庫時,可以為每個數(shù)據(jù)庫指定一個SessionFactory。C</p><p>  Struts簡介。利用Struts

25、2接受客戶端的參數(shù),根據(jù)請求的參數(shù)轉(zhuǎn)發(fā)請求給適當(dāng)?shù)目刂破?,來控制視圖的轉(zhuǎn)發(fā),是結(jié)構(gòu)層次分明,可重用性高。Struts的作用避免了在JSP頁面當(dāng)中寫太多的代碼,做到保持JSP的界面整潔,同時可以實現(xiàn)MVC模式,Struts的根本作用就是方便以后對程序的修改。在視圖層可以使用JSP及其標簽外,Struts2也提供了強大的標簽庫。在模型層,Struts提供Action對象,來管理業(yè)務(wù)邏輯的調(diào)用實現(xiàn)分離邏輯業(yè)務(wù)。Struts通過配置struts

26、.xml很條理地幫你實現(xiàn)了上述事情,減輕了很多工作量,Strust2在Struts1的基礎(chǔ)上,增加了很多東西,標簽庫進行了擴充,實現(xiàn)上傳下載文件非常方便等等[3]。</p><p>  Spring簡介。Spring AOP模塊為基于Spring的應(yīng)用程序中的對象提供了事務(wù)管理服務(wù),Spring則完全是一種架構(gòu)型的框架了,它不屬于J2EE應(yīng)用中的任何一個層,但它提供了對象依賴注入的思想,并且為每個層中遇到的實際問

27、題提供了大量現(xiàn)成的模板類,使用這些模板類的方法很easy,大多數(shù)情況下只需要你在配置文件里配置一下就可以實現(xiàn)諸如事務(wù)管理或安全性控制這樣的復(fù)雜問題。Spring通過一種稱作控制反轉(zhuǎn)的技術(shù)。當(dāng)應(yīng)用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創(chuàng)建或者查找依賴對象。Spring提供了面向切面的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯操作與系統(tǒng)操作。應(yīng)用對象只實現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負責(zé)

28、(甚至是意識)其它的系統(tǒng)級關(guān)注點,例如日志或事務(wù)支持。通過使用 Spring AOP,Hibernate的增刪改查之前開session,和之后的關(guān)閉session交給了Spring,減少了程序員的工作量并且并與維護[4]。</p><p>  JSP簡介。Java EE環(huán)境中的JSP API是一個服務(wù)器端的腳本。JSP提供了一個被嵌入到HTML的Java語言片段,達到與服務(wù)器交互的目的[5]。</p>

29、<p>  Javascript與jQuery簡介。JavaScript被設(shè)計用來向HTML頁面添加交互行為,是一種腳本語言(腳本語言是一種輕量級的編程語言)。在HTML基礎(chǔ)上,使用Javascript可以開發(fā)交互式WEB網(wǎng)頁。Javascript的出現(xiàn)使得網(wǎng)頁和用戶之間實現(xiàn)了一種實時性的、動態(tài)的、交互性的關(guān)系,使網(wǎng)頁包含更多活躍的元素和更加精彩的內(nèi)容。jQuery是輕量級Javascript腳本庫,熟悉使用jQuery可

30、以很容易寫出兼容各種瀏覽器的頁面[6]。jQuery使用戶能更方便地處理HTML documents、events、實現(xiàn)動畫效果,并且方便地為網(wǎng)站提供AJAX交互。</p><p>  本次網(wǎng)絡(luò)論壇系統(tǒng)使用Struts2負責(zé)MVC模式里的“C”,控制業(yè)務(wù)邏輯層與表現(xiàn)層的交互,調(diào)用業(yè)務(wù)邏輯層,并將業(yè)務(wù)數(shù)據(jù)返回給表現(xiàn)層表現(xiàn)。實現(xiàn)本網(wǎng)絡(luò)論壇的業(yè)務(wù)邏輯層以DAO層為基礎(chǔ),通過DAO組件的包裝,完成系統(tǒng)所需要的業(yè)務(wù)邏輯。而

31、DAO層負責(zé)與持久化對象交互。該層封裝了數(shù)據(jù)的增刪改查等操作。DAO模式需要為每個DAO組件編寫DAO接口,同時至少提供一個實現(xiàn)類,根據(jù)不同的需要,可能有多個實現(xiàn)類。用Spring容器代替DAO 工廠,完全避免了使用工廠模式,因為Spring本身是個非常強大的工廠,可以讓Spring充當(dāng)DAO工廠。無需程序員自己實現(xiàn)工廠模式,只需將DAO組件配置在Spring容器中,由ApplicationContext負責(zé)DAO組件的創(chuàng)建即可。借助于

32、Spring提供的依賴注入,其他組件甚至不用訪問工廠,一樣可以直接使用DAO實例。本系統(tǒng)采用B/S三層結(jié)構(gòu),使用JSP技術(shù)進行動態(tài)頁面設(shè)計,運用JavaBean對程序的關(guān)鍵代碼進行分裝,如對實現(xiàn)分頁功能的代碼進行分裝。用Javascript,Struts技術(shù)實現(xiàn)對注冊,登錄失敗時的反饋信息。使用Tomcat作為WEB服務(wù)器,My</p><p>  3 網(wǎng)絡(luò)論壇詳細設(shè)計</p><p>

33、<b>  3.1 需求分析</b></p><p>  網(wǎng)絡(luò)論壇系統(tǒng)主要是實現(xiàn)網(wǎng)上自由發(fā)言,回復(fù)等功能的系統(tǒng)。一個典型的網(wǎng)絡(luò)論壇一</p><p>  般都需要實現(xiàn)帖子信息的正確顯示、具體帖子的內(nèi)容以及對某個帖子的多個回復(fù)、客戶信息注冊登錄管理、帖子處理等模塊[8]。</p><p>  根據(jù)網(wǎng)絡(luò)論壇的基本需求,本系統(tǒng)需要完成的具體任務(wù)如下

34、:</p><p>  帖子顯示及瀏覽: 當(dāng)用戶進入論壇系統(tǒng)時,應(yīng)該在主頁面中看到分頁效果后的信息</p><p>  以供用戶瀏覽。點擊某個帖子鏈接,可以進入瀏覽帖子詳細信息以及對該帖子的回復(fù)信息。</p><p>  2. 帖子管理:當(dāng)用戶的發(fā)言不夠合體時,帶有管理權(quán)限的用戶可以刪除信息不良的帖子。</p><p>  3. 用戶發(fā)言

35、:注冊成為會員并成功登錄的用戶,可以發(fā)帖分享自己的信息。</p><p>  4. 用戶回復(fù):注冊成為會員并成功登錄的用戶,可以對感興趣的帖子進行回復(fù)</p><p>  5. 用戶注冊及登錄:為了能夠與其他用戶進行互動,需要注冊。根據(jù)注冊時提供的用</p><p>  戶名和密碼進行登錄。</p><p>  6. 用戶信息更改:成為

36、會員的用戶隨時可以修改自己的個人信息,比如登錄密碼。</p><p>  7. 版塊管理:為帖子分類。用戶選擇相應(yīng)的版塊進入之后發(fā)帖,瀏覽帖子信息。管理員有增加和刪除版塊的權(quán)限。用戶有增加版塊的權(quán)限。</p><p>  8. 資源分享:為了加強信息的交流,讓用戶通過此論壇可以學(xué)習(xí)和獲得更多的資料,次論壇特別增添了文件上傳和下載模塊。為了保證信息的安全,只有注冊成會員的用戶才能上傳資料

37、。同時為了讓用戶可以更方便的獲取資源,即使是非用戶,也可以通過這個論壇下載需要的文件資源。</p><p><b>  3.2 總體設(shè)計</b></p><p>  系統(tǒng)組成.下表中給出了構(gòu)成網(wǎng)絡(luò)論壇的各個組件,通過下表,可以從宏觀上了解各個組件的功能。Service層是你的系統(tǒng)的業(yè)務(wù)邏輯體現(xiàn),一個Service,應(yīng)該是在有必要跨多DAO操作,或者需要事務(wù)時才被調(diào)用

38、。DAO只應(yīng)該針對直接的對數(shù)據(jù)庫的CRUD操作,然后返回操作結(jié)果,不應(yīng)該有別的邏輯,這樣才不會破壞層次。只有DAO是可以寫出通用的來減少重復(fù)代碼,因為數(shù)據(jù)庫只有CRUD四種操作。</p><p>  3.3 實體類設(shè)計與實現(xiàn)</p><p>  實體類的實現(xiàn)在包com.cqs.bysj.bbs2011.model下處理。設(shè)計如下:</p><p>  User(用

39、戶),擁有的屬性有:id(用戶ID),username(用戶名),password(用戶密碼),email(用戶EMAIL),tagManager(管理員標志);</p><p>  2. Article(貼子), 擁有的屬性有:id(貼子ID),title(標題),recount(回復(fù)數(shù)量),read(點擊次數(shù)),content(貼子內(nèi)容),createtime(貼子書寫時間),user(用戶),board(

40、版塊),articlebacks(回復(fù)該貼的帖子);</p><p>  3. ArticleBack(帖子回復(fù)), 擁有的屬性有:id(帖子ID),content(內(nèi)容),backDate(回復(fù)時間,user(回復(fù)的用戶),article(回復(fù)的帖子);</p><p>  4. Board(版塊信息), 擁有的屬性有: id(版塊ID),boardname(版塊名稱),articl

41、es(該板塊擁有的帖);</p><p>  5. FileEntity(上傳的文件), 擁有的屬性有:id(文件ID),describe(對該文件的描述),filename(文件的名稱),fileContentType(文件類型),username(上傳者)。</p><p>  創(chuàng)建數(shù)據(jù)表采用hibernate的annotation字段映射來實現(xiàn)。先寫好java實體類,利了</

42、p><p>  hibernate注解的方式設(shè)定表結(jié)構(gòu),主鍵和主鍵的自動增長的生成方式,生成各個表的主鍵關(guān)聯(lián)。這樣即采用了一種先建立實體類,在實體類的基礎(chǔ)上生成數(shù)據(jù)庫里的表格,省去了花時間去編寫SQL語句去建立表格(雖然說現(xiàn)在建立表格多半已經(jīng)不必寫SQL語句)。傳統(tǒng)的做法是先在數(shù)據(jù)庫里建立表格,然后再表格的基礎(chǔ)上建立實體類。兩種做法各有都是設(shè)計系統(tǒng)的方法,或許傳統(tǒng)的方法更好,畢竟經(jīng)受了時間的考驗,這個系統(tǒng)我嘗試了先寫

43、實體類然后讓hibernate去生成表格的方法。</p><p>  如下設(shè)立主鍵和主鍵增長方式代碼:</p><p>  @Id@GeneratedValue</p><p>  public int getId() {</p><p>  return id;</p><p><b>  }</b&

44、gt;</p><p>  各個實體類之間的關(guān)系圖:</p><p>  利用Hibernate的注解生成相應(yīng)的表格及表格之間的級聯(lián)關(guān)系。一下是Article類和User,ArticleBack類的部分代碼:</p><p>  Article.java</p><p>  public class Article {</p>

45、<p>  private int id;</p><p>  private String title;</p><p>  private String content;</p><p>  private String createtime;</p><p>  private int readcount=0;</p&g

46、t;<p>  private int recount=0;</p><p>  private User user;</p><p>  private Board board;</p><p>  private Set<ArticleBack> articlebacks=new HashSet<ArticleBack>()

47、;</p><p>  ………………………………………………</p><p>  ………………………………………………</p><p>  @ManyToOne(cascade={CascadeType.PERSIST})</p><p>  public User getUser() {</p><p>  retu

48、rn user;</p><p><b>  }</b></p><p>  public void setUser(User user) {</p><p>  this.user = user;</p><p><b>  }</b></p><p>  @OneToMa

49、ny(cascade={CascadeType.ALL},fetch=FetchType.EAGER,mappedBy="article")</p><p>  public Set<ArticleBack> getArticleBacks() {</p><p>  return articlebacks;</p><p><

50、b>  }</b></p><p>  public void setArticleBacks(Set<ArticleBack> articleBacks) {</p><p>  this.articlebacks = articleBacks;</p><p><b>  }</b></p>&l

51、t;p>  User.java:</p><p><b>  @Entity</b></p><p>  @Table(name="user")</p><p>  public class User {</p><p>  private int id;</p><p>

52、;  private String username;</p><p>  private String password;</p><p>  private String email;</p><p>  private int tagManager;</p><p>  ArticleBack.java:</p><

53、p><b>  @Entity</b></p><p>  @Table(name="articleback")</p><p>  public class ArticleBack {</p><p>  private int id;</p><p>  private String con

54、tent;</p><p>  private String backDate;</p><p>  private Article article;</p><p>  private User user;</p><p>  ………………………………………………</p><p>  …………………………………………

55、……</p><p>  @ManyToOne</p><p>  public Article getArticle() {</p><p>  return article;</p><p><b>  }</b></p><p>  public void setArticle(Articl

56、e article) {</p><p>  this.article = article;</p><p><b>  }</b></p><p>  @OneToOne(cascade={CascadeType.PERSIST})</p><p>  public User getUser() {</p>

57、<p>  return user;</p><p><b>  }</b></p><p>  數(shù)據(jù)庫選擇。MySQL是一個小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),使用Hibernate的注解和配置<property name="hibernate.hbm2ddl.auto">true</property>自動建表,用SQ

58、L語言建立名為"BBSBYSJ"的數(shù)據(jù)庫。所有的數(shù)據(jù)庫中的數(shù)據(jù)都存儲在表中。</p><p>  3.4 網(wǎng)絡(luò)論壇的基本流程</p><p>  網(wǎng)絡(luò)論壇在運行過程中頁面的基本流程如下圖:</p><p>  管理員管理基本流程如下圖:</p><p>  3.5 網(wǎng)絡(luò)論壇各頁面功能</p><p&

59、gt;  3.5.1 網(wǎng)絡(luò)論壇首頁Article-list.jsp詳細功能及描述</p><p>  獲取帖子基本信息集合,循環(huán)顯示圖書分類信息,顯示的信息為帖子的標題,發(fā)帖的用戶,發(fā)帖的時間。在帖子標題里設(shè)置超級鏈接,傳入該帖子的ID作為參數(shù),點擊可以進入顯示該帖子具體信息的頁面。</p><p>  通過在瀏覽器輸入Article-list,在Struts配置文件里配置相應(yīng)的acti

60、on,經(jīng)ArticleAction的list()方法處理,從而轉(zhuǎn)發(fā)到Article-list.jsp頁面。在該頁面,通過Struts標簽<s:interator>循環(huán)輸出每一個帖子。通過<a href="Article-detail?id=<s:property value="#c.id"/>&username=<%=username %>">

61、;超級鏈接鏈接到Article-detail.jsp頁面。</p><p>  3.5.2 顯示圖書詳細信息bookShow.jsp頁面詳細功能及描述</p><p>  本頁面是在控制器響應(yīng)了網(wǎng)上論壇主頁提交的查看帖子詳細信息請求,即“Article-detail”請求后,跳轉(zhuǎn)到的頁面。在該頁面中通過Struts標簽將獲取到的指定帖子詳細信息顯示出來,包括用戶的標題,內(nèi)容,發(fā)帖用戶,發(fā)

62、帖時間等。同時如果該帖子已有回復(fù)的帖子,對應(yīng)的帖子回復(fù)也會在該頁面顯示。同時點擊回復(fù)鏈接提ArticleBack-addInput?articleback.user.username=<s:propertyvalue="user.username"/>&articleback.article.id=<s:property value="article.id"請求,進入Ar

63、ticleBack-addInput.jsp頁面。</p><p>  3.5.3 用戶發(fā)帖Article-addInput.jsp頁面詳細功能及描述</p><p>  本頁面是在用戶成功登錄后,點擊發(fā)帖進入的頁面。在該頁面中將顯示的是用戶輸入帖子信息的表單。表單的action為Article-add。通過Sturts配置文件找到相應(yīng)ArticleAction的add()方法,再轉(zhuǎn)發(fā)到

64、相應(yīng)的Article-add.jsp頁面。</p><p>  3.5.4 網(wǎng)絡(luò)論壇用戶登錄User-login.jsp頁面詳細功能及描述</p><p>  本頁面是客戶在提供登錄表單的頁面成功登錄之后顯示的頁面。通過Struts表單顯示用戶的基本信息,如用戶名。在該頁面通過"User-updateInput?user.id=<s:property value=&quo

65、t;user.id"/>"請求進入User-updateInput.jsp,進行用戶信息的修改。</p><p>  3.5.5 網(wǎng)上論壇注冊User-regist.jsp頁面詳細功能及描述</p><p>  提交新用戶注冊請求,同時提交新用戶注冊信息的表單。提交注冊用戶姓名、地址、電子郵件地址、電話、用戶名、密碼以及確認密碼的表單元素。注冊按鈕。在本頁面中注

66、冊用戶可以在表單中輸入對應(yīng)的注冊信息,在單擊“注冊”按鈕后,將提交“User-regist.”請求,同時提交新用戶的相關(guān)注冊信息,以便于進行后續(xù)新用戶注冊的處理。</p><p>  3.5.6 帖子回復(fù)ArticleBack-addInput.jsp頁面詳細功能及描述</p><p>  獲取帖子信息后進入ArticleBack-addInput.jsp,此頁面也是一個表單,用來獲取回

67、復(fù)帖子內(nèi)容。Action為ArticleBack-add,通過Struts對應(yīng)的ArticleBackAction的add()方法,進行增加回復(fù)帖子的處理。成功后轉(zhuǎn)入Article-detail.jsp頁面顯示新增的回復(fù)帖子。</p><p>  3.5.7 帖子刪除Article-delete.jsp頁面詳細功能及描述</p><p>  本頁面是點擊Article-list.jsp的

68、刪除鏈接,成功刪除后進入的頁面。只是提示刪除成功,并提供返回主頁的按鍵。本頁面只有管理員有權(quán)限進入,進入前有權(quán)限判斷。</p><p><b>  4 系統(tǒng)實現(xiàn)</b></p><p>  該系統(tǒng)采用Spring+Struts+Hibernate框架來構(gòu)建,其中Hibernate取代了原始的JDBC操作,并且Spring中對Bean的讀取來進行Hibernate中的

69、數(shù)據(jù)庫的級聯(lián)操作。</p><p>  4.1 游客注冊功能</p><p>  對于一般的游客,是只有瀏覽和下載文件的權(quán)限,無法發(fā)表文章和上傳文件。想要獲得這些權(quán)限,必須首先注冊成為用戶。在瀏覽器中輸入http://localhost:8080/BBSbysj/Board-list,即可進入論壇首頁。在此頁面中點擊文字“注冊”,便會彈出填寫用戶注冊信息表單的方框。表單中的信息包括必填的

70、信息有用戶名,密碼,確認密碼,郵箱。</p><p>  下面是注冊表單的JSP代碼:</p><p>  <div id="panell"></p><p>  <h5 class="head">注冊</h5></p><p>  <div class=&qu

71、ot;content"></p><p>  <s:form action="User-regist" name="form1" onsubmit=" return CheckSubmit1()" method="post"></p><p>  <s:textfield na

72、me="username" label="用戶名"/></p><p>  <s:password name="password" label="密碼 "/></p><p>  <s:password name="password2" label="驗

73、證密碼 "/></p><p>  <s:textfield name="email" label="郵箱" /></p><p>  <s:submit value="注冊"/></p><p><b>  </s:form></b>

74、;</p><p><b>  </div></b></p><p><b>  </div></b></p><p>  傳統(tǒng)的注冊都是以鏈接的形式進入另一個頁面,會浪費用戶的等待時間。為了有更好的用戶體驗,本論壇將注冊表單隱藏在首頁,游客點擊文字“注冊”后頁面自動彈出注冊表單的方框,由于不需跳轉(zhuǎn)

75、到別的頁面,所以運行速度更快。此功能利用Javascript框架之一jQuery來實現(xiàn)。下圖4-1,4-2演示的就是這一效果。</p><p><b>  圖4-1</b></p><p><b>  圖4-2</b></p><p>  外部引入jQuery必須庫:</p><p>  <s

76、cript type="text/javascript" src="JS/jquery.js"></script></p><p>  外部引入實現(xiàn)此功能的jQuery文件:</p><p>  <script type="text/javascript" src="JS/regist.js&qu

77、ot;></script></p><p>  regist.js里面實現(xiàn)此功能的代碼的主要代碼:</p><p>  $("#panell h5.head").toggle(function(){</p><p>  $(this).next().show();</p><p>  },function

78、(){</p><p>  $(this).next().hide();</p><p><b>  })</b></p><p>  為了防止游客不正當(dāng)操作,在注冊時對于表單的操作要求有:不能為空,確認密碼必須和密碼一致,郵箱要符合一般郵箱的規(guī)則,其中只有有一條不符合,JS都會報錯。JS主要代碼如下:</p><p>

79、  function chkEmail(str){</p><p>  return str.search(/[\w\-]{1,}@[\w\-]{1,}\.[\w\-]{1,}/)==0?true:false</p><p><b>  }</b></p><p>  function CheckSubmit1(){</p>&l

80、t;p>  if(form1.username.value=="")</p><p><b>  {</b></p><p>  alert("請輸入用戶名");</p><p>  return false;</p><p><b>  }</b>&l

81、t;/p><p>  if(form1.password.value=="")</p><p><b>  {</b></p><p>  alert("請輸入密碼");</p><p>  return false;</p><p><b>  }&

82、lt;/b></p><p>  if(form1.password2.value=="")</p><p><b>  {</b></p><p>  alert("請輸入確認密碼");</p><p>  return false;</p><p>

83、;<b>  }</b></p><p>  if(form1.password.value!=form1.password2.value)</p><p><b>  {</b></p><p>  alert("請確認輸入的密碼一樣");</p><p>  return f

84、alse;</p><p><b>  }</b></p><p>  else if(form1.email.value=="")</p><p><b>  {</b></p><p>  alert("請輸入email");</p><

85、;p>  return false;</p><p><b>  }</b></p><p>  else if(!chkEmail(form1.email.value))</p><p><b>  {</b></p><p>  alert("請?zhí)顚懹行У腅mail地址"

86、;);</p><p>  return false;</p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  為防止用戶名重復(fù)造成管理不便,如果用戶已存在,則頁面會提示錯誤信息:“用戶

87、名已經(jīng)存在”。</p><p><b>  主要代碼如下:</b></p><p>  UserDAOImpl.java部分:</p><p>  List<User> user=</p><p>  hibernateTemplate.find("from User u where u.user

88、name='"+username+"'");</p><p>  if(user!=null&&user.size()>0)</p><p><b>  {</b></p><p>  return true;</p><p><b>  }&

89、lt;/b></p><p>  return false;</p><p>  UserAction.java部分:</p><p>  if (userService.find(info.getUsername())) {</p><p>  this.addFieldError("name", "na

90、me is exist");</p><p>  return "registwrong";</p><p><b>  }</b></p><p>  Hibernate封裝的JDBC增加用戶操作:</p><p>  public String insert(User user) {&l

91、t;/p><p>  hibernateTemplate.save(user);</p><p>  return "success";</p><p><b>  }</b></p><p>  圖4-3,4-4分別是輸入郵箱不合規(guī)則,注冊用戶已經(jīng)存在的情況:</p><p>&

92、lt;b>  圖4-3</b></p><p><b>  圖4-4</b></p><p>  4.2 用戶登錄功能</p><p>  登錄表單需要輸入用戶的用戶名和注冊時的密碼,后臺驗證正確后方能跳轉(zhuǎn)到登錄成功的頁面。用戶名或密碼為空則會在直接在頁面上輸出提示信息:“用戶名或密碼不能為空“,如果用戶不存在或密碼錯誤則會

93、顯示錯誤信息:“用戶名或密碼錯誤”。對于登錄表單的處理和注冊表單一樣,先隱藏,點擊文字“登錄”后才顯示登錄表單的方框。以下是各個功能實現(xiàn)的主要代碼:</p><p><b>  隱藏與顯示部分:</b></p><p>  $("#panel h5.head").toggle(function(){</p><p>  $(

94、this).next().show();</p><p>  },function(){</p><p>  $(this).next().hide();</p><p><b>  })</b></p><p>  錯誤信息提示已經(jīng)登錄成功的處理和信息提示:</p><p>  UserActi

95、on.java</p><p>  public String login() {</p><p>  if (user.getUsername().equals("") && user.getPassword().equals("")) {</p><p>  req.setAttribute("m

96、sg", "用戶名或密碼不能為空");</p><p>  return "loginwrong";</p><p><b>  }</b></p><p>  user = userService.login(user.getUsername(), user.getPassword());&l

97、t;/p><p>  if (user != null) {</p><p>  boards = boardService.list();</p><p>  session.setAttribute("user", user);</p><p>  req.setAttribute("msg", &qu

98、ot;已經(jīng)登錄");</p><p>  return SUCCESS;</p><p><b>  } else</b></p><p>  req.setAttribute("msg", "用戶名或密碼有錯");</p><p>  return "logi

99、nwrong";</p><p><b>  }</b></p><p>  UserDAOImpl.java</p><p>  //判斷是否輸入的用戶是否存在于系統(tǒng)</p><p>  public User loadByName(String username) {</p><p>

100、;  List<User> user;</p><p>  user=hibernateTemplate.find("from User u where u.username=?",username);</p><p>  if(user!=null&&user.size()>0){</p><p>  retu

101、rn (User)user.get(0);</p><p><b>  }</b></p><p>  return null;</p><p><b>  }</b></p><p>  JSP頁面錯誤信息和登錄成功信息顯示:</p><p><b>  <

102、div></b></p><p>  你好 ${username}</p><p><b>  </div></b></p><p>  <div>${msg}</div></p><p>  登錄成功后,返回首頁,“注冊”和“登錄”部分被信息“已經(jīng)登錄”代替,并且在

103、首頁“歡迎來到BBS,你好”后面接著輸出用戶名。如圖4-5:</p><p><b>  圖4-5</b></p><p>  4.3 游客的操作</p><p>  4.3.1 瀏覽論壇的所有版塊</p><p>  在訪問論壇首頁后立即就可以看到論壇的所有的版塊,任何人有權(quán)限點擊版塊名稱的鏈接進入相應(yīng)的版塊瀏覽里

104、面的帖子。在Board-list.jsp頁面用struts標簽結(jié)合HTML的table標簽輸出用戶建立的版塊。代碼如下:</p><p><b>  <tr></b></p><p>  <%int i=0; %></p><p>  <s:iterator value="boards" var

105、="b" ></p><p><b>  <td></b></p><p>  <a href="Article-list?boardid=<s:property value="#b.id"/>&pageNo=1 "><s:property value=

106、"#b.boardname"/>|</a></p><p><b>  </td></b></p><p><b>  <%i++;</b></p><p><b>  if(i>2){</b></p><p>  

107、out.print("<tr/><tr>");</p><p><b>  i=0;</b></p><p><b>  }%></b></p><p>  </s:iterator></p><p><b>  業(yè)務(wù)處理:&l

108、t;/b></p><p>  boards=hibernateTemlate.find("from Board ");</p><p><b>  圖4-6</b></p><p>  4.3.2 瀏覽論壇帖子的信息</p><p>  進入某個版塊后,版塊里所有的帖子的會這里顯示。當(dāng)帖子的

109、數(shù)量超過一定數(shù)量時,會自動分頁。帖子按發(fā)帖的時間的早晚排序,最新的帖子總是出現(xiàn)在最前面的位置,最早的發(fā)帖會被置于末頁。在帖子列表(Article-list.jsp)頁面顯示的信息有帖子的標題,點擊數(shù),發(fā)表時間,發(fā)帖的用戶昵稱。主要代碼:</p><p>  Article-list.jsp</p><p>  <tr height="50" bgcolor=&qu

110、ot;yellow"><td width="59%">標題</td><td width="6%">點擊</td><td width="17%">時間</td><td width="18%">發(fā)帖人</td></tr> </p>

111、;<p>  <s:iterator value="pager.resultList" var="c" ></p><p><b>  <tr></b></p><p>  <td><a href="Article-detail?id=<s:property

112、 value="#c.id"/>&username=<%=username %>"></p><p>  <s:property value="#c.title"/></p><p><b>  </a></td></b></p><

113、;p>  <td><s:property value="#c.readcount"/></td></p><p>  <td><s:property value="#c.createtime"/></td></p><p>  <td><s:propert

114、y value="#c.user.username"/></p><p><b>  如圖4-7:</b></p><p><b>  圖4-8</b></p><p>  對于帖子的詳細信息,要點擊帖子標題鏈接進入帖子詳細信息(Article-detail.jsp)瀏覽頁面,包括的信息:帖子標題

115、,帖子內(nèi)容,帖子創(chuàng)建時間,帖子創(chuàng)建者,回復(fù)數(shù),該帖子的回貼。</p><p>  對主帖的回復(fù)帖子的信息包括回帖的內(nèi)容,時間和回帖人。</p><p>  另外在帖子列表和帖子詳細信息頁面上還有顯示信息:帖子的記錄總數(shù),總頁數(shù)。鏈接:首頁,上一頁,下一頁,末頁。下面是JSP分頁顯示的部分代碼:</p><p><b>  <TR></b&

116、gt;</p><p>  <TD align="center"></p><p>  <s:text name="記錄總數(shù):" /><s:property value="pager.rowCount" /></p><p>  <s:text name="

117、;總頁數(shù):" /><s:property value="pager.pageCount" /></p><p><b>  </TD></b></p><p>  <TD align="right"></p><p>  <%Pager pager

118、=(Pager)request.getAttribute("pager"); %></p><p>  <a href="Article-detail?id=<s:property value="article.id"/>&pageNo=<%=pager.getFirstPageNo() %> "><

119、;s:text name="首頁" /></a></p><p>  <a href="Article-detail?id=<s:property value="article.id"/>&pageNo=<%=pager.getPrePageNo() %> "><s:text name=

120、"上一頁" /></a></p><p>  <a href="Article-detail?id=<s:property value="article.id"/>&pageNo=<%=pager.getNextPageNo() %> "><s:text name="下一頁&q

121、uot; /></a></p><p>  <a href="Article-detail?id=<s:property value="article.id"/>&pageNo=<%=pager.getLastPageNo() %> "><s:text name="末頁" />&l

122、t;/a></p><p><b>  </TD></b></p><p>  <TD width="20"></TD></p><p><b>  </TR></b></p><p><b>  </TABL

123、E></b></p><p>  控制層處理的部分代碼:</p><p>  List<Article> lists=articleService.list(board,pageNo);</p><p>  pager=new Pager(5, pageNo, articles.size(), lists);</p>&l

124、t;p>  req.setAttribute("pager", pager);</p><p>  List<ArticleBack> lists=articlebackService.detail(article,pageNo);</p><p>  pager=new Pager(5, pageNo, articlebacks.size(), li

125、sts);</p><p>  req.setAttribute("pager", pager);</p><p>  業(yè)務(wù)層處理的部分代碼</p><p>  public List<Article> list(final Board board, final int pageNo) {</p><p>  

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論