




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
科研訓(xùn)練網(wǎng)絡(luò)聊天室系統(tǒng)設(shè)計與實現(xiàn)Designandimplementationofnetworkchatroomsystem學(xué)生姓名XXX專業(yè)軟件工程學(xué)號1305XXXXX指導(dǎo)教師李XX祝XX學(xué)院計算機(jī)科學(xué)技術(shù)學(xué)院二〇一六年六月起止周17~19周數(shù)3實習(xí)地點計算機(jī)學(xué)院專業(yè)實驗室南區(qū)研1213選題自選實習(xí)目的:培養(yǎng)學(xué)生未來進(jìn)入職場的素質(zhì),以及企業(yè)級行業(yè)解決方案系統(tǒng)的分析、設(shè)計、實現(xiàn)等企業(yè)級綜合應(yīng)用能力。主要任務(wù)通過項目開發(fā)培養(yǎng)學(xué)生的職業(yè)素質(zhì),按照軟件工程的思想,訓(xùn)練學(xué)生掌握面向?qū)ο蠓治?設(shè)計(UML建模)、編碼規(guī)范、概要設(shè)計方法、詳細(xì)設(shè)計方法、模塊劃分方法等技能;培養(yǎng)學(xué)生的編程思想和基本工作技能,培養(yǎng)學(xué)生的編程能力。實習(xí)要求:要求學(xué)生能掌握軟件開發(fā)的基本能力,具有項目開發(fā)的實際經(jīng)驗,按照專業(yè)方向或本人就業(yè)方向選擇一個項目進(jìn)行實際開發(fā),能熟練運用常用的程序設(shè)計語言和開發(fā)工具,完成整個開發(fā)過程。實習(xí)內(nèi)容及進(jìn)度安排:每個同學(xué)的課題的主要研究內(nèi)容,完成的主要功能、按周完成的工作(總計3周,每周具體完成的內(nèi)容要寫清楚)指導(dǎo)教師評語:成績:指導(dǎo)教師/帶隊教師(簽字)2016年6月日目錄TOC\o"1-3"\h\u19969一、引言 118243二、需求分析 1318系統(tǒng)運行環(huán)境需求 123798模塊功能分析 131745系統(tǒng)功能結(jié)構(gòu) 323228系統(tǒng)數(shù)據(jù)流圖 321419頂層數(shù)據(jù)流圖 33946一層數(shù)據(jù)流圖 330389二層數(shù)據(jù)流圖 41711數(shù)據(jù)字典 51246三、概要設(shè)計 516622系統(tǒng)總體結(jié)構(gòu)設(shè)計 526133結(jié)構(gòu)設(shè)計系統(tǒng) 513067系統(tǒng)功能模塊結(jié)構(gòu) 632153數(shù)據(jù)庫設(shè)計 85514概念設(shè)計 8796邏輯設(shè)計 81448物理設(shè)計 96635四、詳細(xì)設(shè)計 920579流程圖 915975用戶注冊登錄 916005在線用戶顯示模塊 119310用戶交流聊天模塊 1212839聊天信息顯示模塊 1313566系統(tǒng)消息顯示模塊 1410580管理員管理用戶模塊 144466輔助功能 155803算法 1626482用戶對話存儲算法 1618488檢測用戶是否被踢算法 163914檢測當(dāng)前用戶是否有新消息算法 175587界面設(shè)計 1826408登錄首頁 187117注冊界面 1915782聊天室界面 2011187工程結(jié)構(gòu)設(shè)計 2028148各類功能設(shè)計 2111369實體類 228721數(shù)據(jù)庫操作Dao層 2311251監(jiān)聽器 235097業(yè)務(wù)邏輯service層 2314497工具箱Utils 2411356Actions 241144五、系統(tǒng)實現(xiàn) 246000用戶注冊登錄模塊 2511535用戶注冊 2524394用戶登錄 264928在線用戶顯示模塊 2827544用戶交流聊天模塊 2918771聊天信息顯示模塊 3029069系統(tǒng)消息顯示模塊 325006管理員管理用戶模塊 32173輔助功能 335720六、總結(jié)與體會 3531473開發(fā)中遇到的問題 3526184問題分析與解決方法 3531500經(jīng)驗與教訓(xùn) 354569參考文獻(xiàn) 37472附錄 38引言隨著網(wǎng)絡(luò)的大幅度普及,以及網(wǎng)絡(luò)技術(shù)快速發(fā)展,人們通過網(wǎng)絡(luò)進(jìn)行交流的方式發(fā)生著巨大的變化,人們不再拘泥于移動電話的通話模式,越來越多的人通過網(wǎng)絡(luò)聊天工具進(jìn)行交流,網(wǎng)絡(luò)聊天室便是非常典型的聊天工具之一。聊天室系統(tǒng)的即時交流方式滿足了網(wǎng)絡(luò)中人們同時與多人進(jìn)行聊天交流的需要,使得較多的人在同一個聊天頁面進(jìn)行交流變得方便,簡單。本設(shè)計所完成的網(wǎng)絡(luò)聊天室具有常用聊天室的所有功能,包括使用賬號登錄聊天室、注冊賬號、顯示在線用戶列表、顯示系統(tǒng)消息、兩人之間進(jìn)行私密聊天、消息提醒、發(fā)送表情、修改發(fā)送文字顏色;同時,為了管理聊天室中的用戶使用語言的文明,賦予管理員踢出使用不文明語言的用戶功能,顯示全部聊天信息。該系統(tǒng)采用B/S(瀏覽器/服務(wù)器)結(jié)構(gòu)進(jìn)行開發(fā),參考網(wǎng)絡(luò)中正在使用的大型聊天室的架構(gòu)、分析聊天室可實現(xiàn)功能,結(jié)合本次設(shè)計的相關(guān)要求,進(jìn)行開發(fā)設(shè)計并寫出需求分析說明書。該系統(tǒng)具體開發(fā)環(huán)境:使用專業(yè)版作為服務(wù)器運行平臺,服務(wù)器開發(fā)語言使用Java語言,前臺使用Jsp技術(shù)、JavaScript、Jquery語言,系統(tǒng)框架使用Struts2+Hibernate+Spring框架,后臺數(shù)據(jù)庫使用MySql數(shù)據(jù)庫。需求分析該系統(tǒng)采用B/S模式設(shè)計,開發(fā)目的主要是提供一個基于網(wǎng)絡(luò)的安全文明的供多人聊天社交平臺。系統(tǒng)運行環(huán)境需求該系統(tǒng)是在windows專業(yè)版操作系統(tǒng)下,搭建的運行平臺,使用myEclipse作為開發(fā)工具,mySql作為數(shù)據(jù)庫,Java語言作為系統(tǒng)后臺開發(fā)語言。JSP技術(shù)作為前臺開發(fā)語言,其中使用JavaScript以及Jquery作為腳本語言。工程框架使用Struts+Spring+Hibernate框架。服務(wù)器配置:配置服務(wù)器。客戶端要求配置:谷歌瀏覽器、狐火瀏覽器以及IE瀏覽器以上版本。模塊功能分析用戶注冊登錄模塊新用戶在使用該聊天室系統(tǒng)時,必須先進(jìn)行注冊新用戶操作,后臺將注冊信息添加到數(shù)據(jù)庫中,用于胡勇登錄驗證;在注冊成功之后再進(jìn)行登錄;當(dāng)用戶名與密碼匹配成功,即可進(jìn)入聊天室系統(tǒng)。在線用戶顯示模塊當(dāng)用戶登錄進(jìn)入系統(tǒng)后,該頁面實現(xiàn)在線用戶的統(tǒng)計,并將在線用戶依次顯示出來。如果當(dāng)前用戶屬于管理員角色,則在普通用戶角色的右邊顯示“踢下線”鏈接,如果當(dāng)前用戶屬于普通用戶角色,則正常顯示在線用戶名。用戶交流聊天模塊該模塊主要負(fù)責(zé)發(fā)送信息內(nèi)容,選擇聊天對象;除此之外,可以修改聊天內(nèi)容的字體顏色以及發(fā)送的表情。發(fā)言的顏色和發(fā)言的表情通過下拉式組合框?qū)崿F(xiàn)。發(fā)言內(nèi)容書寫完畢后。通過點擊“發(fā)送”按鈕,發(fā)送聊天內(nèi)容。聊天信息顯示模塊當(dāng)用戶選擇聊天對象并發(fā)送聊天內(nèi)容后,顯示出當(dāng)前發(fā)送的內(nèi)容以及之前的歷史聊天內(nèi)容,聊天的內(nèi)容只有對話的兩人可見,其他人不可見。當(dāng)用戶退出系統(tǒng)后,再次登錄進(jìn)入聊天室時,兩人的對話記錄依然存在。系統(tǒng)消息顯示模塊系統(tǒng)消息提示所有用戶,聊天室的文明守則,以及當(dāng)其他用戶進(jìn)入、離開或被管理員踢出聊天室的情況。管理員管理用戶模塊管理員用戶可以與其他用戶聊天,并且隨時監(jiān)督其他用戶的言行,一旦出現(xiàn)不文明用語,即將改用戶踢出聊天室。輔助功能輔助功能包括:顯示全部聊天信息、退出聊天室、檢測用戶是否有新消息。顯示全部信息是指當(dāng)用戶之間的聊天信息占滿全屏的時候,點擊顯示全部信息,即可看到全部的聊天內(nèi)容。退出聊天室是指用戶離開聊天室。檢測用戶是否有新信息,當(dāng)用戶收到其他用戶發(fā)來的消息時,提示用戶。系統(tǒng)功能結(jié)構(gòu)圖2-1功能結(jié)構(gòu)圖系統(tǒng)數(shù)據(jù)流圖頂層數(shù)據(jù)流圖圖2-2頂層數(shù)據(jù)流圖一層數(shù)據(jù)流圖圖2-3一層數(shù)據(jù)流圖二層數(shù)據(jù)流圖圖2-4二層數(shù)據(jù)流圖數(shù)據(jù)字典數(shù)據(jù)項名稱:用戶名數(shù)據(jù)項別名:username說明:用戶唯一標(biāo)識類型:varchar長度:20取值范圍及含義:用戶登錄聊天室的用戶名長度在1~20之內(nèi)不論數(shù)字、字符還是符號。表2-1用戶名數(shù)據(jù)字典數(shù)據(jù)項名稱:密碼數(shù)據(jù)項別名:password說明:用戶登陸密碼類型:varchar長度:20取值范圍及含義:用戶登錄聊天室的密碼長度在1~20之內(nèi)不論數(shù)字、字母還是符號。表2-2密碼數(shù)據(jù)字典數(shù)據(jù)項名稱:級別數(shù)據(jù)項別名:type說明:用戶身份級別類型:varchar長度:20取值范圍及含義:用戶登錄聊天室的角色,管理員(admin)或者普通用戶(user)。表2-3級別數(shù)據(jù)字典概要設(shè)計系統(tǒng)總體結(jié)構(gòu)設(shè)計結(jié)構(gòu)設(shè)計系統(tǒng)圖3-1總體結(jié)構(gòu)圖系統(tǒng)功能模塊結(jié)構(gòu)用戶注冊登錄模塊用戶注冊是添加用戶到數(shù)據(jù)中,只能注冊普通用戶,當(dāng)注冊驗證信息合格,即可登錄進(jìn)入聊天室。圖3-2用戶注冊登錄H圖在線用戶顯示模塊當(dāng)用戶登錄進(jìn)入系統(tǒng)后,該頁面實現(xiàn)在線用戶的統(tǒng)計,并將在線用戶依次顯示出來。如果當(dāng)前用戶屬于管理員角色,則在普通用戶角色的右邊顯示“踢下線”鏈接,如果當(dāng)前用戶屬于普通用戶角色,則正常顯示在線用戶名。用戶交流聊天模塊交流包括選擇聊天對象,選擇發(fā)送表情,字體顏色。圖3-3用戶聊天H圖聊天信息顯示模塊聊天信息的顯示,首先系統(tǒng)必須獲得與當(dāng)前用戶正在進(jìn)行聊天的對象,根據(jù)聊天對象的用戶名,獲得存儲在系統(tǒng)中的聊天記錄,傳送到瀏覽器客戶端,瀏覽器客戶端進(jìn)行1s刷新界面,從而獲取兩人之間的私密聊天記錄并顯示在界面上。圖3-4聊天信息顯示H圖系統(tǒng)消息顯示模塊系統(tǒng)信息包括:聊天室守則、系統(tǒng)公告。圖3-5系統(tǒng)信息顯示H圖管理員管理用戶模塊管理員用戶可以與其他用戶聊天,并且隨時監(jiān)督其他用戶的言行, 一旦出現(xiàn)不文明用語,即將改用戶踢出聊天室。輔助功能輔助功能包括:顯示全部聊天信息、退出聊天室。顯示全部信息是指當(dāng)用戶之間的聊天信息占滿全屏的時候,點擊顯示全部信息,即可看到全部的聊天內(nèi)容。退出聊天室是指用戶離開聊天室。數(shù)據(jù)庫設(shè)計概念設(shè)計E-R圖:該系統(tǒng)只存在用戶一個實體,用戶的屬性包括:id、用戶名、密碼、級別。圖3-6E-R圖邏輯設(shè)計用戶表字段名數(shù)據(jù)類型長度說明描述idint4不空用戶iduserNamevarchar20不空用戶名passwordvarchar20不空登錄密碼typevarchar20不空用戶級別表3-1用戶表物理設(shè)計數(shù)據(jù)庫類型使用mySql數(shù)據(jù)庫,用戶表的主鍵為id。詳細(xì)設(shè)計流程圖用戶注冊登錄用戶注冊的時候,操作人員輸入想取的用戶民,輸入自創(chuàng)密碼與確認(rèn)密碼,點擊注冊;此時,系統(tǒng)會首先檢測兩次密碼是有一致,若不一致,提示用戶密碼不一致,請重新輸入。若一致,檢測用戶名是否已經(jīng)被注冊過,若已經(jīng)被注冊,提示是用戶,已被注冊。若為被注冊,系統(tǒng)添加用戶注冊信息到數(shù)據(jù)庫user表中。界面提示用戶注冊成功,并跳轉(zhuǎn)到登錄界面。注冊的用戶默認(rèn)type是普通用戶,即user。圖4-1注冊流程圖用戶登錄的時候,用戶輸入用戶名,密碼,點擊進(jìn)入按鈕,系統(tǒng)獲取用戶所填寫的用戶名與密碼,首先判斷該用戶名是否存在于數(shù)據(jù)庫,若不存在,提示用戶不存在該用戶,請重新填寫或注冊,若該用戶名存在,則判斷密碼與用戶名是否匹配,若不匹配,提示用戶密碼錯誤,請重新填寫,若匹配,進(jìn)入聊天室界面。圖4-2登錄流程圖在線用戶顯示模塊當(dāng)用戶登錄進(jìn)入聊天室時,系統(tǒng)會將用戶的信息存入application屬性的userMap中,進(jìn)入系統(tǒng)后,在jsp中獲取userMap,將所有的用戶信息中的用戶名顯示出來。圖4-3顯示在線人數(shù)流程圖用戶交流聊天模塊用戶實現(xiàn)找人聊天,點擊聊天對象的用戶名,獲取聊天對象,填寫發(fā)送內(nèi)容,選擇表情、與發(fā)送字體的顏色,點擊發(fā)送即可進(jìn)行聊天。在未選擇聊天對象時,點擊發(fā)送,提示用戶選擇聊天對象;在未填寫發(fā)送的內(nèi)容點擊發(fā)送時,提示用戶未填寫發(fā)送內(nèi)容。發(fā)送的表情默認(rèn)為[微笑著],字體顏色默認(rèn)為黑色。圖4-4發(fā)送信息流程圖聊天信息顯示模塊聊天信息顯示,首先必須保證聊天對象的用戶名不為空,當(dāng)不為空時,系統(tǒng)將獲取用戶名,在application作用域中獲得,相應(yīng)的聊天記錄屬性,返回到j(luò)sp中,并顯示在界面中。圖4-5顯示聊天記錄流程圖系統(tǒng)消息顯示模塊在用戶登錄聊天室時,系統(tǒng)存儲聊天室的聊天守則,并獲取登錄的用戶名,存儲系統(tǒng)公告(XXX進(jìn)入聊天室?。?;當(dāng)用戶離開聊天室時,修改系統(tǒng)公告(XXX離開聊天室!);當(dāng)用戶被管理員踢出聊天室時,修改系統(tǒng)公告(XXX,被管理員踢出聊天室?。?。圖4-6顯示系統(tǒng)信息流程圖管理員管理用戶模塊當(dāng)用戶使用了不文明的語言,管理員有權(quán)利該用戶踢出聊天室。獲取用戶名,在application中的userMap中獲得相應(yīng)的用戶session,清除該session即可將用戶踢下線。圖4-7管理員管理用戶流程圖輔助功能顯示與某人的全部聊天信息,當(dāng)聊天的內(nèi)容占滿全屏,點擊顯示全部消息,即可顯示全部信息。當(dāng)用戶離開聊天室時,系統(tǒng)獲取當(dāng)前用戶名,并釋放user的session。檢測用戶是否有新消息:圖4-8檢測信息流程圖算法用戶對話存儲算法首先獲取進(jìn)行對話雙方的用戶名以及id,再比較兩者的id若id1<id2,則messageName=userName1+userName2;否則messageName=userName2+userName1。圖4-9用戶對話存儲算法檢測用戶是否被踢算法當(dāng)用戶登錄進(jìn)入聊天室時,向application中存儲一個isKickedMap屬性,將用戶名添加到isKickedMap中并賦值為1(1表示在線,-1表示被踢)。當(dāng)管理員將某個用戶踢下線時,將isKickedMap屬性中的改用戶名修改成“*”符號,并賦值為-1。Jsp頁面每秒刷新一次,當(dāng)檢測到isKickedMap屬性中g(shù)etAttribute(“*”)==-1時,則該用戶被踢下線,此時要在jsp頁面中提示用戶已被踢下線,并返回登陸界面。圖4-10檢測用戶是否被踢算法檢測當(dāng)前用戶是否有新消息算法Jsp每隔1s就檢測一次當(dāng)前session中的call屬性中是否有值,如果有值,返回到j(luò)sp中,在jsp中遍歷出有個值,并且讓id為該值的<tr>標(biāo)簽的背景色為紅色。圖4-11檢測當(dāng)前用戶是否有新消息算法界面設(shè)計登錄首頁登陸首頁是寫在中的,前臺主要運用jsp動態(tài)網(wǎng)頁技術(shù)。并使用JavaScript語言判斷用戶是否正確輸入用戶名以及密碼。在登錄界面可以點擊注冊用戶進(jìn)入用戶注冊界面。圖4-12登錄界面注冊界面圖4-13注冊界面聊天室界面聊天室界面:左側(cè)是在線人員列表顯示,和在線人數(shù)的統(tǒng)計;右側(cè)是專門顯示系統(tǒng)公告的地方;中間屬于聊天內(nèi)容的顯示;下方是用戶發(fā)送消息的模塊,在該模塊中,當(dāng)用戶點擊聊天對象的用戶名,下方的第一個input框?qū)@取到聊天對象的用戶名,還可以選擇聊天的表情與字體的顏色,在最下角的input框可以編輯所要說的話,點擊發(fā)送,即可發(fā)送聊天內(nèi)容。圖4-14聊天室主界面工程結(jié)構(gòu)設(shè)計該系統(tǒng)采用SSH(struts2+spring+hibernate)框架搭建工程。系統(tǒng)的基本業(yè)務(wù)流程是:在表示層中,首先通過JSP頁面實現(xiàn)交互界面,負(fù)責(zé)接收請求(Request)和傳送響應(yīng)(Response),然后Struts根據(jù)配置文件將ActionServlet接收到的Request委派給相應(yīng)的Action處理。在業(yè)務(wù)層中,管理服務(wù)組件的SpringIOC容器負(fù)責(zé)向Action提供業(yè)務(wù)模型(Model)組件和該組件的協(xié)作對象數(shù)據(jù)處理(DAO)組件完成業(yè)務(wù)邏輯,并提供事務(wù)處理、緩沖池等容器組件以提升系統(tǒng)性能和保證數(shù)據(jù)的完整性。而在持久層中,則依賴于Hibernate的對象化映射和數(shù)據(jù)庫交互,處理DAO組件請求的數(shù)據(jù),并返回處理結(jié)果。采用上述開發(fā)模型,不僅實現(xiàn)了視圖、控制器與模型的徹底分離,而且還實現(xiàn)了業(yè)務(wù)邏輯層與持久層的分離。這樣無論前端如何變化,模型層只需很少的改動,并且數(shù)據(jù)庫的變化也不會對前端有所影響,大大提高了系統(tǒng)的可復(fù)用性。而且由于不同層之間耦合度小,有利于團(tuán)隊成員并行工作,大大提高了開發(fā)效率。工程結(jié)構(gòu)中其中:文件是關(guān)于配置spring的配置文件,主要是將各種POJO,JAVA,action配置到XML轉(zhuǎn)交給beanfactory管理,降低耦合度。文件配置struts的屬性值,程序員可以通過它來管理Struts2
框架中定義的大量常量。文件是一個標(biāo)準(zhǔn)的properties文件。為Struts2的核心配置文件。文件主要負(fù)責(zé)管理應(yīng)用中的Action映射,以及該Action包含的Result定義。圖4-15工程結(jié)構(gòu)各類功能設(shè)計類圖圖4-16工程類圖實體類,屬性包括:privateintid;etAttribute(messageName,sourceMessage);到此為止,聊天內(nèi)容就已經(jīng)發(fā)送,等發(fā)言對象端接收并顯示消息內(nèi)容。在面管理員aaa將發(fā)送一段文字給用戶zhuwei:圖5-12aaa向zhuwei發(fā)送一條對話聊天信息顯示模塊當(dāng)聊天對象沒有選擇聊天對象時,例如用戶“zhuwei”開始并沒有選擇聊天對象“aaa”,但是“aaa”向“zhuwei”發(fā)送了消息,此時,系統(tǒng)檢測到“zhuwei”有新消息,所有在jsp頁面中將把“aaa”的背景色變成紅色以提醒“zhuwei”有新消息來自“aaa”,如下圖所示。這個功能在輔助功能中介紹:圖5-13zhuwei檢索到aaa有新消息提醒當(dāng)選擇聊天對象aaa后,jsp開始刷洗界面,并調(diào)用JavaScript的方法showSendMessage(),在該方法中還是已post的異步刷新方式,調(diào)用后臺的。在該action中同樣將獲取application的消息名稱,并根據(jù)此消息名稱獲得相應(yīng)的對話:Stringmessage=(String)().getAttribute(messageName);如果message不等于null,則向jsp中輸出message:().println(message);在jsp中的回調(diào)函數(shù)中獲得data,并在id為content的div中顯示data:$("#content").html(sysBBS+data+"</span>");Jsp界面每隔1s就刷新界面,調(diào)用后臺的action獲取最新的消息。例如用戶“zhuwei”收到來自“aaa”的消息,如下圖所示:圖5-14zhuwei收到aaa的對話并顯示在聊天內(nèi)容中用戶“zhuwei”回復(fù)用戶“aaa”:圖5-15zhuwei向aaa回復(fù)一條對話在用戶“aaa”的界面中收到來自“zhuwei”的回話:圖5-16aaa收到zhuwei的回復(fù)至此,聊天信息的顯示完畢。系統(tǒng)消息顯示模塊系統(tǒng)消息包括聊天室守則“歡迎來到聊天室,請遵守聊天室規(guī)則,不要使用不文明用語?!钡娘@示;還有就是系統(tǒng)公告的顯示。首先聊天室準(zhǔn)則的顯示,一旦用戶登錄進(jìn)入聊天室守則就被顯示在聊天內(nèi)容的下方,它的實現(xiàn)主要是在jsp中,一旦加載了聊天室主頁就執(zhí)行:varsysBBS="<spanstyle='font-size:14px;color:red;line-height:30px;'>歡迎來到聊天室,請遵守聊天室規(guī)則,不要使用不文明用語。</span><br><spanstyle='line-height:22px;'>";$("#content").html(sysBBS);這兩句js代碼。而當(dāng)用戶開始選擇聊天對象進(jìn)行聊天時,調(diào)用的顯示聊天信息的action返回到j(luò)sp的data時,sysBBS與data一同顯示在聊天內(nèi)容上:$("#content").html(sysBBS+data+"</span>");對于系統(tǒng)公告,首先創(chuàng)建了一個實體類Message,其中它的屬性包括了所有系統(tǒng)公告的內(nèi)容;當(dāng)用戶調(diào)用登錄action時,并且驗證成功,登錄成功時,向application中添加屬性sysMessageMap<String,String>,并且屬性記錄用戶登錄情況:(),());().setAttribute("sysMessageMap",sysMessageMap);當(dāng)用戶離開聊天室時,向application中得到sysMessageMap屬性,并根據(jù)用戶名得到對應(yīng)的值,將其修改為(),再次存入application當(dāng)中。當(dāng)用戶被管理員踢出聊天時,同樣獲取sysMessageMap,根據(jù)用戶名得到相應(yīng)的值,將其修改成(),再次存入application當(dāng)中。下面將用戶“zhuwei”退出聊天室,或是將其踢出聊天室,效果如下圖:圖5-17aaa將zhuwei踢出聊天室圖5-18zhuwei主動離開聊天室管理員管理用戶模塊當(dāng)普通用戶使用了不文明的語言,管理員有權(quán)將其踢出聊天室。當(dāng)管理員點擊“踢下線”操作時,調(diào)用后臺的,并將踢出用戶的id與用戶名傳參到后臺,在action中,獲取application中的userMap,根據(jù)id得到相應(yīng)的session,清除該session即可踢出用戶。但是存在一個BUG,當(dāng)用戶自己退出聊天室時,其session也將被清除,由此導(dǎo)致,jsp在調(diào)用js方法check()檢測是否被踢出去的時候,出現(xiàn)用戶自己退出聊天室時也被當(dāng)成被踢提示用戶“由于您使用不文明語言,被踢下線了!”。解決辦法是:在application中再存入一個屬性isKickedMap<String,Integer>,關(guān)鍵字存入用戶名,值存入數(shù)字,1表示在線;-1表示被踢。當(dāng)用戶被踢時,將其用戶名改為“*”,并將值改為-1。這樣在調(diào)用check()方法時,先判斷是否存在“*”,并且其值是否為-1,才進(jìn)行被踢提示,否則不提示:if("*")!=null){ if((Integer)("*")==-1){etAttribute("isKicked",isKickedMap); if(user==null){ ().println("1"); }else{ ().println("2"); } } }else{ ().println("3"); }輔助功能顯示全部聊天信息:直接調(diào)用js方法checkScrollScreen()if(!$("#scrollScreen").attr("checked")){ $("#content").css("overflow","scroll"); }else{ $("#content").css("overflow","hidden"); crollTop($("#content").height()*2); } setTimeout('checkScrollScreen()',500);退出聊天室:釋放當(dāng)前用戶的session即可。提醒用戶是否有新信息:每個用戶的session當(dāng)中存入一個call屬性,該屬性屬于List<String>call=newArrayList<String>();類型;在某個用戶對其進(jìn)行聊天的時候,根據(jù)聊天對象的名稱在application獲取session,在session當(dāng)中獲取call屬性,將發(fā)起會話的用戶名稱添加到call當(dāng)中:List<String>call=(List<String>)("call");(from);("call",call);在當(dāng)前用戶的jsp當(dāng)中每隔1s就調(diào)用一次gainCall()方法,其中調(diào)用,在這個action中獲取該用戶的session的call屬性,遍歷出所有用戶名,將用戶名返回到j(luò)sp中:if(data!=null){ data=(); varstrs=newArray();ss("background-color","red"); } }將id為該用戶名的<tr>設(shè)置為紅色;當(dāng)用戶已經(jīng)讀取這些信息之后,依次將call中的值刪除:List<String>call=(List<String>)("call"); if(call!=null&&!()){ for(inti=0;i<();i++){ if(i).equals(to)){ (i); i--; } } }這樣在讀取完信息之后,就不會讓用戶名的背景色一直為紅色,將恢復(fù)原色表示沒有最新消息。圖5-19zhuwei接到aaa的消息提醒圖5-20zhuwei讀取aaa的消息總結(jié)與體會開發(fā)中遇到的問題我在聊天室系統(tǒng)程序設(shè)計過程中,遇到的問題大體可分為兩類:A.知道但不會。這類問題往往是我知道應(yīng)該怎么去設(shè)計,但卻就是動不了手,要不就錯誤百出。B.完全不會。這類問題擺在面前,我只能束手無策,苦惱而又無奈。問題分析與解決方法對于第一類問題,其實本質(zhì)上不存在什么大的問題,都是因為自己平時學(xué)習(xí)功底不夠,還有編程時不夠謹(jǐn)慎,才造成的。人非完人,學(xué)過了,有點不懂或迷惑的地方也是很正常的,再說竟然知道怎么做,有希望,那就有信心去解決。我在精神上堅定了,就能耐下性子征服它。通過查閱書本,仔佃分析、思考,請教同學(xué)、老師,這類問題還是得到了很好的解決。對于第二類問題。造成的原因可分兩種:一是明顯的超過了我的能力范圍;二是因為我對問題的認(rèn)識、分析不夠深入造成的假復(fù)雜現(xiàn)象。此類問題非要對癥下藥,效果方最好。如果沒有找出原因而盲目努力,是不會有太大效果的。在這類問題出現(xiàn)后,人常常會感到煩躁、泄氣,這時便不可能出現(xiàn)解決問題的可能。怎么辦好?我想,最重要的是要能穩(wěn)住心態(tài),相信自己終究會取得勝利的,同時也必須清楚地認(rèn)識到自己的能力是有限的。此時,你需要學(xué)習(xí)知識,更要多借鑒他人在相同問題上的處理方法,弄懂了,一切就都好辦了,離解決問題也就不會太遠(yuǎn)了。經(jīng)驗與教訓(xùn)由于能力及時間的關(guān)系,這個Java聊天室程序沒能達(dá)到其要求,很有點失望,很有點遺憾。在建立通信和連接數(shù)據(jù)庫時,雖然很認(rèn)真地在做,可總還是失敗,這也導(dǎo)致了整個聊天室的無法運作(只有界面而已)。事實如此,不再贅言了。這次Java項目的實現(xiàn),似乎量上過大,然而堅持做下來,還有很有意義和收獲的。也許我的所得,對他人而言,可謂不值一提,但對我來說,它們的確讓我在思想和能力上,更上了一層樓。下面我就談?wù)勎业捏w會:Jave與C++語言編程相比,有著本質(zhì)的不同.前者面向?qū)ο?即面向問題而設(shè)計程序,后者則是分析問題后,面向問題解決的過程而設(shè)計程序.本質(zhì)的不同,導(dǎo)致程序設(shè)計的明顯差異.Java設(shè)計的程序,通過劃分類,通常都顯得通俗易懂,條理清晰,而且很簡捷.這是C語言所無法比擬的,除非它有很好的數(shù)據(jù)結(jié)構(gòu),但必須承認(rèn),就算如此,還是難以與之平行的.用Java編寫的聊天室,其實也不是那么復(fù)雜,但要是換用C語言,我真不知道其工作量有多大了。由此,我看到了Java的優(yōu)越性,更堅定了我學(xué)好Java的決心。用Java解決實際問題,分析問題是至關(guān)重要的。分析要合理、全面,只有這樣,劃分的類就不至于過大或過小。一個復(fù)雜的問題,就象這個聊天室吧,一開始不是什么都會做,先就完成簡單、容易的,然后再帶著小有的成就感,去征服難弄的部分。這種思想是處處適用的。想說的,我已經(jīng)說完了。最后再說一句:雖然目前我的編程能力很差勁,可我心中已有了目標(biāo),也許我走不到終點,但我一定會前進(jìn),絕不輕易放棄!夢想來之不易!
參考文獻(xiàn)[1]李芝興,楊瑞龍.Java程序設(shè)計之網(wǎng)絡(luò)編程(第2版)[M].北京:清華大學(xué)出版社,2009.[2]梁勇.細(xì)說Java[M].北京:人民郵電出版社,2010.[3]楊選輝.信息系統(tǒng)分析與設(shè)計[M].北京:清華大學(xué)出版社,2007.[4]刁成嘉.UML系統(tǒng)建模與分析設(shè)計[M].北京:機(jī)械工業(yè)出版社,2007.[5]王珊,薩師煊.?dāng)?shù)據(jù)庫系統(tǒng)概論(第4版).北京:高等教育出版社,2006.[6]繆勇,施俊,李新鋒.Struts2+Spring+Hibernate框架技術(shù)精講與整合案例.北京:清華大學(xué)出版社,2015.[7]allenhui222.網(wǎng)絡(luò)聊天室的設(shè)計與實現(xiàn).,2015-04-07.
附錄SSH框架的配置文件:version=""encoding="UTF-8"?><web-appversion=""xmlns="" xmlns:xsi="" xsi:schemaLocation=" "> <display-name></display-name> <listener> <listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:/ </param-value> </context-param> <filter> <filter-name>struts2</filter-name> <filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class> </listener> <welcome-file-list> <welcome-file></welcome-file> </welcome-file-list></web-app>version=""encoding="UTF-8"?><beansxmlns="" xmlns:xsi="" xmlns:aop="" xmlns:tx="" xsi:schemaLocation=""><!--連接池--><beanid="dataSource"class=""destroy-method="close"><propertyname="driverClass"value=""></property><propertyname="jdbcUrl"value="jdbc:"></property><propertyname="user"value="root"></property><propertyname="password"value="root"></property><!--連接池中保留的最小連接數(shù)。--><propertyname="minPoolSize"value="5"></property><!--連接池中保留的最大連接數(shù)。Default:15--><propertyname="maxPoolSize"value="30"></property><!--初始化時獲取的連接數(shù),取值應(yīng)在minPoolSize與maxPoolSize之間。Default:3--><propertyname="initialPoolSize"value="10"></property><!--最大空閑時間,60秒內(nèi)未使用則連接被丟棄。若為0則永不丟棄。Default:0--><propertyname="maxIdleTime"value="60"></property><!--當(dāng)連接池中的連接耗盡的時候c3p0一次同時獲取的連接數(shù)。Default:3--><propertyname="acquireIncrement"value="5"></property></bean><beanid="sessionFactory"class=""><propertyname="dataSource"ref="dataSource"></property><!--加載所有的hibernate實例的映射文件--><propertyname="mappingLocations"><list><value>classpath:com/cust/hbm/orm/*.</value></list></property><propertyname="hibernateProperties"><props><propkey=""><propkey="">true</prop><propkey="">true</prop></props></property></bean><beanid="transactionManager" class=""> <propertyname="sessionFactory"ref="sessionFactory"/> </bean> <!--定義事務(wù)通知--> <tx:adviceid="txAdvice"transaction-manager="transactionManager"> <!--定義方法的過濾規(guī)則--> <tx:attributes> <tx:methodname="save*"rollback-for=""/> <tx:methodname="delete*"rollback-for=""/> <tx:methodname="update*"rollback-for=""/> <tx:methodname="query*"rollback-for=""/> <tx:methodname="execute*"rollback-for=""/> </tx:attributes> </tx:advice> <!--定義AOP--> <aop:config> <aop:advisorpointcut="execution(*"advice-ref="txAdvice"/> </aop:config> <!--配置cglib,service不需要實現(xiàn)接口--> <aop:aspectj-autoproxyproxy-target-class="true"/><beanid="BaseHibernateDAO"class=""><propertyname="sessionFactory"ref="sessionFactory"/></bean> <!--登錄--> <beanid="LoginAction"class=""> <propertyname="loginSrvImpl"ref="LoginSrvImpl"></property> </bean> <beanid="LoginSrvImpl"class=""> <propertyname="dao"ref="BaseHibernateDAO"></property> </bean> <beanid="KickAction"class=""></bean> <beanid="SystemMessageAction"class=""></bean> <beanid="SendMessageAction"class=""></bean> <beanid="ShowSendMessage"class=""></bean> <beanid="ExitAction"class=""></bean> <beanid="CheckNewMessageAction"class=""></bean> <beanid="CheckUserIsKickAction"class=""></bean> <beanid="RegisterAction"class=""> <propertyname="registerSrvImpl"ref="RegisterSrvImpl"></property> </bean> <beanid="RegisterSrvImpl"class=""> <propertyname="dao"ref="BaseHibernateDAO"></property> </bean><
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷作外包合同范本
- 凈化車間合同范本
- 兒童套裝采購合同范本
- 修繕祖墳合同范本
- 制作標(biāo)語購銷合同范本
- 聘請設(shè)計師合同范本
- 保證合同范本模板
- 代理飲料合同范本
- 劃撥土地房屋出售合同范本
- 加工柜體合同范本
- 班會課件:逆風(fēng)飛翔破繭成蝶-從《哪吒之魔童鬧?!房辞啻浩诘某砷L與責(zé)任
- 初三物理常識試卷單選題100道及答案
- 高中英語新課程標(biāo)準(zhǔn)解讀課件
- 1.2《友邦驚詫論》教學(xué)設(shè)計-【中職專用】高二語文同步講堂(高教版2024·拓展模塊上冊)
- 加班調(diào)休單(最新版)
- 智慧金字塔立體篇第四冊、第五冊答案全解
- 導(dǎo)論公共財政學(xué)概論.ppt
- 2022年人力資源管理師課程表
- 夢中的婚禮鋼琴簡譜(共6頁)
- 新生兒心理的發(fā)生
- 2013八年級上英語培優(yōu)參考word
評論
0/150
提交評論