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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

4、所有舊映射文件——一切都會(huì)按照您的想法來(lái)定義——注釋直接嵌入到您的Java類(lèi)中,并提供一種強(qiáng)大及靈活的方法來(lái)聲明持久性映射.本文首先討論了Struts2、Spring2和Hibernate基礎(chǔ)及其相關(guān)技術(shù),包括各個(gè)架構(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ò)論壇詳細(xì)設(shè)計(jì)5</p><p>  3.1 需求分析5</p><p>  3.2

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

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

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

12、;p>  4.2 用戶(hù)登錄功能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 普通用戶(hù)的操作20<

13、;/p><p>  4.4.1 用戶(hù)信息的修改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 開(kāi)發(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ù)庫(kù)27</p><p>  5.5 Log4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

44、gt;</p><p>  各個(gè)實(shí)體類(lèi)之間的關(guān)系圖:</p><p>  利用Hibernate的注解生成相應(yīng)的表格及表格之間的級(jí)聯(lián)關(guān)系。一下是Article類(lèi)和User,ArticleBack類(lèi)的部分代碼:</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ù)庫(kù)選擇。MySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),使用Hibernate的注解和配置<property name="hibernate.hbm2ddl.auto">true</property>自動(dòng)建表,用SQ

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

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

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

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

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

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

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

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

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

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

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

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

70、信息有用戶(hù)名,密碼,確認(rèn)密碼,郵箱。</p><p>  下面是注冊(cè)表單的JSP代碼:</p><p>  <div id="panell"></p><p>  <h5 class="head">注冊(cè)</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="用戶(hù)名"/></p><p>  <s:password name="password" label="密碼 "/></p><p>  <s:password name="password2" label="驗(yàn)

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

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

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

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

77、ot;></script></p><p>  regist.js里面實(shí)現(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)操作,在注冊(cè)時(shí)對(duì)于表單的操作要求有:不能為空,確認(rèn)密碼必須和密碼一致,郵箱要符合一般郵箱的規(guī)則,其中只有有一條不符合,JS都會(huì)報(bào)錯(cuò)。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("請(qǐng)輸入用戶(hù)名");</p><p>  return false;</p><p><b>  }</b>&l

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

82、lt;/b></p><p>  if(form1.password2.value=="")</p><p><b>  {</b></p><p>  alert("請(qǐng)輸入確認(rèn)密碼");</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("請(qǐng)確認(rèn)輸入的密碼一樣");</p><p>  return f

84、alse;</p><p><b>  }</b></p><p>  else if(form1.email.value=="")</p><p><b>  {</b></p><p>  alert("請(qǐng)輸入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("請(qǐng)?zhí)顚?xiě)有效的Email地址"

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

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增加用戶(hù)操作:</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ī)則,注冊(cè)用戶(hù)已經(jīng)存在的情況:</p><p>&

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

93、顯示錯(cuò)誤信息:“用戶(hù)名或密碼錯(cuò)誤”。對(duì)于登錄表單的處理和注冊(cè)表單一樣,先隱藏,點(diǎn)擊文字“登錄”后才顯示登錄表單的方框。以下是各個(gè)功能實(shí)現(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>  錯(cuò)誤信息提示已經(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", "用戶(hù)名或密碼不能為空");</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", "用戶(hù)名或密碼有錯(cuò)");</p><p>  return "logi

99、nwrong";</p><p><b>  }</b></p><p>  UserDAOImpl.java</p><p>  //判斷是否輸入的用戶(hù)是否存在于系統(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頁(yè)面錯(cuò)誤信息和登錄成功信息顯示:</p><p><b>  <

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

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

104、面的帖子。在Board-list.jsp頁(yè)面用struts標(biāo)簽結(jié)合HTML的table標(biāo)簽輸出用戶(hù)建立的版塊。代碼如下:</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>  進(jìn)入某個(gè)版塊后,版塊里所有的帖子的會(huì)這里顯示。當(dāng)帖子的

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

110、ot;yellow"><td width="59%">標(biāo)題</td><td width="6%">點(diǎn)擊</td><td width="17%">時(shí)間</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>  對(duì)于帖子的詳細(xì)信息,要點(diǎn)擊帖子標(biāo)題鏈接進(jìn)入帖子詳細(xì)信息(Article-detail.jsp)瀏覽頁(yè)面,包括的信息:帖子標(biāo)題

115、,帖子內(nèi)容,帖子創(chuàng)建時(shí)間,帖子創(chuàng)建者,回復(fù)數(shù),該帖子的回貼。</p><p>  對(duì)主帖的回復(fù)帖子的信息包括回帖的內(nèi)容,時(shí)間和回帖人。</p><p>  另外在帖子列表和帖子詳細(xì)信息頁(yè)面上還有顯示信息:帖子的記錄總數(shù),總頁(yè)數(shù)。鏈接:首頁(yè),上一頁(yè),下一頁(yè),末頁(yè)。下面是JSP分頁(yè)顯示的部分代碼:</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、;總頁(yè)數(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="首頁(yè)" /></a></p><p>  <a href="Article-detail?id=<s:property value="article.id"/>&pageNo=<%=pager.getPrePageNo() %> "><s:text name=

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

121、uot; /></a></p><p>  <a href="Article-detail?id=<s:property value="article.id"/>&pageNo=<%=pager.getLastPageNo() %> "><s:text name="末頁(yè)" />&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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論