網(wǎng)絡聊天室系統(tǒng)設計實現(xiàn)分析_第1頁
網(wǎng)絡聊天室系統(tǒng)設計實現(xiàn)分析_第2頁
網(wǎng)絡聊天室系統(tǒng)設計實現(xiàn)分析_第3頁
網(wǎng)絡聊天室系統(tǒng)設計實現(xiàn)分析_第4頁
網(wǎng)絡聊天室系統(tǒng)設計實現(xiàn)分析_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、-. z. -. -可修編- .科研訓練網(wǎng)絡聊天室系統(tǒng)設計與實現(xiàn)Design and implementation of network chat room system學生*專業(yè)軟件工程*1305*指導教師* 祝*學院計算機科學技術學院二一六年六月-. z.起止周1719周數(shù)3實習地點計算機學院專業(yè)實驗室南區(qū)研1213選題自選實習目的:培養(yǎng)學生未來進入職場的素質,以及企業(yè)級行業(yè)解決方案系統(tǒng)的分析、設計、實現(xiàn)等企業(yè)級綜合應用能力。主要任務通過工程開發(fā)培養(yǎng)學生的職業(yè)素質,按照軟件工程的思想,訓練學生掌握面向對象分析/設計(UML 建模)、編碼規(guī)、概要設計方法、詳細設計方法、模塊劃分方法等技能;培

2、養(yǎng)學生的編程思想和根本工作技能,培養(yǎng)學生的編程能力。實習要求:要求學生能掌握軟件開發(fā)的根本能力,具有工程開發(fā)的實際經(jīng)歷,按照專業(yè)方向或本人就業(yè)方向選擇一個工程進展實際開發(fā),能熟練運用常用的程序設計語言和開發(fā)工具,完成整個開發(fā)過程。實習容及進度安排:每個同學的課題的主要研究容,完成的主要功能、按周完成的工作總計3周,每周具體完成的容要寫清楚指導教師評語:成績:指導教師/帶隊教師簽字 2016年 6月日-. z.目錄TOC o 1-3 h u HYPERLINK l _Toc19969 一、引言 PAGEREF _Toc19969 1 HYPERLINK l _Toc18243 二、需求分析 PA

3、GEREF _Toc18243 1 HYPERLINK l _Toc318 2.1 系統(tǒng)運行環(huán)境需求 PAGEREF _Toc318 1 HYPERLINK l _Toc23798 2.2 模塊功能分析 PAGEREF _Toc23798 1 HYPERLINK l _Toc31745 2.3系統(tǒng)功能構造 PAGEREF _Toc31745 3 HYPERLINK l _Toc23228 2.4系統(tǒng)數(shù)據(jù)流圖 PAGEREF _Toc23228 3 HYPERLINK l _Toc21419 頂層數(shù)據(jù)流圖 PAGEREF _Toc21419 3 HYPERLINK l _Toc3946 一層數(shù)據(jù)

4、流圖 PAGEREF _Toc3946 3 HYPERLINK l _Toc30389 二層數(shù)據(jù)流圖 PAGEREF _Toc30389 4 HYPERLINK l _Toc1711 2.5數(shù)據(jù)字典 PAGEREF _Toc1711 5 HYPERLINK l _Toc1246 三、概要設計 PAGEREF _Toc1246 5 HYPERLINK l _Toc16622 3.1系統(tǒng)總體構造設計 PAGEREF _Toc16622 5 HYPERLINK l _Toc26133 構造設計系統(tǒng) PAGEREF _Toc26133 5 HYPERLINK l _Toc13067 系統(tǒng)功能模塊構造

5、PAGEREF _Toc13067 6HYPERLINK l _Toc32153 3.2數(shù)據(jù)庫設計 PAGEREF _Toc32153 8 HYPERLINK l _Toc5514 概念設計 PAGEREF _Toc5514 8 HYPERLINK l _Toc796 邏輯設計 PAGEREF _Toc796 8 HYPERLINK l _Toc1448 物理設計 PAGEREF _Toc1448 9 HYPERLINK l _Toc6635 四、詳細設計 PAGEREF _Toc6635 9 HYPERLINK l _Toc20579 4.1流程圖 PAGEREF _Toc20579 9 H

6、YPERLINK l _Toc15975 用戶注冊登錄 PAGEREF _Toc15975 9 HYPERLINK l _Toc16005 在線用戶顯示模塊 PAGEREF _Toc16005 11 HYPERLINK l _Toc9310 用戶交流聊天模塊 PAGEREF _Toc9310 12 HYPERLINK l _Toc12839 聊天信息顯示模塊 PAGEREF _Toc12839 13 HYPERLINK l _Toc13566 系統(tǒng)消息顯示模塊 PAGEREF _Toc13566 14 HYPERLINK l _Toc10580 管理員管理用戶模塊 PAGEREF _Toc10

7、580 14 HYPERLINK l _Toc4466 輔助功能 PAGEREF _Toc4466 15 HYPERLINK l _Toc5803 4.2算法 PAGEREF _Toc5803 16 HYPERLINK l _Toc26482 用戶對話存儲算法 PAGEREF _Toc26482 16 HYPERLINK l _Toc18488 檢測用戶是否被踢算法 PAGEREF _Toc18488 16 HYPERLINK l _Toc3914 4.2.3 檢測當前用戶是否有新消息算法 PAGEREF _Toc3914 17 HYPERLINK l _Toc5587 4.3界面設計 PAG

8、EREF _Toc5587 18 HYPERLINK l _Toc26408 登錄首頁 PAGEREF _Toc26408 18-. z. HYPERLINK l _Toc7117 注冊界面 PAGEREF _Toc7117 19 HYPERLINK l _Toc15782 聊天室界面 PAGEREF _Toc15782 20 HYPERLINK l _Toc11187 4.4工程構造設計 PAGEREF _Toc11187 20 HYPERLINK l _Toc28148 4.5各類功能設計 PAGEREF _Toc28148 21 HYPERLINK l _Toc11369 實體類 PAG

9、EREF _Toc11369 22 HYPERLINK l _Toc8721 數(shù)據(jù)庫操作Dao層 PAGEREF _Toc8721 23 HYPERLINK l _Toc11251 監(jiān)聽器 PAGEREF _Toc11251 23 HYPERLINK l _Toc5097 業(yè)務邏輯service層 PAGEREF _Toc5097 23 HYPERLINK l _Toc14497 工具箱Utils PAGEREF _Toc14497 24 HYPERLINK l _Toc11356 4.5.6 Actions PAGEREF _Toc11356 24 HYPERLINK l _Toc1144

10、五、系統(tǒng)實現(xiàn) PAGEREF _Toc1144 24 HYPERLINK l _Toc6000 5.1用戶注冊登錄模塊 PAGEREF _Toc6000 25 HYPERLINK l _Toc11535 用戶注冊 PAGEREF _Toc11535 25 HYPERLINK l _Toc24394 用戶登錄 PAGEREF _Toc24394 26 HYPERLINK l _Toc4928 5.2在線用戶顯示模塊 PAGEREF _Toc4928 28 HYPERLINK l _Toc27544 5.3用戶交流聊天模塊 PAGEREF _Toc27544 29 HYPERLINK l _Toc

11、18771 5.4聊天信息顯示模塊 PAGEREF _Toc18771 30 HYPERLINK l _Toc29069 5.5系統(tǒng)消息顯示模塊 PAGEREF _Toc29069 32 HYPERLINK l _Toc5006 5.6管理員管理用戶模塊 PAGEREF _Toc5006 32 HYPERLINK l _Toc173 5.7輔助功能 PAGEREF _Toc173 33 HYPERLINK l _Toc5720 六、總結與體會 PAGEREF _Toc5720 35 HYPERLINK l _Toc31473 6.1開發(fā)中遇到的問題 PAGEREF _Toc31473 35 H

12、YPERLINK l _Toc26184 6.2問題分析與解決方法 PAGEREF _Toc26184 35 HYPERLINK l _Toc31500 6.3經(jīng)歷與教訓 PAGEREF _Toc31500 35 HYPERLINK l _Toc4569 參考文獻 PAGEREF _Toc4569 37 HYPERLINK l _Toc472 附錄 PAGEREF _Toc472 38-. z.引言隨著網(wǎng)絡的大幅度普及,以及網(wǎng)絡技術快速開展,人們通過網(wǎng)絡進展交流的方式發(fā)生著巨大的變化,人們不再拘泥于移動的通話模式,越來越多的人通過網(wǎng)絡聊天工具進展交流,網(wǎng)絡聊天室便是非常典型的聊天工具之一。聊天

13、室系統(tǒng)的即時交流方式滿足了網(wǎng)絡中人們同時與多人進展聊天交流的需要,使得較多的人在同一個聊天頁面進展交流變得方便,簡單。本設計所完成的網(wǎng)絡聊天室具有常用聊天室的所有功能,包括使用賬號登錄聊天室、注冊賬號、顯示在線用戶列表、顯示系統(tǒng)消息、兩人之間進展私密聊天、消息提醒、發(fā)送表情、修改發(fā)送文字顏色;同時,為了管理聊天室中的用戶使用語言的文明,賦予管理員踢出使用不文明語言的用戶功能,顯示全部聊天信息。該系統(tǒng)采用B/S瀏覽器/效勞器構造進展開發(fā),參考網(wǎng)絡中正在使用的大型聊天室的架構、分析聊天室可實現(xiàn)功能,結合本次設計的相關要求,進展開發(fā)設計并寫出需求分析說明書。該系統(tǒng)具體開發(fā)環(huán)境:使用Windows8.

14、1專業(yè)版作為效勞器運行平臺,效勞器開發(fā)語言使用Java語言,前臺使用Jsp技術、JavaScript、Jquery語言,系統(tǒng)框架使用Struts2+Hibernate+Spring框架,后臺數(shù)據(jù)庫使用MySql數(shù)據(jù)庫。需求分析該系統(tǒng)采用B/S模式設計,開發(fā)目的主要是提供一個基于網(wǎng)絡的平安文明的供多人聊天社交平臺。2.1 系統(tǒng)運行環(huán)境需求該系統(tǒng)是在windows 8.1專業(yè)版操作系統(tǒng)下,搭建的運行平臺,使用myEclipse作為開發(fā)工具,mySql作為數(shù)據(jù)庫,Java語言作為系統(tǒng)后臺開發(fā)語言。JSP技術作為前臺開發(fā)語言,其中使用JavaScript以及Jquery作為腳本語言。工程框架使用Str

15、uts+Spring+Hibernate框架。效勞器配置:配置效勞器。客戶端要求配置:谷歌瀏覽器、狐火瀏覽器以及IE瀏覽器5.0以上版本。2.2 模塊功能分析用戶注冊登錄模塊新用戶在使用該聊天室系統(tǒng)時,必須先進展注冊新用戶操作,后臺將注冊信息添加到數(shù)據(jù)庫中,用于胡勇登錄驗證;在注冊成功之后再進展登錄;當用戶名與密碼匹配成功,即可進入聊天室系統(tǒng)。在線用戶顯示模塊當用戶登錄進入系統(tǒng)后,該頁面實現(xiàn)在線用戶的統(tǒng)計,并將在線用戶依次顯示出來。如果當前用戶屬于管理員角色,則在普通用戶角色的右邊顯示踢下線,如果當前用戶屬于普通用戶角色,則正常顯示在線用戶名。用戶交流聊天模塊該模塊主要負責發(fā)送信息容,選擇聊天

16、對象;除此之外,可以修改聊天容的字體顏色以及發(fā)送的表情。發(fā)言的顏色和發(fā)言的表情通過下拉式組合框實現(xiàn)。發(fā)言容書寫完畢后。通過點擊發(fā)送按鈕,發(fā)送聊天容。聊天信息顯示模塊當用戶選擇聊天對象并發(fā)送聊天容后,顯示出當前發(fā)送的容以及之前的歷史聊天容,聊天的容只有對話的兩人可見,其他人不可見。當用戶退出系統(tǒng)后,再次登錄進入聊天室時,兩人的對話記錄依然存在。系統(tǒng)消息顯示模塊系統(tǒng)消息提示所有用戶,聊天室的文明守則,以及當其他用戶進入、離開或被管理員踢出聊天室的情況。管理員管理用戶模塊管理員用戶可以與其他用戶聊天,并且隨時監(jiān)視其他用戶的言行,一旦出現(xiàn)不文明用語,即將改用戶踢出聊天室。輔助功能輔助功能包括:顯示全部

17、聊天信息、退出聊天室、檢測用戶是否有新消息。顯示全部信息是指當用戶之間的聊天信息占滿全屏的時候,點擊顯示全部信息,即可看到全部的聊天容。退出聊天室是指用戶離開聊天室。檢測用戶是否有新信息,當用戶收到其他用戶發(fā)來的消息時,提示用戶。2.3系統(tǒng)功能構造圖2-1 功能構造圖2.4系統(tǒng)數(shù)據(jù)流圖頂層數(shù)據(jù)流圖圖2-2 頂層數(shù)據(jù)流圖一層數(shù)據(jù)流圖圖2-3 一層數(shù)據(jù)流圖二層數(shù)據(jù)流圖圖2-4 二層數(shù)據(jù)流圖2.5數(shù)據(jù)字典數(shù)據(jù)項名稱:用戶名數(shù)據(jù)項別名:username說明:用戶唯一標識類型:varchar長度:20取值圍及含義:用戶登錄聊天室的用戶名長度在120之不管數(shù)字、字符還是符號。表2-1 用戶名數(shù)據(jù)字典數(shù)據(jù)項

18、名稱:密碼數(shù)據(jù)項別名:password說明:用戶登陸密碼類型:varchar長度:20取值圍及含義:用戶登錄聊天室的密碼長度在120之不管數(shù)字、字母還是符號。表2-2 密碼數(shù)據(jù)字典數(shù)據(jù)項名稱:級別數(shù)據(jù)項別名:type說明:用戶身份級別類型:varchar長度:20取值圍及含義:用戶登錄聊天室的角色,管理員admin或者普通用戶user。表2-3 級別數(shù)據(jù)字典概要設計3.1系統(tǒng)總體構造設計構造設計系統(tǒng)圖3-1 總體構造圖系統(tǒng)功能模塊構造用戶注冊登錄模塊用戶注冊是添加用戶到數(shù)據(jù)中,只能注冊普通用戶,當注冊驗證信息合格,即可登錄進入聊天室。圖3-2 用戶注冊登錄H圖在線用戶顯示模塊當用戶登錄進入系統(tǒng)

19、后,該頁面實現(xiàn)在線用戶的統(tǒng)計,并將在線用戶依次顯示出來。如果當前用戶屬于管理員角色,則在普通用戶角色的右邊顯示踢下線,如果當前用戶屬于普通用戶角色,則正常顯示在線用戶名。用戶交流聊天模塊交流包括選擇聊天對象,選擇發(fā)送表情,字體顏色。圖3-3 用戶聊天H圖聊天信息顯示模塊聊天信息的顯示,首先系統(tǒng)必須獲得與當前用戶正在進展聊天的對象,根據(jù)聊天對象的用戶名,獲得存儲在系統(tǒng)中的聊天記錄,傳送到瀏覽器客戶端,瀏覽器客戶端進展1s刷新界面,從而獲取兩人之間的私密聊天記錄并顯示在界面上。圖3-4 聊天信息顯示H圖系統(tǒng)消息顯示模塊系統(tǒng)信息包括:聊天室守則、系統(tǒng)公告。圖3-5 系統(tǒng)信息顯示H圖管理員管理用戶模塊

20、管理員用戶可以與其他用戶聊天,并且隨時監(jiān)視其他用戶的言行,一旦出現(xiàn)不文明用語,即將改用戶踢出聊天室。輔助功能輔助功能包括:顯示全部聊天信息、退出聊天室。顯示全部信息是指當用戶之間的聊天信息占滿全屏的時候,點擊顯示全部信息,即可看到全部的聊天容。退出聊天室是指用戶離開聊天室。3.2數(shù)據(jù)庫設計概念設計E-R圖:該系統(tǒng)只存在用戶一個實體,用戶的屬性包括:id、用戶名、密碼、級別。圖3-6 E-R圖邏輯設計用戶表字段名數(shù)據(jù)類型長度說明描述idint4不空用戶iduserNamevarchar20不空用戶名passwordvarchar20不空登錄密碼typevarchar20不空用戶級別表3-1 用戶

21、表物理設計數(shù)據(jù)庫類型使用mySql數(shù)據(jù)庫,用戶表的主鍵為id。詳細設計4.1流程圖用戶注冊登錄用戶注冊的時候,操作人員輸入想取的用戶民,輸入自創(chuàng)密碼與確認密碼,點擊注冊;此時,系統(tǒng)會首先檢測兩次密碼是有一致,假設不一致,提示用戶密碼不一致,請重新輸入。假設一致,檢測用戶名是否已經(jīng)被注冊過,假設已經(jīng)被注冊,提示是用戶,已被注冊。假設為被注冊,系統(tǒng)添加用戶注冊信息到數(shù)據(jù)庫user表中。界面提示用戶注冊成功,并跳轉到登錄界面。注冊的用戶默認type是普通用戶,即user。圖4-1 注冊流程圖用戶登錄的時候,用戶輸入用戶名,密碼,點擊進入按鈕,系統(tǒng)獲取用戶所填寫的用戶名與密碼,首先判斷該用戶名是否存在

22、于數(shù)據(jù)庫,假設不存在,提示用戶不存在該用戶,請重新填寫或注冊,假設該用戶名存在,則判斷密碼與用戶名是否匹配,假設不匹配,提示用戶密碼錯誤,請重新填寫,假設匹配,進入聊天室界面。圖4-2 登錄流程圖在線用戶顯示模塊當用戶登錄進入聊天室時,系統(tǒng)會將用戶的信息存入application屬性的userMap中,進入系統(tǒng)后,在jsp中獲取userMap,將所有的用戶信息中的用戶名顯示出來。圖4-3 顯示在線人數(shù)流程圖用戶交流聊天模塊用戶實現(xiàn)找人聊天,點擊聊天對象的用戶名,獲取聊天對象,填寫發(fā)送容,選擇表情、與發(fā)送字體的顏色,點擊發(fā)送即可進展聊天。在未選擇聊天對象時,點擊發(fā)送,提示用戶選擇聊天對象;在未填

23、寫發(fā)送的容點擊發(fā)送時,提示用戶未填寫發(fā)送容。發(fā)送的表情默認為微笑著,字體顏色默認為黑色。圖4-4 發(fā)送信息流程圖聊天信息顯示模塊聊天信息顯示,首先必須保證聊天對象的用戶名不為空,當不為空時,系統(tǒng)將獲取用戶名,在application作用域中獲得,相應的聊天記錄屬性,返回到jsp中,并顯示在界面中。圖4-5 顯示聊天記錄流程圖系統(tǒng)消息顯示模塊在用戶登錄聊天室時,系統(tǒng)存儲聊天室的聊天守則,并獲取登錄的用戶名,存儲系統(tǒng)公告*進入聊天室!;當用戶離開聊天室時,修改系統(tǒng)公告*離開聊天室??;當用戶被管理員踢出聊天室時,修改系統(tǒng)公告*,被管理員踢出聊天室!。圖4-6 顯示系統(tǒng)信息流程圖管理員管理用戶模塊當用

24、戶使用了不文明的語言,管理員有權利該用戶踢出聊天室。獲取用戶名,在application中的userMap中獲得相應的用戶session,去除該session即可將用戶踢下線。圖4-7 管理員管理用戶流程圖輔助功能顯示與*人的全部聊天信息,當聊天的容占滿全屏,點擊顯示全部消息,即可顯示全部信息。當用戶離開聊天室時,系統(tǒng)獲取當前用戶名,并釋放user的session。檢測用戶是否有新消息:圖4-8 檢測信息流程圖4.2算法用戶對話存儲算法首先獲取進展對話雙方的用戶名以及id,再比較兩者的id假設id1id2,則messageName = userName1 + userName2;否則messa

25、geName = userName2 + userName1。圖4-9 用戶對話存儲算法檢測用戶是否被踢算法當用戶登錄進入聊天室時,向application中存儲一個isKickedMap屬性,將用戶名添加到isKickedMap中并賦值為11表示在線,-1表示被踢。當管理員將*個用戶踢下線時,將isKickedMap屬性中的改用戶名修改成*符號,并賦值為-1。Jsp頁面每秒刷新一次,當檢測到isKickedMap屬性中getAttribute*= -1 時,則該用戶被踢下線,此時要在jsp頁面中提示用戶已被踢下線,并返回登陸界面。圖4-10 檢測用戶是否被踢算法4.2.3 檢測當前用戶是否有

26、新消息算法Jsp每隔1s就檢測一次當前session中的call屬性中是否有值,如果有值,返回到jsp中,在jsp中遍歷出有個值,并且讓id為該值的標簽的背風光為紅色。圖4-11 檢測當前用戶是否有新消息算法4.3界面設計登錄首頁登陸首頁是寫在inde*.jsp中的,前臺主要運用jsp動態(tài)網(wǎng)頁技術。并使用JavaScript語言判斷用戶是否正確輸入用戶名以及密碼。在登錄界面可以點擊注冊用戶進入用戶注冊界面。圖4-12 登錄界面注冊界面圖4-13 注冊界面聊天室界面聊天室界面:左側是在線人員列表顯示,和在線人數(shù)的統(tǒng)計;右側是專門顯示系統(tǒng)公告的地方;中間屬于聊天容的顯示;下方是用戶發(fā)送消息的模塊,

27、在該模塊中,當用戶點擊聊天對象的用戶名,下方的第一個input框將獲取到聊天對象的用戶名,還可以選擇聊天的表情與字體的顏色,在最下角的input框可以編輯所要說的話,點擊發(fā)送,即可發(fā)送聊天容。圖4-14 聊天室主界面4.4工程構造設計該系統(tǒng)采用SSHstruts2 + spring + hibernate框架搭建工程。系統(tǒng)的根本業(yè)務流程是:在表示層中,首先通過JSP頁面實現(xiàn)交互界面,負責接收請求(Request)和傳送響應(Response),然后Struts根據(jù)配置文件(struts-config.*ml)將ActionServlet接收到的Request委派給相應的Action處理。在業(yè)務

28、層中,管理效勞組件的Spring IOC容器負責向Action提供業(yè)務模型(Model)組件和該組件的協(xié)作對象數(shù)據(jù)處理(DAO)組件完成業(yè)務邏輯,并提供事務處理、緩沖池等容器組件以提升系統(tǒng)性能和保證數(shù)據(jù)的完整性。而在持久層中,則依賴于Hibernate的對象化映射和數(shù)據(jù)庫交互,處理DAO組件請求的數(shù)據(jù),并返回處理結果。采用上述開發(fā)模型,不僅實現(xiàn)了視圖、控制器與模型的徹底別離,而且還實現(xiàn)了業(yè)務邏輯層與持久層的別離。這樣無論前端如何變化,模型層只需很少的改動,并且數(shù)據(jù)庫的變化也不會對前端有所影響,大大提高了系統(tǒng)的可復用性。而且由于不同層之間耦合度小,有利于團隊成員并行工作,大大提高了開發(fā)效率。工程

29、構造中其中:applicationConte*t.*ml文件是關于配置spring的配置文件,主要是將各種POJO,JAVA,action配置到*ML轉交給beanfactory管理,降低耦合度。perties文件配置struts的屬性值,程序員可以通過它來管理Struts 2 框架中定義的大量常量。perties 文件是一個標準的properties 文件。struts.*ml 為Struts 2的核心配置文件。struts.*ml文件主要負責管理應用中的Action映射,以及該Action包含的Result定義。圖4-15 工程構造4.5各類功能設計類圖圖4-16 工程類圖實體類User.

30、java,屬性包括:private int id;/idprivate String username;/用戶名private String password;/密碼private String type;/級別用于建立與數(shù)據(jù)庫user表表的映射關系,管理用戶。Message.java,屬性包括:private static String eIn = 走進聊天室!;private static String goOut = 離開聊天室!;private static String kicked = 被管理員踢出去!;用于獲取系統(tǒng)公告。數(shù)據(jù)庫操作Dao層BaseHibernateDAO.java

31、,方法:public List query(String hql, Object values,int firstResult, int ma*Results)用于查詢數(shù)據(jù)庫。public Serializable save(Object obj) 用于添加用戶到數(shù)據(jù)庫中監(jiān)聽器MyServletConte*tListener.java,實現(xiàn)了ServletConte*tListener接口。重寫方法:public void conte*tInitialized(ServletConte*tEvent sce)用于監(jiān)聽:一旦創(chuàng)立servletConte*t對象,就添加用戶和相應的session進

32、去。使用此監(jiān)聽器可以得到所有登錄的用戶以及相應的session。監(jiān)聽器的配置:在WEB-INF下的web.*ml中寫上下面語句。.cust.listener.MyServletConte*tListener實體類實現(xiàn)監(jiān)聽HttpSessionBindingListener接口,當當前用戶session.setAttribute(user, user)時,運行public void valueBound(HttpSessionBindingEvent event)方法,當session.invalidate()時,運行public void valueUnbound(HttpSessionBin

33、dingEvent event)方法。業(yè)務邏輯service層LoginSrvImpl.java,方法:public Map e*ecuteLogin(String username, String password)用于用戶登錄,返回值Map:當用戶名不存在reMap.put(result, -1);reMap.put(msg, 用戶不存在!); 當密碼錯誤時,eMap.put(result, -2);reMap.put(msg, 密碼錯誤!);登錄成功時,reMap.put(result, 1);reMap.put(msg, 登錄成功!);reMap.put(user, user);Reg

34、isterSrvImpl.java,方法:public int e*ecuteRegister(String userName, String password)用于注冊,添加用戶到數(shù)據(jù)庫。public int query(String userName)用于判斷用戶名是否已經(jīng)被注冊了。返回值為int,當用戶被注冊return -1;工具箱UtilsUtils.java,方法:public static Map gainUserMap()/獲取application里的userMappublic static Map gainSysMessageMap()/獲取系統(tǒng)消息public stati

35、c HttpSession gainToSession(String toId)/得到對方sessionpublic static HttpSession gainCurrentSession()/得到當前sessionpublic static ServletConte*t gainApplication()/得到applicationpublic static String gainMessageName(String from, String to, String fromId, String toId)/獲得聊天消息的名稱4.5.7 ActionsCheckNewMessageActi

36、on.java /檢測當前用戶是否有新消息CheckUserIsKickAction.java /檢測當前用戶是否被管理員踢出聊天室E*itAction.java /當前用戶離開聊天室KickAction.java /管理員踢出語言不文明的用戶LoginAction.java /用戶登錄RegisterAction.java /新用戶注冊SendMessageAction.java /發(fā)送聊天消息給指定用戶ShowSendMessage.java /顯示聊天信息SystemMessageAction.java /顯示系統(tǒng)消息系統(tǒng)實現(xiàn)聊天室的功能主要是實現(xiàn)用戶的發(fā)言和觀看大家發(fā)言的容,發(fā)言界面和

37、聊天容需要顯示在同一屏界面中,以方便發(fā)言和觀看,另外,通常還需要顯示當前在線的人數(shù)和用戶列表,以方便選擇對誰發(fā)言。用戶書寫發(fā)言的界面、聊天容的顯示、用戶列表的顯示均需要通過單獨的頁面來實現(xiàn),為了能在同一屏界面中同時顯示多個頁面的容,此時需要利用帶框架集的頁面來實現(xiàn)??蚣芗嵌鄠€框架的集合,每一個框架可顯示一個頁面的容,在同一屏中需要顯示多少個頁面,就需要創(chuàng)立一個具有多少個框架的框架集來實現(xiàn),整個框架集最后存盤形成一個頁面,以后瀏覽該頁面時,各框架集中的容就會自動顯示出來。5.1用戶注冊登錄模塊用戶注冊用戶進入注冊頁面后,根據(jù)要求,填寫表單中各項數(shù)據(jù),單擊注冊按鈕后,將輸入的容通過異步刷新的方式

38、傳遞給后臺處理頁面register.action進展寫入數(shù)據(jù)庫處理。其中,在進展表單傳遞的時候,系統(tǒng)還調用了JavaScript的function check函數(shù)對填入表單的數(shù)據(jù)進展檢驗,一旦發(fā)現(xiàn)表單中有一個數(shù)據(jù)項不符合要求,系統(tǒng)便會彈出出錯信息,提示用戶重新填寫。在后臺處理頁面中,系統(tǒng)先定義對應于表單各數(shù)據(jù)項的變量,利用Struts2配置,將用戶填入表單的數(shù)據(jù)賦給這些變量,判斷用戶名是否已經(jīng)存在,存在返回數(shù)據(jù)2,前臺接收到數(shù)據(jù)2,提示用戶用戶名已經(jīng)被注冊,請重新填寫,假設改用戶名有效,但是兩次密碼不一致,則返回數(shù)據(jù)1,前臺接收到數(shù)據(jù)1,則提示用戶兩次密碼不一致,請重新輸入,這些數(shù)據(jù)都正確的情

39、況下,存入數(shù)據(jù)庫的時候直接將變量值添入數(shù)據(jù)庫即可,并返回數(shù)據(jù)4,前臺接收到數(shù)據(jù)4則提示用戶注冊成功,并跳轉到登錄界面,用戶可以直接用剛剛注冊的用戶登錄進入聊天室主頁,假設存入數(shù)據(jù)庫失敗,則返回數(shù)據(jù)3,提示用戶注冊失敗。下面以zhuwei為用戶名,111為密碼進展注冊,前提是數(shù)據(jù)庫中沒有該數(shù)據(jù)的記錄,結果是注冊成功。數(shù)據(jù)庫chatroom,表user中的數(shù)據(jù)記錄:圖5-1 數(shù)據(jù)庫記錄注冊界面以及填寫的信息,可以看到數(shù)據(jù)庫并沒有該數(shù)據(jù)的記錄。圖5-2 注冊用戶zhuwei注冊成功:圖5-3 注冊成功用戶登錄用戶在聊天室登錄界面填入正確的注冊信息,單擊登錄,系統(tǒng)將自動把用戶填入的、密碼于數(shù)據(jù)庫中存放

40、的用戶注冊信息進展比對驗證。系統(tǒng)進展用戶身份驗證時,首先利用Request對象,將用戶填入的即用戶名、密碼傳遞給預先定義的變量,再使用Select語句,將變量值與用戶信息表進展比對List list = dao.query( from User where username=, username);當list不為空時,表示該用戶名已經(jīng)注冊可以進展登錄操作,然后比對密碼是否與數(shù)據(jù)庫中的密碼一致。User user = (User) list.get(0);if(password.equals(user.getPassword()如果一致,用戶登錄成功,頁面發(fā)生跳轉,如果一開場用戶名不存在于數(shù)據(jù)庫

41、list = null 或者list.isEmpty(),提示用戶用戶名錯誤。如果密碼不一致提示用戶密碼錯誤。以Response對象的Redirect方法跳轉到聊天主頁面,Response對象的Redirect方法是實現(xiàn)頁面的跳轉,使當前頁面跳轉到指定的頁面。在用戶登錄進聊天主頁面的同時,系統(tǒng)將該用戶的用戶名以及該用戶的session存入application中的userMap集合中,目的是利用userMap集合遍歷出所有在線的用戶,顯示在線用戶的用戶名。同時,也將該用戶存入當前session中,session.setAtrribute(user, User);目的是在聊天主頁能夠獲取當前用戶

42、的信息,可以通過User對象中的type屬性,判斷當前用戶的級別,是否為管理員,是否有權限踢出其他用戶。通過上述的用戶驗證和數(shù)據(jù)傳遞,系統(tǒng)跳轉到聊天頁面,此時用戶便可在聊天主頁面進展聊天交流了。下面以剛剛注冊的用戶信息登錄進入聊天室:圖5-4 zhuwei用戶登錄點擊進入,進入聊天室,如下列圖所示,可以看到該用戶已經(jīng)成功登錄并存入application的userMap集合中,當前在線列表中也遍歷出來該用戶的用戶名,系統(tǒng)公告也顯示zhuwei走進聊天室!。圖5-5 在線人員列表顯示圖5-6 系統(tǒng)公告顯示5.2在線用戶顯示模塊為了存儲所有登錄進入聊天室的用戶,在jsp的置對象application

43、中設置一個集合屬性,userMap 該集合的關鍵字為User用戶對象,值是該用戶對象所對應的session值。如此便可以根據(jù)user得到user的session值。為了判斷集合中的關鍵字user對象與傳入的user對象相等,在實體類User中重寫int hashCode() 與boolean equals(Object obj)方法比較兩者的id是否一樣,id一樣則User對象一樣,反之則不一樣。當瀏覽器進入登錄首頁,創(chuàng)立servletConte*t對象,監(jiān)聽器MyServletConte*tListener監(jiān)聽servletConte*t對象的創(chuàng)立,就在向application中添加屬性us

44、erMap;當用戶確認登錄成功,將User對象user添加到時,在public void valueBound(HttpSessionBindingEvent event)方法中得到userMap,并向其添加當前session與用戶user進去。這樣application中就有所有登錄進去聊天室的用戶,所以在jsp頁面也就是online.jsp中使用el表達式$userMap即可將所有在線用戶顯示出來,如下列圖所示:圖5-7 在線人員列表顯示當*個用戶離開或被管理員踢出聊天室時,系統(tǒng)將得到的userMap集合根據(jù)離開的用戶的id找到相應的session,去除該session即可刪除離開的用戶。

45、在顯示當前在線人員列表的時候,首先要判斷當前用戶是否是管理員,管理員可以踢出其他用戶,但是管理員之間是不可以相互踢出,即判斷條件為:當前用戶的級別等于admin并且要顯示的用戶的級別不等于admin,在jsp中寫成:在滿足條件的情況下,顯示踢下線。踢下線下面登錄一個管理員aaa:圖5-8 登錄管理員在用戶aaa中的在線人員列表中用戶zhuwei的右邊顯示踢下線操作,但在用戶zhuwei的在線人員列表當中用戶aaa的右邊不顯示踢下線操作:圖5-9 aaa的在線人員顯示圖5-10 zhuwei的在線人員顯示5.3用戶交流聊天模塊進入聊天主頁面后,用戶便可在主頁面下方的發(fā)言界面設計書寫自己想要說的話

46、,以及想對誰說,同時,系統(tǒng)還提供了發(fā)言字體顏色選擇、插入表情、圖片的功能,如圖下列圖所示,讓用戶的聊天更有趣味。圖5-11 寫對話界面在點擊發(fā)送調用JavaScript的send()方法,在發(fā)送消息之前,確保已經(jīng)選擇聊天的對象,并將用戶名顯示在zhiwei對右邊的文本框中,以及發(fā)送的容不為空時,即可調用后臺的sendMessage.action。用戶發(fā)言界面采用Jsp表單from模式設計,在表單包括發(fā)言對象、發(fā)言容、發(fā)送容字體顏色以及發(fā)言顏色,并未它們每一個標簽寫上name值。這些表單數(shù)據(jù),通過post的異步刷新方式,提交到后臺,后臺action的屬性中與jsp的標簽則值一樣,并為每個屬性添加

47、上set方法。在得到這些屬性值后,根據(jù)Utils.gainMessageName(from,to,fromId,oId);方法得到對話的名稱messageName,然后將這些屬性值寫成html語言:sourceMessage += + from+ + face+ 對 + to + 說:+ + content + + sendTime + ;之后將sourceMessage存入application中:Utils.gainApplication().setAttribute(messageName, sourceMessage);到此為止,聊天容就已經(jīng)發(fā)送,等發(fā)言對象端接收并顯示消息容。在面管理

48、員aaa將發(fā)送一段文字給用戶zhuwei:圖5-12 aaa向zhuwei發(fā)送一條對話5.4聊天信息顯示模塊當聊天對象沒有選擇聊天對象時,例如用戶zhuwei開場并沒有選擇聊天對象aaa,但是aaa向zhuwei發(fā)送了消息,此時,系統(tǒng)檢測到zhuwei有新消息,所有在jsp頁面中將把aaa的背風光變成紅色以提醒zhuwei有新消息來自aaa,如下列圖所示。這個功能在輔助功能中介紹:圖5-13 zhuwei檢索到aaa有新消息提醒中選擇聊天對象aaa后,jsp開場刷洗界面,并調用JavaScript的方法showSendMessage(),在該方法中還是已post的異步刷新方式,調用后臺的sho

49、wSendMessage.action。在該action中同樣將獲取application的消息名稱,并根據(jù)此消息名稱獲得相應的對話:String message = (String) Utils.gainApplication().getAttribute(messageName);如果message不等于null,則向jsp中輸出message:response.getWriter().println(message);在jsp中的回調函數(shù)中獲得data,并在id為content的div中顯示data:$(#content).html(sysBBS + data + );Jsp界面每隔1s

50、就刷新界面,調用后臺showSendMessage.action的action獲取最新的消息。例如用戶zhuwei收到來自aaa的消息,如下列圖所示:圖5-14 zhuwei收到aaa的對話并顯示在聊天容中用戶zhuwei回復用戶aaa:圖5-15 zhuwei向aaa回復一條對話在用戶aaa的界面中收到來自zhuwei的回話:圖5-16 aaa收到zhuwei的回復至此,聊天信息的顯示完畢。5.5系統(tǒng)消息顯示模塊系統(tǒng)消息包括聊天室守則歡送來到聊天室,請遵守聊天室規(guī)則,不要使用不文明用語。的顯示;還有就是系統(tǒng)公告的顯示。首先聊天室準則的顯示,一旦用戶登錄進入聊天室守則就被顯示在聊天容的下方,它

51、的實現(xiàn)主要是在jsp中,一旦加載了聊天室主頁main.jsp就執(zhí)行:var sysBBS = 歡送來到聊天室,請遵守聊天室規(guī)則,不要使用不文明用語。;$(#content).html(sysBBS);這兩句js代碼。而當用戶開場選擇聊天對象進展聊天時,調用的顯示聊天信息的action返回到jsp的data時,sysBBS與data一同顯示在聊天容上:$(#content).html(sysBBS + data + );對于系統(tǒng)公告,首先創(chuàng)立了一個實體類Message,其中它的屬性包括了所有系統(tǒng)公告的容;當用戶調用登錄action時,并且驗證成功,登錄成功時,向application中添加屬性s

52、ysMessageMap,并且屬性記錄用戶登錄情況:sysMessageMap.put(user.getUsername(), Message.geteIn();Utils.gainApplication().setAttribute(sysMessageMap, sysMessageMap);當用戶離開聊天室時,向application中得到sysMessageMap屬性,并根據(jù)用戶名得到對應的值,將其修改為Message.getGoOut(),再次存入application當中。當用戶被管理員踢出聊天時,同樣獲取sysMessageMap,根據(jù)用戶名得到相應的值,將其修改成Message.

53、getKicked(),再次存入application當中。下面將用戶zhuwei退出聊天室,或是將其踢出聊天室,效果如下列圖:圖5-17 aaa將zhuwei踢出聊天室圖5-18 zhuwei主動離開聊天室5.6管理員管理用戶模塊當普通用戶使用了不文明的語言,管理員有權將其踢出聊天室。當管理員點擊踢下線操作時,調用后臺的kick.action,并將踢出用戶的id與用戶名傳參到后臺,在action中,獲取application中的userMap,根據(jù)id得到相應的session,去除該session即可踢出用戶。但是存在一個BUG,當用戶自己退出聊天室時,其session也將被去除,由此導致,

54、jsp在調用js方法check()檢測是否被踢出去的時候,出現(xiàn)用戶自己退出聊天室時也被當成被踢提示用戶由于您使用不文明語言,被踢下線了!。解決方法是:在application中再存入一個屬性isKickedMap,關鍵字存入用戶名,值存入數(shù)字,1表示在線;-1表示被踢。當用戶被踢時,將其用戶名改為*,并將值改為-1。這樣在調用check方法時,先判斷是否存在*,并且其值是否為-1,才進展被踢提示,否則不提示:if(isKickedMap.get(*) != null)if(Integer)isKickedMap.get(*) = -1)/被踢isKickedMap.remove(*);Util

55、s.gainApplication().setAttribute(isKicked, isKickedMap);if(user = null)response.getWriter().println(1);elseresponse.getWriter().println(2);elseresponse.getWriter().println(3);5.7輔助功能顯示全部聊天信息:直接調用js方法checkScrollScreen()if (!$(#scrollScreen).attr(checked) $(#content).css(overflow, scroll); else $(#con

56、tent).css(overflow, hidden);/當聊天信息超過一屏時,設置最先發(fā)送的聊天信息不顯示$(#content).scrollTop($(#content).height() * 2);setTimeout(checkScrollScreen(), 500);退出聊天室:釋放當前用戶的session即可。提醒用戶是否有新信息:每個用戶的session當中存入一個call屬性,該屬性屬于List call = new ArrayList();類型;在*個用戶對其進展聊天的時候,根據(jù)聊天對象的名稱在application獲取session,在session當中獲取call屬性,將

57、發(fā)起會話的用戶名稱添加到call當中:List call = (List) toSession.getAttribute(call);call.add(from);toSession.setAttribute(call, call);在當前用戶的jsp當中每隔1s就調用一次gainCall方法,其中調用checkCall.action,在這個action中獲取該用戶的session的call屬性,遍歷出所有用戶名,將用戶名返回到jsp中:if (data != null) data = data.toString();var strs = new Array(); /定義一數(shù)組strs = d

58、ata.split(,); /字符分割for (i=0; istrs.length ;i+ ) var id = # + strsi;$(id).css(background-color, red);將id為該用戶名的設置為紅色;當用戶已經(jīng)讀取這些信息之后,依次將call中的值刪除:List call = (List) session.getAttribute(call);if(call != null & !call.isEmpty()for (int i = 0; i call.size(); i+) if (call.get(i).equals(to) call.remove(i); i

59、-; 這樣在讀取完信息之后,就不會讓用戶名的背風光一直為紅色,將恢復原色表示沒有最新消息。圖5-19 zhuwei接到aaa的消息提醒圖5-20 zhuwei讀取aaa的消息總結與體會6.1開發(fā)中遇到的問題我在聊天室系統(tǒng)程序設計過程中,遇到的問題大體可分為兩類:A.知道但不會。這類問題往往是我知道應該怎么去設計,但卻就是動不了手,要不就錯誤百出。B.完全不會。這類問題擺在面前,我只能束手無策,苦惱而又無奈。6.2問題分析與解決方法對于第一類問題,其實本質上不存在什么大的問題,都是因為自己平時學習功底不夠,還有編程時不夠慎重,才造成的。人非完人,學過了,有點不懂或迷惑的地方也是很正常的,再說竟然知道

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論