

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 本科畢業(yè)設計(論文)</p><p><b> (二零 屆)</b></p><p> 一個簡單網絡論壇系統(tǒng)的設計與實現</p><p> 所在學院 </p><p> 專業(yè)班級 計算機科學與技術 </p&
2、gt;<p> 學生姓名 學號 </p><p> 指導教師 職稱 </p><p> 完成日期 年 月 </p><p> 摘要:Java技術隨著Internet的迅猛發(fā)展,已經成為軟件業(yè)的主流技術。為了編碼的規(guī)范
3、化和標準化,各種框架技術不斷涌現出來,其中最有名的是Struts2、Spring和Hibernate。Struts2.0版本是在2007年推出的全新框架,它改進了Strutsl的一些主要不足。Struts2比Strutsl更加簡單,更加靈活,例如它取消了ActionForm組件、支持OGNL語言,支持多種視圖技術,如JSP,FreeMarker,等。Hibernate3借助新的Hibernate Annotation庫,即可一次性地分配
4、所有舊映射文件——一切都會按照您的想法來定義——注釋直接嵌入到您的Java類中,并提供一種強大及靈活的方法來聲明持久性映射.本文首先討論了Struts2、Spring2和Hibernate基礎及其相關技術,包括各個架構的關鍵支撐技術。最后在BBS論壇系統(tǒng)中應用了Struts2、Spring和Hibernate整合技術。</p><p> 關鍵字: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 基本技術介紹2</p><p> 3 網絡論壇詳細設計5</p><p> 3.1 需求分析5</p><p> 3.2
9、 總體設計5</p><p> 3.3 實體類設計與實現6</p><p> 3.4 網絡論壇的基本流程9</p><p> 3.5 網絡論壇各頁面功能10</p><p> 3.5.1 網絡論壇首頁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 網絡論壇用戶登錄User-login.jsp頁面詳細功能及描述10</p><p> 3.5.5 網上論壇注冊User-regist.jsp頁面詳細功能及描述1
11、0</p><p> 3.5.6 帖子回復ArticleBack-addInput.jsp頁面詳細功能及描述10</p><p> 3.5.7 帖子刪除Article-delete.jsp頁面詳細功能及描述11</p><p> 4 系統(tǒng)實現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 回復帖子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數據庫27</p><p> 5.5 Log4
15、j27</p><p><b> 6 總結28</b></p><p> 致謝錯誤!未定義書簽。</p><p><b> 參考文獻29</b></p><p><b> 1 緒論</b></p><p> 網絡論壇專業(yè)叫法叫做BB
16、S,是用戶可以交換信息的系統(tǒng),各地的用戶都可以通過本地的業(yè)余BBS站與遠在異地的網友互通信息。</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年,隨著計算機及其外設的大幅降價,BBS才逐漸被人們知道。但是之后便以驚人的速度發(fā)展。國內的BBS系統(tǒng)大致分兩類:一類是有商業(yè)性質的。一般是有大公司建立,人們利用其交流對商品的看法,解決商品的使用等問題。一類是個人或小型集體建立的。有商業(yè)性質的BBS要繳納一筆費用,而非商業(yè)性質的網絡論壇一般都有志愿者開發(fā),他們推動了中國計算機網絡的健康
18、發(fā)展,為廣大網友提供信息交流的平臺。</p><p> 隨著BBS系統(tǒng)的發(fā)展,國內已經出現了一些多線站,一次可以允許多個用戶同時訪問,解決了多人同時撥號一個站臺發(fā)生沖突的問題。隨著WEB2.0時代的到來,BBS將朝著以下兩個方面發(fā)展:(1)BBS論壇系統(tǒng)將朝著即時性方面發(fā)展。使論壇成員在不用刷新頁面時就可以看到別人剛剛發(fā)的帖子。(2)BBS論壇系統(tǒng)也將朝著圖形化方向發(fā)展。通過外形的不同來區(qū)分不同社區(qū)的朋友而不是
19、通過ID。</p><p><b> 2 基本技術介紹</b></p><p> 本次論壇將采用Java程序語言后臺開發(fā),整合Hibernate,Struts2,Spring應用框架,使用JSP作為前臺頁面的實現,采用jQuery和Javascript技術進行前臺開發(fā),MYSQL作為數據庫系統(tǒng),Tomcat作為服務器,將實現一個提供大家交流的系統(tǒng),使用戶可以充分
20、交流自己的知識,看法,經驗。</p><p> MVC設計模式。MVC設計模式將應用程序分為模型,視圖,控制器三個部分,按照模型層,視圖層,控制層進行分解,從而使得整個系統(tǒng)責任明確、接口清晰,加快了設計開發(fā)過程。模型層就是指業(yè)務邏輯的處理和數據儲存。它分為兩層:業(yè)務邏輯模型和數據模型。模型接收視圖的數據,并返回最終的處理結果。數據模型是指對數據的持久化,它是線路對視圖和模型的交換的支持。實現時把“做什么”和“怎
21、么做”分離,這樣可以實現業(yè)務邏輯的重用。視圖層主要用來展現用戶所需的數據,他是用戶和系統(tǒng)進行交互的界面,這部分工作一般可以由美工人員進行開發(fā)和維護,一般可以采用HTML頁面,JSP等技術。一般來說,視圖只接收來自模型的數據并顯示給用戶,以及將用戶界面的輸入數據和請求傳遞給控制和模型。MVC設計模式對于視圖的處理僅是視圖的采集和處理,以及用戶的請求而視圖上業(yè)務的處理,業(yè)務流程的處理和狀態(tài)的改變交個模型層來處理。視圖部分大致的處理流程是:頁
22、面模板定義布局,視圖標簽的具體內容,而頁面布局初始化并加載頁面。用戶部件提交參數,通過表示層的校驗,將數據提交給業(yè)務實體,即模型??刂茖邮且粋€分發(fā)器,選擇什么樣的模型,選擇什么樣的視圖,可以完成</p><p> Hibernate的JDBC封裝和注釋簡介。本次網絡論壇的開發(fā)將使用這些目前廣泛運用的開發(fā)技術。利用Hibernate對JDBC進行了非常輕量級的對象封裝,避免去寫使用JDBC連接數據庫的重復的代碼和
23、SQL語句,可以使用面向對象的思維來對數據庫進行增刪改查等操作。傳統(tǒng)的Hibernate的配置依賴于外部XML文件,數據庫映射是啟動時加載XML映射 文件進行的。這需要寫大量的Hibernate映射文件。Hibernate注釋巧妙的借助Hibernate Annotation庫,講一切的映射關系一注釋的形式嵌入到Java類中,強大而且靈活。Hibernate核心接口[2]:Session接口。Session接口負責執(zhí)行被持久化對象的CR
24、UD操作(CRUD的任務是完成與數據庫的交流,包含了很多常見的SQL語句。SessionFactory接口。SessionFactory接口負責初始化Hibernate。它充當數據存儲源的代理,并負責創(chuàng)建Session對象。一個項目通常只需要一個SessionFactory就夠,當需要操作多個數據庫時,可以為每個數據庫指定一個SessionFactory。C</p><p> Struts簡介。利用Struts
25、2接受客戶端的參數,根據請求的參數轉發(fā)請求給適當的控制器,來控制視圖的轉發(fā),是結構層次分明,可重用性高。Struts的作用避免了在JSP頁面當中寫太多的代碼,做到保持JSP的界面整潔,同時可以實現MVC模式,Struts的根本作用就是方便以后對程序的修改。在視圖層可以使用JSP及其標簽外,Struts2也提供了強大的標簽庫。在模型層,Struts提供Action對象,來管理業(yè)務邏輯的調用實現分離邏輯業(yè)務。Struts通過配置struts
26、.xml很條理地幫你實現了上述事情,減輕了很多工作量,Strust2在Struts1的基礎上,增加了很多東西,標簽庫進行了擴充,實現上傳下載文件非常方便等等[3]。</p><p> Spring簡介。Spring AOP模塊為基于Spring的應用程序中的對象提供了事務管理服務,Spring則完全是一種架構型的框架了,它不屬于J2EE應用中的任何一個層,但它提供了對象依賴注入的思想,并且為每個層中遇到的實際問
27、題提供了大量現成的模板類,使用這些模板類的方法很easy,大多數情況下只需要你在配置文件里配置一下就可以實現諸如事務管理或安全性控制這樣的復雜問題。Spring通過一種稱作控制反轉的技術。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創(chuàng)建或者查找依賴對象。Spring提供了面向切面的豐富支持,允許通過分離應用的業(yè)務邏輯操作與系統(tǒng)操作。應用對象只實現它們應該做的——完成業(yè)務邏輯——僅此而已。它們并不負責
28、(甚至是意識)其它的系統(tǒng)級關注點,例如日志或事務支持。通過使用 Spring AOP,Hibernate的增刪改查之前開session,和之后的關閉session交給了Spring,減少了程序員的工作量并且并與維護[4]。</p><p> JSP簡介。Java EE環(huán)境中的JSP API是一個服務器端的腳本。JSP提供了一個被嵌入到HTML的Java語言片段,達到與服務器交互的目的[5]。</p>
29、<p> Javascript與jQuery簡介。JavaScript被設計用來向HTML頁面添加交互行為,是一種腳本語言(腳本語言是一種輕量級的編程語言)。在HTML基礎上,使用Javascript可以開發(fā)交互式WEB網頁。Javascript的出現使得網頁和用戶之間實現了一種實時性的、動態(tài)的、交互性的關系,使網頁包含更多活躍的元素和更加精彩的內容。jQuery是輕量級Javascript腳本庫,熟悉使用jQuery可
30、以很容易寫出兼容各種瀏覽器的頁面[6]。jQuery使用戶能更方便地處理HTML documents、events、實現動畫效果,并且方便地為網站提供AJAX交互。</p><p> 本次網絡論壇系統(tǒng)使用Struts2負責MVC模式里的“C”,控制業(yè)務邏輯層與表現層的交互,調用業(yè)務邏輯層,并將業(yè)務數據返回給表現層表現。實現本網絡論壇的業(yè)務邏輯層以DAO層為基礎,通過DAO組件的包裝,完成系統(tǒng)所需要的業(yè)務邏輯。而
31、DAO層負責與持久化對象交互。該層封裝了數據的增刪改查等操作。DAO模式需要為每個DAO組件編寫DAO接口,同時至少提供一個實現類,根據不同的需要,可能有多個實現類。用Spring容器代替DAO 工廠,完全避免了使用工廠模式,因為Spring本身是個非常強大的工廠,可以讓Spring充當DAO工廠。無需程序員自己實現工廠模式,只需將DAO組件配置在Spring容器中,由ApplicationContext負責DAO組件的創(chuàng)建即可。借助于
32、Spring提供的依賴注入,其他組件甚至不用訪問工廠,一樣可以直接使用DAO實例。本系統(tǒng)采用B/S三層結構,使用JSP技術進行動態(tài)頁面設計,運用JavaBean對程序的關鍵代碼進行分裝,如對實現分頁功能的代碼進行分裝。用Javascript,Struts技術實現對注冊,登錄失敗時的反饋信息。使用Tomcat作為WEB服務器,My</p><p> 3 網絡論壇詳細設計</p><p>
33、<b> 3.1 需求分析</b></p><p> 網絡論壇系統(tǒng)主要是實現網上自由發(fā)言,回復等功能的系統(tǒng)。一個典型的網絡論壇一</p><p> 般都需要實現帖子信息的正確顯示、具體帖子的內容以及對某個帖子的多個回復、客戶信息注冊登錄管理、帖子處理等模塊[8]。</p><p> 根據網絡論壇的基本需求,本系統(tǒng)需要完成的具體任務如下
34、:</p><p> 帖子顯示及瀏覽: 當用戶進入論壇系統(tǒng)時,應該在主頁面中看到分頁效果后的信息</p><p> 以供用戶瀏覽。點擊某個帖子鏈接,可以進入瀏覽帖子詳細信息以及對該帖子的回復信息。</p><p> 2. 帖子管理:當用戶的發(fā)言不夠合體時,帶有管理權限的用戶可以刪除信息不良的帖子。</p><p> 3. 用戶發(fā)言
35、:注冊成為會員并成功登錄的用戶,可以發(fā)帖分享自己的信息。</p><p> 4. 用戶回復:注冊成為會員并成功登錄的用戶,可以對感興趣的帖子進行回復</p><p> 5. 用戶注冊及登錄:為了能夠與其他用戶進行互動,需要注冊。根據注冊時提供的用</p><p> 戶名和密碼進行登錄。</p><p> 6. 用戶信息更改:成為
36、會員的用戶隨時可以修改自己的個人信息,比如登錄密碼。</p><p> 7. 版塊管理:為帖子分類。用戶選擇相應的版塊進入之后發(fā)帖,瀏覽帖子信息。管理員有增加和刪除版塊的權限。用戶有增加版塊的權限。</p><p> 8. 資源分享:為了加強信息的交流,讓用戶通過此論壇可以學習和獲得更多的資料,次論壇特別增添了文件上傳和下載模塊。為了保證信息的安全,只有注冊成會員的用戶才能上傳資料
37、。同時為了讓用戶可以更方便的獲取資源,即使是非用戶,也可以通過這個論壇下載需要的文件資源。</p><p><b> 3.2 總體設計</b></p><p> 系統(tǒng)組成.下表中給出了構成網絡論壇的各個組件,通過下表,可以從宏觀上了解各個組件的功能。Service層是你的系統(tǒng)的業(yè)務邏輯體現,一個Service,應該是在有必要跨多DAO操作,或者需要事務時才被調用
38、。DAO只應該針對直接的對數據庫的CRUD操作,然后返回操作結果,不應該有別的邏輯,這樣才不會破壞層次。只有DAO是可以寫出通用的來減少重復代碼,因為數據庫只有CRUD四種操作。</p><p> 3.3 實體類設計與實現</p><p> 實體類的實現在包com.cqs.bysj.bbs2011.model下處理。設計如下:</p><p> User(用
39、戶),擁有的屬性有:id(用戶ID),username(用戶名),password(用戶密碼),email(用戶EMAIL),tagManager(管理員標志);</p><p> 2. Article(貼子), 擁有的屬性有:id(貼子ID),title(標題),recount(回復數量),read(點擊次數),content(貼子內容),createtime(貼子書寫時間),user(用戶),board(
40、版塊),articlebacks(回復該貼的帖子);</p><p> 3. ArticleBack(帖子回復), 擁有的屬性有:id(帖子ID),content(內容),backDate(回復時間,user(回復的用戶),article(回復的帖子);</p><p> 4. Board(版塊信息), 擁有的屬性有: id(版塊ID),boardname(版塊名稱),articl
41、es(該板塊擁有的帖);</p><p> 5. FileEntity(上傳的文件), 擁有的屬性有:id(文件ID),describe(對該文件的描述),filename(文件的名稱),fileContentType(文件類型),username(上傳者)。</p><p> 創(chuàng)建數據表采用hibernate的annotation字段映射來實現。先寫好java實體類,利了</
42、p><p> hibernate注解的方式設定表結構,主鍵和主鍵的自動增長的生成方式,生成各個表的主鍵關聯。這樣即采用了一種先建立實體類,在實體類的基礎上生成數據庫里的表格,省去了花時間去編寫SQL語句去建立表格(雖然說現在建立表格多半已經不必寫SQL語句)。傳統(tǒng)的做法是先在數據庫里建立表格,然后再表格的基礎上建立實體類。兩種做法各有都是設計系統(tǒng)的方法,或許傳統(tǒng)的方法更好,畢竟經受了時間的考驗,這個系統(tǒng)我嘗試了先寫
43、實體類然后讓hibernate去生成表格的方法。</p><p> 如下設立主鍵和主鍵增長方式代碼:</p><p> @Id@GeneratedValue</p><p> public int getId() {</p><p> return id;</p><p><b> }</b&
44、gt;</p><p> 各個實體類之間的關系圖:</p><p> 利用Hibernate的注解生成相應的表格及表格之間的級聯關系。一下是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> 數據庫選擇。MySQL是一個小型關系型數據庫管理系統(tǒng),使用Hibernate的注解和配置<property name="hibernate.hbm2ddl.auto">true</property>自動建表,用SQ
58、L語言建立名為"BBSBYSJ"的數據庫。所有的數據庫中的數據都存儲在表中。</p><p> 3.4 網絡論壇的基本流程</p><p> 網絡論壇在運行過程中頁面的基本流程如下圖:</p><p> 管理員管理基本流程如下圖:</p><p> 3.5 網絡論壇各頁面功能</p><p&
59、gt; 3.5.1 網絡論壇首頁Article-list.jsp詳細功能及描述</p><p> 獲取帖子基本信息集合,循環(huán)顯示圖書分類信息,顯示的信息為帖子的標題,發(fā)帖的用戶,發(fā)帖的時間。在帖子標題里設置超級鏈接,傳入該帖子的ID作為參數,點擊可以進入顯示該帖子具體信息的頁面。</p><p> 通過在瀏覽器輸入Article-list,在Struts配置文件里配置相應的acti
60、on,經ArticleAction的list()方法處理,從而轉發(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> 本頁面是在控制器響應了網上論壇主頁提交的查看帖子詳細信息請求,即“Article-detail”請求后,跳轉到的頁面。在該頁面中通過Struts標簽將獲取到的指定帖子詳細信息顯示出來,包括用戶的標題,內容,發(fā)帖用戶,發(fā)
62、帖時間等。同時如果該帖子已有回復的帖子,對應的帖子回復也會在該頁面顯示。同時點擊回復鏈接提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配置文件找到相應ArticleAction的add()方法,再轉發(fā)到
64、相應的Article-add.jsp頁面。</p><p> 3.5.4 網絡論壇用戶登錄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 網上論壇注冊User-regist.jsp頁面詳細功能及描述</p><p> 提交新用戶注冊請求,同時提交新用戶注冊信息的表單。提交注冊用戶姓名、地址、電子郵件地址、電話、用戶名、密碼以及確認密碼的表單元素。注冊按鈕。在本頁面中注
66、冊用戶可以在表單中輸入對應的注冊信息,在單擊“注冊”按鈕后,將提交“User-regist.”請求,同時提交新用戶的相關注冊信息,以便于進行后續(xù)新用戶注冊的處理。</p><p> 3.5.6 帖子回復ArticleBack-addInput.jsp頁面詳細功能及描述</p><p> 獲取帖子信息后進入ArticleBack-addInput.jsp,此頁面也是一個表單,用來獲取回
67、復帖子內容。Action為ArticleBack-add,通過Struts對應的ArticleBackAction的add()方法,進行增加回復帖子的處理。成功后轉入Article-detail.jsp頁面顯示新增的回復帖子。</p><p> 3.5.7 帖子刪除Article-delete.jsp頁面詳細功能及描述</p><p> 本頁面是點擊Article-list.jsp的
68、刪除鏈接,成功刪除后進入的頁面。只是提示刪除成功,并提供返回主頁的按鍵。本頁面只有管理員有權限進入,進入前有權限判斷。</p><p><b> 4 系統(tǒng)實現</b></p><p> 該系統(tǒng)采用Spring+Struts+Hibernate框架來構建,其中Hibernate取代了原始的JDBC操作,并且Spring中對Bean的讀取來進行Hibernate中的
69、數據庫的級聯操作。</p><p> 4.1 游客注冊功能</p><p> 對于一般的游客,是只有瀏覽和下載文件的權限,無法發(fā)表文章和上傳文件。想要獲得這些權限,必須首先注冊成為用戶。在瀏覽器中輸入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)的注冊都是以鏈接的形式進入另一個頁面,會浪費用戶的等待時間。為了有更好的用戶體驗,本論壇將注冊表單隱藏在首頁,游客點擊文字“注冊”后頁面自動彈出注冊表單的方框,由于不需跳轉
75、到別的頁面,所以運行速度更快。此功能利用Javascript框架之一jQuery來實現。下圖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> 外部引入實現此功能的jQuery文件:</p><p> <script type="text/javascript" src="JS/regist.js&qu
77、ot;></script></p><p> regist.js里面實現此功能的代碼的主要代碼:</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> 為了防止游客不正當操作,在注冊時對于表單的操作要求有:不能為空,確認密碼必須和密碼一致,郵箱要符合一般郵箱的規(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> 為防止用戶名重復造成管理不便,如果用戶已存在,則頁面會提示錯誤信息:“用戶
87、名已經存在”。</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ī)則,注冊用戶已經存在的情況:</p><p>&
92、lt;b> 圖4-3</b></p><p><b> 圖4-4</b></p><p> 4.2 用戶登錄功能</p><p> 登錄表單需要輸入用戶的用戶名和注冊時的密碼,后臺驗證正確后方能跳轉到登錄成功的頁面。用戶名或密碼為空則會在直接在頁面上輸出提示信息:“用戶名或密碼不能為空“,如果用戶不存在或密碼錯誤則會
93、顯示錯誤信息:“用戶名或密碼錯誤”。對于登錄表單的處理和注冊表單一樣,先隱藏,點擊文字“登錄”后才顯示登錄表單的方框。以下是各個功能實現的主要代碼:</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> 錯誤信息提示已經登錄成功的處理和信息提示:</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;已經登錄");</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> 登錄成功后,返回首頁,“注冊”和“登錄”部分被信息“已經登錄”代替,并且在
103、首頁“歡迎來到BBS,你好”后面接著輸出用戶名。如圖4-5:</p><p><b> 圖4-5</b></p><p> 4.3 游客的操作</p><p> 4.3.1 瀏覽論壇的所有版塊</p><p> 在訪問論壇首頁后立即就可以看到論壇的所有的版塊,任何人有權限點擊版塊名稱的鏈接進入相應的版塊瀏覽里
104、面的帖子。在Board-list.jsp頁面用struts標簽結合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è)務處理:&l
108、t;/b></p><p> boards=hibernateTemlate.find("from Board ");</p><p><b> 圖4-6</b></p><p> 4.3.2 瀏覽論壇帖子的信息</p><p> 進入某個版塊后,版塊里所有的帖子的會這里顯示。當帖子的
109、數量超過一定數量時,會自動分頁。帖子按發(fā)帖的時間的早晚排序,最新的帖子總是出現在最前面的位置,最早的發(fā)帖會被置于末頁。在帖子列表(Article-list.jsp)頁面顯示的信息有帖子的標題,點擊數,發(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、,帖子內容,帖子創(chuàng)建時間,帖子創(chuàng)建者,回復數,該帖子的回貼。</p><p> 對主帖的回復帖子的信息包括回帖的內容,時間和回帖人。</p><p> 另外在帖子列表和帖子詳細信息頁面上還有顯示信息:帖子的記錄總數,總頁數。鏈接:首頁,上一頁,下一頁,末頁。下面是JSP分頁顯示的部分代碼:</p><p><b> <TR></b&
116、gt;</p><p> <TD align="center"></p><p> <s:text name="記錄總數:" /><s:property value="pager.rowCount" /></p><p> <s:text name="
117、;總頁數:" /><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è)務層處理的部分代碼</p><p> public List<Article> list(final Board board, final int pageNo) {</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一個簡單網絡論壇系統(tǒng)的設計與實現【畢業(yè)設計+開題報告+文獻綜述】
- 一個簡單網絡論壇的設計與實現【文獻綜述】
- 一個簡單網絡論壇的設計與實現【開題報告】
- 畢業(yè)設計---一個網絡管理系統(tǒng)的安裝與調試
- 畢業(yè)設計---論壇系統(tǒng)的設計與實現
- 畢業(yè)論文—— 一個簡單的網上教務系統(tǒng)模型的設計與實現
- 畢業(yè)設計——論壇系統(tǒng)的設計與實現
- 一個網絡測量系統(tǒng)的設計與實現.pdf
- 一個網絡報稅系統(tǒng)的設計與實現.pdf
- 畢業(yè)設計----論壇的設計與實現
- 畢業(yè)設計---網絡bbs論壇系統(tǒng)
- 課程設計一個簡單的網絡聊天程序
- 畢業(yè)設計---網絡論壇設計
- 設計一個簡單的陷波器 畢業(yè)論文
- 一個支持簡單語義的Mashup平臺的設計與實現.pdf
- 校園論壇的設計與實現 畢業(yè)設計
- 畢業(yè)設計---校園論壇的設計與實現
- 畢業(yè)設計--討論區(qū)bbs論壇系統(tǒng)的設計與實現
- asp一個簡單的網上教務系統(tǒng)模型的設計與實現(源代碼+論文)
- asp一個簡單的網上教務系統(tǒng)模型的設計與實現(源代碼+論文)
評論
0/150
提交評論