版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、畢 業(yè) 設(shè) 計(jì)網(wǎng)頁(yè)即時(shí)聊天工具的設(shè)計(jì)與實(shí)現(xiàn)摘 要聊天工具作為計(jì)算機(jī)網(wǎng)絡(luò)的應(yīng)用之一,受到了用戶的普遍愛(ài)好,它把人們帶進(jìn)了一個(gè)虛擬的網(wǎng)絡(luò)世界,大大加深了人們之間的聯(lián)系。從單一的文本聊天,到語(yǔ)音聊天以及到現(xiàn)在的圖像、視頻聊天、及時(shí)短信的發(fā)送和在線游戲等功能的開(kāi)發(fā),已經(jīng)大大的拓展了聊天工具的概念,它將會(huì)作為未來(lái)人們通過(guò)因特網(wǎng)相互聯(lián)系和娛樂(lè)的主要平臺(tái)。此次設(shè)計(jì)從實(shí)際工程應(yīng)用角度出發(fā),以計(jì)算機(jī)網(wǎng)絡(luò)原理為指導(dǎo),結(jié)合當(dāng)前網(wǎng)絡(luò)中的一些常用技術(shù),編程實(shí)現(xiàn)基于Java的網(wǎng)絡(luò)聊天工具,涉及的內(nèi)容包括web通信,身份驗(yàn)證和注冊(cè)登陸,建立效勞器,連接效勞器以及數(shù)據(jù)接口實(shí)現(xiàn)等。論文對(duì)當(dāng)今聊天軟件的開(kāi)展情況、與該聊天軟件相關(guān)
2、的各種技術(shù)以及該聊天工具的實(shí)現(xiàn)做了一個(gè)詳細(xì)的闡述。論文主要分為四大版塊。第一大版塊主要介紹了與設(shè)計(jì)有關(guān)的背景知識(shí),相關(guān)技術(shù),以及此次設(shè)計(jì)的意義所在;第二大版塊主要對(duì)設(shè)計(jì)的可行性進(jìn)行了分析,并對(duì)系統(tǒng)的具體實(shí)施做了鋪墊;第三大版塊為最重要版塊,即工程的具體設(shè)計(jì)以及關(guān)鍵技術(shù)的運(yùn)用與實(shí)現(xiàn);第四大版塊為演示版塊,主要對(duì)作品進(jìn)行展示。關(guān)鍵字: Java Ajax MySQL 網(wǎng)頁(yè)聊天 學(xué)生承諾書(shū)本人鄭重承諾:所呈交的論文是本人在導(dǎo)師的指導(dǎo)下獨(dú)立進(jìn)行研究所取得的研究成果。除了文中特別加以標(biāo)注引用的內(nèi)容外,本論文不包含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫(xiě)的成果作品。 作者簽名: 年 月 日目 錄1 前言11.1
3、工程開(kāi)發(fā)的背景11.2 典型聊天工具的分析21.3 工程開(kāi)發(fā)的主要內(nèi)容41.4 工程開(kāi)發(fā)的意義41.5 工程開(kāi)發(fā)的過(guò)程42 系統(tǒng)開(kāi)發(fā)相關(guān)技術(shù)52.1 Struts mvc框架52.2 Ajax的定時(shí)刷新62.3 Json92.4 Jquery102.5 Hibernate102.6 Css+div103 系統(tǒng)開(kāi)發(fā)113.1 系統(tǒng)目標(biāo)113.2 可行性分析113.2.1 經(jīng)濟(jì)可行性113.2.2 運(yùn)行可行性113.3 系統(tǒng)功能結(jié)構(gòu)123.4 系統(tǒng)實(shí)施123.4.1 開(kāi)發(fā)環(huán)境123.4.2 數(shù)據(jù)庫(kù)設(shè)計(jì)123.4.3 數(shù)據(jù)庫(kù)操作子系統(tǒng)143.4.4 業(yè)務(wù)邏輯子系統(tǒng)193.4.5 系統(tǒng)時(shí)序圖303.4
4、.6 采用的關(guān)鍵技術(shù)313.4.7 系統(tǒng)測(cè)試與主要界面343.5 運(yùn)行環(huán)境384 結(jié)束語(yǔ)38致 謝40參 考 文 獻(xiàn)41Abstract42仲愷農(nóng)業(yè)技術(shù)學(xué)院畢業(yè)論文(設(shè)計(jì))成績(jī)?cè)u(píng)定表431 前言1.1 工程開(kāi)發(fā)的背景Instant Messaging即時(shí)通訊,實(shí)時(shí)傳訊的縮寫(xiě)是IM,這是一種可以讓使用者在網(wǎng)絡(luò)上建立某種私人聊天的實(shí)時(shí)通訊效勞。IM成為互聯(lián)網(wǎng)最廣泛的應(yīng)用,事先誰(shuí)也沒(méi)有料到;IM成為互聯(lián)網(wǎng)最賺錢的工具之一,這已是有目共睹的事實(shí)。于是,引發(fā)了眾多對(duì)手的角逐,這就注定了,未來(lái)的IM市場(chǎng)從此不再平靜。IM與互聯(lián)網(wǎng)共生共榮,改變了現(xiàn)代人的溝通方式,已成為網(wǎng)民不可缺少的應(yīng)用之一,不僅可以滿足個(gè)
5、體用戶的不同需求,而且正在成為企業(yè)用戶新的通訊渠道。可以預(yù)見(jiàn),IM將成為未來(lái)人類社會(huì)的最重要的通訊工具之一,借助互聯(lián)網(wǎng),不再需要通過(guò) ,也能進(jìn)行可視交流。所以,未來(lái)IM市場(chǎng)競(jìng)爭(zhēng)將更加劇烈。在中國(guó)IM市場(chǎng)上,從最初的單一文字通訊,到目前的語(yǔ)音視頻溝通,無(wú)論是技術(shù)的進(jìn)步,還是應(yīng)用的推廣,都預(yù)示著一種趨勢(shì),未來(lái)的即時(shí)通信還有很大拓展空間。應(yīng)當(dāng)看到,這個(gè)空間將集中于應(yīng)用與平安兩大主題。盡管市場(chǎng)IM眾多,但QQ仍是一家獨(dú)大,在即時(shí)通訊的競(jìng)爭(zhēng)中已經(jīng)穩(wěn)居領(lǐng)導(dǎo)者的市場(chǎng)地位,占領(lǐng)國(guó)內(nèi)市場(chǎng)70%以上的份額,創(chuàng)新能力極強(qiáng)。MSN也已經(jīng)穩(wěn)定在辦公型即時(shí)通訊領(lǐng)域的領(lǐng)導(dǎo)者定位,成為“白領(lǐng)在線協(xié)同辦公的工具。在整個(gè)即時(shí)通訊
6、領(lǐng)域,QQ、MSN目前保持了超過(guò)80%的市場(chǎng)份額。目前,新浪UC、飛信、阿里旺旺、雅虎通、Skype、網(wǎng)易泡泡、搜狐搜Q、百度等都已入局。 針對(duì)國(guó)內(nèi)即時(shí)通訊市場(chǎng)的最新調(diào)研結(jié)果。調(diào)查顯示,我國(guó)即時(shí)通訊市場(chǎng)無(wú)論是用戶總?cè)藬?shù)、總注冊(cè)賬戶數(shù),還是活潑賬戶數(shù)、人均擁有即時(shí)通訊賬戶數(shù),都創(chuàng)下了世界之最。我們預(yù)計(jì)未來(lái)隨著中國(guó)上網(wǎng)人口的增長(zhǎng),以及即時(shí)通訊軟件的不斷普及,即時(shí)通訊在線人數(shù)將保持快速增長(zhǎng)。中國(guó)網(wǎng)民已達(dá)1億,IM產(chǎn)品越來(lái)越多樣,群雄紛爭(zhēng),硝煙四起。而IM產(chǎn)品中,開(kāi)源的,不開(kāi)源的,都不乏各自的特色?,F(xiàn)在的聊天工具已經(jīng)比擬成熟,個(gè)人無(wú)法與一個(gè)公司競(jìng)爭(zhēng),但是作為一個(gè)設(shè)計(jì)工程,目的簡(jiǎn)單明確,使此次設(shè)計(jì)的聊天
7、工具能夠?qū)崿F(xiàn),并完成目前一些同類聊天工具的大局部功能。 典型聊天工具的分析 圖1 QQ登陸界面騰訊QQ是由深圳市騰訊計(jì)算機(jī)系統(tǒng)開(kāi)發(fā)的一款基于Internet的即時(shí)通信IM軟件,我們可以使用QQ和好友進(jìn)行交流,信息和自定義圖片或相片即時(shí)發(fā)送和接收,語(yǔ)音視頻面對(duì)面聊天,功能非常全面。此外QQ還具有與 聊天、bp機(jī)網(wǎng)上尋呼、聊天室、點(diǎn)對(duì)點(diǎn)斷點(diǎn)續(xù)傳傳輸文件、共享文件、qq郵箱、備忘錄、網(wǎng)絡(luò)收藏夾、發(fā)送賀卡等功能。QQ不僅僅是簡(jiǎn)單的即時(shí)通信軟件,它與全國(guó)多家尋呼臺(tái)、移動(dòng)通信公司合作,實(shí)現(xiàn)傳統(tǒng)的無(wú)線尋呼網(wǎng)、GSM移動(dòng) 的短消息互聯(lián),是國(guó)內(nèi)最為流行功能最強(qiáng)的即時(shí)通信IM軟件。騰訊QQ支持在線聊天、即時(shí)傳送視
8、頻、語(yǔ)音和文件等多種多樣的功能。同時(shí),QQ還可以與移動(dòng)通訊終端、IP 網(wǎng)、無(wú)線尋呼等多種通訊方式相連,使QQ不僅僅是單純意義的網(wǎng)絡(luò)虛擬呼機(jī),而是一種方便、實(shí)用、高效的即時(shí)通信工具。QQ是現(xiàn)在在中國(guó)被使用次數(shù)最多的通訊工具。 圖2 UC登陸界面UC是新浪網(wǎng)推出的一種網(wǎng)絡(luò)即時(shí)聊天工具,功能根據(jù)網(wǎng)絡(luò)技術(shù)的進(jìn)步會(huì)不斷提升,因此會(huì)有不同的版本。擎旗技術(shù)的UcSTAR也完全純軟件實(shí)現(xiàn)的UC產(chǎn)品,根據(jù)客戶的不同需求也定制了不同的版本滿足客戶的需求。UcSTAR的簡(jiǎn)單功能介紹:UcSTAR統(tǒng)一通信是擎旗技術(shù)推出的企業(yè)級(jí)融合通信平臺(tái);提供多種通訊手段IM企業(yè)即時(shí)通信、文件、視頻、語(yǔ)音、EMAIL、SMS短信中心
9、、 、VOIP、MSN/QQ互通、WEB呼叫中心,融合企業(yè)的多種應(yīng)用系統(tǒng)緊密集成OA、CMS>、ERP、EIP、Portal、網(wǎng)站、應(yīng)用軟件,交流對(duì)象和交流內(nèi)容可管理,可控制,可擴(kuò)展,輕松實(shí)現(xiàn)部署企業(yè)的統(tǒng)一工作平臺(tái)。持久集團(tuán)化部署:垂直管理,多帳號(hào)支持、S2S分支互連 人性化的應(yīng)用:我的部門、常用聯(lián)系人、工作組支持、公告、備忘錄、消息播送 互連互通功能:QQ、MSN互通 多種客戶端體驗(yàn):C/S客戶端、WEB客戶端、 客戶端 專業(yè)級(jí)的視頻會(huì)議功能:白板、文檔共享、網(wǎng)頁(yè)共享、程序共享,最大支持16路視頻、9路混音企業(yè)短信中心SMS:雙向SMS互發(fā),自定義短信群組權(quán)限管理靈活,支持遠(yuǎn)程管理。
10、融合能力強(qiáng)大:和OA、CMS、ERP、EIP、Portal、網(wǎng)站、應(yīng)用軟件無(wú)縫集成 最大支持單個(gè)部署30萬(wàn)同時(shí)在線,組織結(jié)構(gòu)部署人數(shù)不限制。1.3 工程開(kāi)發(fā)的主要內(nèi)容設(shè)計(jì)并實(shí)現(xiàn)基于Java 的文本聊天程序,涉及的內(nèi)容包括web 通信,身份驗(yàn)證和注冊(cè)登陸,建立效勞器,連接效勞器以及數(shù)據(jù)接口實(shí)現(xiàn)等。,比擬容易實(shí)現(xiàn)。1.4 工程開(kāi)發(fā)的意義本工程是作為本科的畢業(yè)設(shè)計(jì)課題提出來(lái)的,它規(guī)模適中,適合于個(gè)人開(kāi)發(fā),能夠鍛煉同學(xué)的學(xué)習(xí)新知識(shí)能力,鍛煉同學(xué)的編程能力,鍛煉同學(xué)的軟件工程的思維方式。目前,計(jì)算機(jī)的開(kāi)展離不開(kāi)網(wǎng)絡(luò)這一方向,網(wǎng)絡(luò)將大大擴(kuò)展計(jì)算機(jī)的功能,研究計(jì)算機(jī)在網(wǎng)絡(luò)方面的技術(shù)以及應(yīng)用,挖掘計(jì)算機(jī)的網(wǎng)絡(luò)
11、潛能,將能夠大大提高我們對(duì)計(jì)算機(jī)的本身的認(rèn)識(shí),同時(shí)也能加深對(duì)計(jì)算機(jī)網(wǎng)絡(luò)的認(rèn)識(shí)。網(wǎng)絡(luò)的一大應(yīng)用就是用于用戶之間聯(lián)絡(luò)的聊天工具,通過(guò)對(duì)聊天工具的開(kāi)發(fā),我們將了解計(jì)算機(jī)如何通過(guò)網(wǎng)絡(luò)相互通信以及在此相互通信的根底上實(shí)現(xiàn)的應(yīng)用程序級(jí)的協(xié)議。1.5 工程開(kāi)發(fā)的過(guò)程該工程的開(kāi)發(fā)過(guò)程大致分為三個(gè)大的階段:第一個(gè)階段是該軟件的方案,分析和調(diào)研階段,在這個(gè)階段里,大致的學(xué)習(xí)了相關(guān)的技術(shù),分析了相關(guān)的聊天軟件的性能和功能。第二階段就是軟件的設(shè)計(jì)與實(shí)現(xiàn)。該軟件的總體開(kāi)發(fā)模式采用原型演化的開(kāi)發(fā)模型,因?yàn)檫@個(gè)工程只是個(gè)人開(kāi)發(fā),而且先前對(duì)有些知識(shí)不是很了解,所有這些都是采用原型開(kāi)發(fā)的必然因素?,F(xiàn)在該工程已經(jīng)根本上完成了所有
12、的要求,還擴(kuò)展了一些功能。第三個(gè)階段是軟件的測(cè)試和文檔整理階段。完成了對(duì)軟件的所有的功能的測(cè)試,即可整理軟件的文檔,寫(xiě)完論文。軟件采用原型的開(kāi)發(fā)模型,分成登陸模塊,信息通信模塊等主要的幾大模塊。2 系統(tǒng)開(kāi)發(fā)相關(guān)技術(shù) 2.1 Struts mvc框架Struts是Apache組織的一個(gè)工程,像其他的Apache組織的工程一樣,它也是開(kāi)放源碼工程。Struts是一個(gè)比擬好的MVC框架提供了對(duì)開(kāi)發(fā)MVC系統(tǒng)的底層支持,它采用的主要技術(shù)是Servlet,JSP和custom tag library。圖3 模型-視圖-控制器 (MVC)示意圖JSP 標(biāo)記只解決了局部問(wèn)題。我們還得處理驗(yàn)證、流程控制和更新
13、應(yīng)用程序的狀態(tài)等問(wèn)題。這正是模型-視圖-控制器 (MVC)發(fā)揮作用的地方。MVC 通過(guò)將問(wèn)題分為三個(gè)類別來(lái)幫助解決單一模塊方法所遇到的某些問(wèn)題:Model模型 模型包含應(yīng)用程序的核心功能。模型封裝了應(yīng)用程序的狀態(tài)。有時(shí)它包含的唯一功能就是狀態(tài)。它對(duì)視圖或控制器一無(wú)所知。 View視圖 視圖提供模型的表示。它是應(yīng)用程序的 外觀。視圖可以訪問(wèn)模型的讀方法,但不能訪問(wèn)寫(xiě)方法。此外,它對(duì)控制器一無(wú)所知。當(dāng)更改模型時(shí),視圖應(yīng)得到通知。 Controller控制器 控制器對(duì)用戶的輸入作出反響。它創(chuàng)立并設(shè)置模型。2.2 Ajax的定時(shí)刷新利用XML 無(wú)刷新自動(dòng)實(shí)時(shí)更新數(shù)據(jù). 傳統(tǒng)上,我們?yōu)g覽網(wǎng)頁(yè),如果參加最
14、新的數(shù)據(jù).只能是等我們重新向效勞器端請(qǐng)求時(shí)才能顯示出來(lái). 但是,對(duì)于一些時(shí)效性很強(qiáng)的網(wǎng)站.傳統(tǒng)的這種做法是不能滿足的. 我們可以讓程序自動(dòng)刷新.定時(shí)向效勞器請(qǐng)求數(shù)據(jù).5秒取一次數(shù)據(jù),10秒取一次數(shù)據(jù). 利用XML 發(fā)出請(qǐng)求并取得數(shù)據(jù).傳到客戶端,客戶端重新組織并顯示數(shù)據(jù). demo.htm 前臺(tái)顯示. <script language="JavaScript"> function GetResult() /* *- GetResult() - * GetResult() * 功能:通過(guò)XML 發(fā)送請(qǐng)求,返回結(jié)果. * 參數(shù):str,字符串,發(fā)送條件. * 實(shí)例:
15、GetResult(); * author:yoyo* update:2021-4-11 19:02 *- GetResult() - */var oBao = new ActiveXObject("Microsoft.XML "); /特殊字符:+,%,&,=,?等的傳輸解決方法.字符串先用escape編碼的. /Update:2021-4-11 12:22 oBao.open("POST","Server.asp",false); oBao.send(); /效勞器端處理返回的是經(jīng)過(guò)escape編碼的字符串. var st
16、rResult = unescape(oBao.responseText); /將字符串分開(kāi). var arrResult = strResult.split("#"); RemoveRow(); /刪除以前的數(shù)據(jù). /將取得的字符串分開(kāi),并寫(xiě)入表格中. for(var i=0;i<arrResult.length;i+) arrTmp = arrResulti.split(""); num1 = arrTmp0; /字段num1的值 num2 = arrTmp1; /字段num2的值 row1 = tb.insertRow(); cell1 =
17、row1.insertCell(); cell1.innerText = num1; cell2 = row1.insertCell(); cell2.innerText = num2; function RemoveRow() /保存第一行表頭,其余數(shù)據(jù)均刪除. var iRows = tb.rows.length; for(var i=0;i<iRows-1;i+) tb.deleteRow(1); function MyShow() /2秒自動(dòng)刷新一次,2秒取得一次數(shù)據(jù). etInterval("GetResult()",2000); </script&g
18、t; <body onload="MyShow()"> <p> </p> <table width="47%" height="23" border="0" cellpadding="1" cellspacing="0" id="tb"> <tr> <td>num1</td> <td>num2</td> </tr> </table&
19、gt; Server.asp 后臺(tái)讀取數(shù)據(jù) <% Language="JavaScript" %> <% function OpenDB(sdbname) /* *- OpenDB(sdbname) - * OpenDB(sdbname) * 功能:翻開(kāi)數(shù)據(jù)庫(kù)sdbname,返回conn對(duì)象. * 參數(shù):sdbname,字符串,數(shù)據(jù)庫(kù)名稱. * 實(shí)例:var conn = OpenDB("database.mdb"); * author:yoyo * update:2021-4-11 8:18 *- OpenDB(sdbname) -
20、*/ var connstr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath(sdbname); var conn = Server.CreateObject("ADODB.Connection"); conn.Open(connstr); return conn; var sResult = new Array(); var oConn = OpenDB("data.mdb"); /特殊字符:+,%,&,=,?等的傳輸解決方法.客戶端字符是經(jīng)
21、過(guò)escape編碼的 /所以效勞器端先要經(jīng)過(guò)unescape解碼. /Update:2021-4-11 12:22 var sql = "select num1,num2 from nums order by id" var rs = oConn.Execute(sql); while(!rs.EOF) /一條記錄用"#"隔開(kāi).每列數(shù)據(jù)用""隔開(kāi). 這是以只有兩個(gè)列數(shù)據(jù)的情況. sResultsResult.length = rs("num1").Value + "" + rs("nu
22、m2").Value rs.MoveNext(); /escape解決了XML 。中文處理的問(wèn)題. Response.Write(escape(sResult.join("#"); %> 數(shù)據(jù)庫(kù)data.mdb 表 nums id,自動(dòng)編號(hào) num1,文本 num2,文本2.3 JsonJSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。易于人閱讀和編寫(xiě)。同時(shí)也易于機(jī)器解析和生成。它基于JavaScriptStandard ECMA-262 3rd Edition - December 1999的一個(gè)子集。盡管有許多
23、宣傳關(guān)于 XML 如何擁有跨平臺(tái),跨語(yǔ)言的優(yōu)勢(shì),然而,除非應(yīng)用于 Web Services,否那么,在普通的 Web 應(yīng)用中,開(kāi)發(fā)者經(jīng)常為 XML 的解析傷透了腦筋,無(wú)論是效勞器端生成或處理 XML,還是客戶端用 JavaScript 解析 XML,都常常導(dǎo)致復(fù)雜的代碼,極低的開(kāi)發(fā)效率。實(shí)際上,對(duì)于大多數(shù) Web 應(yīng)用來(lái)說(shuō),他們根本不需要復(fù)雜的 XML 來(lái)傳輸數(shù)據(jù),XML 的擴(kuò)展性很少具有優(yōu)勢(shì),許多 AJAX 應(yīng)用甚至直接返回 HTML 片段來(lái)構(gòu)建動(dòng)態(tài) Web 頁(yè)面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系統(tǒng)的復(fù)雜性,但同時(shí)缺少了一定的靈活性。 JSON采用完全獨(dú)立于語(yǔ)言
24、的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣包括C, C+, C#, Java, JavaScript, Perl, Python等。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。2.4 JqueryjQuery是一個(gè)快速的,簡(jiǎn)潔的javaScript庫(kù),使用戶能更方便地處理HTML documents、events、實(shí)現(xiàn)動(dòng)畫(huà)效果,并且方便地為網(wǎng)站提供AJAX交互。jQuery還有一個(gè)比擬大的優(yōu)勢(shì)是,它的文檔說(shuō)明很全,而且各種應(yīng)用也說(shuō)得很詳細(xì),同時(shí)還有許多成熟的插件可供選擇。jQuery能夠使用戶的html頁(yè)保持代碼和html內(nèi)容別離,也就是說(shuō),不用再在html里面插入一堆js來(lái)調(diào)用命令了,只需
25、定義id即可。2.5 HibernateHibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。 Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。Hibernate的核心接口一共有5個(gè),分別為:Session、SessionFactory、Transaction、Query和Configuration。這5個(gè)
26、核心接口在任何開(kāi)發(fā)中都會(huì)用到。通過(guò)這些接口,不僅可以對(duì)持久化對(duì)象進(jìn)行存取,還能夠進(jìn)行事務(wù)控制。2.6 Css+divCSSDIV是網(wǎng)站標(biāo)準(zhǔn)或稱“WEB標(biāo)準(zhǔn)中常用的術(shù)語(yǔ)之一,通常為了說(shuō)明與HTML網(wǎng)頁(yè)設(shè)計(jì)語(yǔ)言中的表格table定位方式的區(qū)別,因?yàn)閄HTML網(wǎng)站設(shè)計(jì)標(biāo)準(zhǔn)中,不再使用表格定位技術(shù),而是采用css+div的方式實(shí)現(xiàn)各種定位。CSS是英語(yǔ)Cascading Style Sheets層疊樣式表單的縮寫(xiě),它是一種用來(lái)表現(xiàn) HTML 或 XML 等文件式樣的計(jì)算機(jī)語(yǔ)言。DIV元素是用來(lái)為HTML文檔內(nèi)大塊block-level的內(nèi)容提供結(jié)構(gòu)和背景的元素。DIV的起始標(biāo)簽和結(jié)束標(biāo)簽之間的所有內(nèi)容
27、都是用來(lái)構(gòu)成這個(gè)塊的,其中所包含元素的特性由DIV標(biāo)簽的屬性來(lái)控制,或者是通過(guò)使用樣式表格式化這個(gè)塊來(lái)進(jìn)行控制。3 系統(tǒng)開(kāi)發(fā) 3.1 系統(tǒng)目標(biāo) 利用web通信技術(shù)以及java程序語(yǔ)言實(shí)現(xiàn)一個(gè)能夠文字聊天的一個(gè)聊天工具。具體目標(biāo)如下: 注冊(cè),用戶可以按照規(guī)定注冊(cè)為會(huì)員。 登錄,用戶可以以會(huì)員身份登錄,只需登錄前注冊(cè)。 修改資料,可以修改個(gè)人的資料,保存讀取個(gè)人的資料。 添加好友,添加私人聊天對(duì)象。 刪除好友,刪除已添加的好友。 群聊天,假設(shè)干好友同時(shí)同一界面聊天。 二人私聊,二人無(wú)干擾即時(shí)聊天。 查詢聊天記錄。3.2 可行性分析 經(jīng)濟(jì)可行性開(kāi)發(fā)該工程只需要一臺(tái)PC電腦,其他所需資源在學(xué)校圖書(shū)館或
28、者互聯(lián)網(wǎng)上都可以找到,其他本錢幾乎可以忽略不計(jì),所以資金要求很低,在經(jīng)濟(jì)上開(kāi)發(fā)難度不高,不需要很高的經(jīng)濟(jì)投資。 運(yùn)行可行性一臺(tái)安裝了網(wǎng)卡并能運(yùn)行windows XP操作系統(tǒng)的計(jì)算機(jī)都可以運(yùn)行此聊天工具,在網(wǎng)絡(luò)技術(shù)如此興旺的今天,不管從硬件運(yùn)行可行性上,還是從市場(chǎng)運(yùn)行可行性上來(lái)說(shuō),一款優(yōu)秀的網(wǎng)頁(yè)聊天工具都是值得期待的。3.3 系統(tǒng)功能結(jié)構(gòu) 此系統(tǒng)分為2個(gè)子系統(tǒng):數(shù)據(jù)庫(kù)操作子系統(tǒng),業(yè)務(wù)邏輯子系統(tǒng)。數(shù)據(jù)庫(kù)操作子系統(tǒng)負(fù)責(zé)數(shù)據(jù)持久化,主要是一些數(shù)據(jù)庫(kù)的原子性操作,以面向?qū)ο蟮乃枷雭?lái)實(shí)現(xiàn)。使用hibernate作為orm映射框架,利用java5的泛型新特性,實(shí)現(xiàn)dao的泛化,大大減少了開(kāi)發(fā)量。業(yè)務(wù)邏輯子系
29、統(tǒng)主要負(fù)責(zé)登陸,注冊(cè),信息交流等的業(yè)務(wù)邏輯操作和數(shù)據(jù)庫(kù)事務(wù)管理,通過(guò)調(diào)用數(shù)據(jù)庫(kù)操作子系統(tǒng)的dao程序?qū)崿F(xiàn)數(shù)據(jù)的持久化,結(jié)合使用spring的自動(dòng)事務(wù)管理來(lái)管理事務(wù)。3.4 系統(tǒng)實(shí)施3.4.1 開(kāi)發(fā)環(huán)境 1硬件要求 CPU以上,安裝了網(wǎng)卡,內(nèi)存128MB以上,硬盤20GB以上。2軟件要求 ,Apache效勞程序,Java編程語(yǔ)言。 數(shù)據(jù)庫(kù)設(shè)計(jì)根據(jù)系統(tǒng)分析,要實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作子系統(tǒng)和業(yè)務(wù)邏輯子系統(tǒng)的功能,需要?jiǎng)?chuàng)立5個(gè)表,基于網(wǎng)頁(yè)的聊天工具所要求的數(shù)據(jù)庫(kù)不會(huì)很復(fù)雜,主要是強(qiáng)調(diào)他們之間的關(guān)聯(lián)性,能夠到達(dá)信息同步,實(shí)現(xiàn)完整性約束。這5個(gè)表分別是:user表,messagesmapping表,friends
30、request表,message表,friendsmapping表。user表如下列圖:圖4 User表User表是用來(lái)存放用戶個(gè)人信息的,id字段是主鍵,不代表任何實(shí)際個(gè)人信息,name是用戶名,password是登錄密碼。friendsmapping表如下列圖:圖5 friendsmapping表Friendsmapping表是用來(lái)存放好友關(guān)系的,userid和friendid聯(lián)合作為表的主鍵,一行數(shù)據(jù)確定兩個(gè)好友的關(guān)系。Idx是在Hibernate生成List屬性的時(shí)候用來(lái)確定順序的時(shí)候用的,沒(méi)有實(shí)際意義。friendsrequest表如下列圖:圖6 friendsrequest表Fri
31、endsrequest表是用來(lái)存放好友邀請(qǐng)的表,requestUser是發(fā)出邀請(qǐng)的用戶id。message表如下列圖:圖7 message表Message表是用來(lái)保存消息和聊天記錄的表,userFrom是消息發(fā)送者id,userTo是消息接受者的id,text是消息內(nèi)容,checked是標(biāo)志消息是否已經(jīng)被查收的字段。Messagesmapping表如下列圖:圖8 messagemapping表Messagesmapping表是用來(lái)確定消息和用戶關(guān)系的表,hibernate通過(guò)這張表來(lái)組裝user對(duì)象的消息集合。3.4.3 數(shù)據(jù)庫(kù)操作子系統(tǒng)在數(shù)據(jù)庫(kù)操作子系統(tǒng)中,分別設(shè)計(jì)了數(shù)據(jù)庫(kù)操作通用模塊Dao
32、Impl為抽象基類,信息持久化模塊MessageDaoImpl,用戶持久化模塊UserDaoImpl,而Dao,MessageDao,UserDao分別是以上三個(gè)子模塊的對(duì)應(yīng)接口。類圖如下:圖9 數(shù)據(jù)庫(kù)操作子系統(tǒng)類圖MessageDaoImpl和UserDaoImpl都是DaoImpl的子類。數(shù)據(jù)庫(kù)操作通用模塊DaoImpl的實(shí)現(xiàn)代碼如下:public class DaoImpl<T> implements Dao<T> protected SessionFactory sessionFactory;private Class<?> entityCls;pu
33、blic DaoImpl()entityCls = (Class<?>)(ParameterizedType)getClass().getGenericSuperclass().getActualTypeArguments()0;Overridepublic void setSessionFactory(SessionFactory sessionFactory) this.sessionFactory = sessionFactory;Overridepublic void delete(T entity) Session session = sessionFactory.get
34、CurrentSession();session.delete(entity);SuppressWarnings("unchecked")Overridepublic T findById(Serializable id) Session session = sessionFactory.getCurrentSession();return (T)session.get(entityCls, id);SuppressWarnings("unchecked")Overridepublic List<T> findList(int pageNo,
35、 int pageSize) Session session = sessionFactory.getCurrentSession();List<T> list = session.createCriteria(entityCls).setFirstResult(pageNo-1)*pageSize).setMaxResults(pageSize).list();return list;Overridepublic Integer getCountOfAll() Session session = sessionFactory.getCurrentSession();Integer
36、 count = (Integer)session.createCriteria(entityCls).setProjection(Projections.rowCount().uniqueResult();return count != null ? count : 0;Overridepublic void insert(T entity) Session session = sessionFactory.getCurrentSession();session.save(entity);Overridepublic String update(T entity) Session sessi
37、on = sessionFactory.getCurrentSession();session.update(entity);return "success"SuppressWarnings("unchecked")Overridepublic List<T> listAll() Session session = sessionFactory.getCurrentSession();List<T> list = session.createCriteria(entityCls).list();return list;Dao為Da
38、oImpl模塊的接口,以下為實(shí)現(xiàn)代碼public interface Dao<T> public void setSessionFactory(SessionFactory sessionFactory);public void insert(T entity);public void delete(T entity);public String update(T entity);public T findById(Serializable id);public List<T> listAll();public List<T> findList(int pa
39、geNo, int pageSize);public Integer getCountOfAll();信息持久化模塊MessageDaoImpl繼承了DaoImpl負(fù)責(zé)信息持久化操作MessageDaoImplpublic class MessageDaoImpl extends DaoImpl<Message> implements MessageDao MessageDao是信息持久化模塊MessageDaoImpl的接口package com.newbody.webmessager.core.dao;import com.newbody.webmessager.core.en
40、tity.Message;public interface MessageDao extends Dao<Message> 用戶持久化模塊UserDaoImplpublic class UserDaoImpl extends DaoImpl<User> implements UserDao Overridepublic User findByName(String name) String hql = "from User u where = ?"Session session = sessionFactory.getCurrentSe
41、ssion();Query query = session.createQuery(hql);query.setString(0, name);User user = (User)query.uniqueResult();return user;接口UserDaopublic interface UserDao extends Dao<User> User findByName(String name);3.4.4 業(yè)務(wù)邏輯子系統(tǒng)在業(yè)務(wù)邏輯子系統(tǒng)中設(shè)計(jì)了信息效勞類MessageServiceImpl和用戶業(yè)務(wù)類UserServiceImpl_DB,以及他們對(duì)應(yīng)的接口MessageS
42、ervice和UserService。類圖如下:圖10 業(yè)務(wù)邏輯子系統(tǒng)類圖信息效勞類MessageServiceImpl的實(shí)現(xiàn):public class MessageServiceImpl implements MessageService private UserService userService = UserServiceImpl_DB.getInstance();private final static String key = "key"private static MessageServiceImpl me = null;private SessionFac
43、tory sf = HibernateUtil.getSessionFactory();public static MessageServiceImpl getInstance() if (me = null) synchronized (key) if (me = null) me = new MessageServiceImpl();return me;private MessageServiceImpl() Overridepublic boolean checkMessage(String userName, String friendName) List<Message>
44、 msgList = userService.findByName(userName,true).getMessages();List<Message> msgs = new ArrayList<Message>();for (Message m : msgList) if (m.getUserFrom().getName().equals(friendName) msgs.add(m);if (msgs.size() != 0)return true;return false;Overridepublic JSON receiveMessage(String user
45、Name, String friendName) User user = userService.findByName(userName,true);List<Message> msgList = user.getMessages();List<Message> msgs = new ArrayList<Message>();if (msgList != null && msgList.size() != 0) int i = 0;for (i = 0;i < msgList.size();i+) if (msgList.get(i).
46、getUserFrom().getName().equals(friendName) msgs.add(msgList.get(i);msgList.get(i).setChecked(true);userService.update(user);JsonConfig jc = new JsonConfig();jc.setExcludes(new String "userFrom", "userTo" );JSON jsonMsg = JSONArray.fromObject(msgs, jc);return jsonMsg;return null;O
47、verridepublic void sendMessage(Message message) User userTo = userService.findByName(message.getUserTo().getName(), true);userTo.getMessages().add(message);userService.update(userTo);Overridepublic JSON checkAllMessage(String userName) List<Message> msgList = userService.findByName(userName,tr
48、ue).getMessages();Set<String> userNames = new HashSet<String>();for (Message m : msgList) if(!m.isChecked()userNames.add(m.getUserFrom().getName();return JSONArray.fromObject(userNames);public UserService getUserService() return userService;public void setUserService(UserService userServ
49、ice) this.userService = userService;public void setSessionFactory(SessionFactory sf)this.sf = sf ;Overridepublic List<Message> listChatRecords(String name) User user = userService.findByName(name, true);return user.getMessages();信息效勞類MessageServiceImpl的接口MessageService:public interface Message
50、Service void sendMessage(Message message);JSON receiveMessage(String userName,String friendName);boolean checkMessage(String userName, String friendName);JSON checkAllMessage(String name);void setUserService(UserService userService);void setSessionFactory(SessionFactory sf);List<Message> listC
51、hatRecords(String name);用戶操作類UserServiceImpl_DB的實(shí)現(xiàn):public class UserServiceImpl_DB implements UserService private static UserDao userDao;private static UserServiceImpl_DB me;private static SessionFactory sf = HibernateUtil.getSessionFactory();public static UserServiceImpl_DB getInstance() if (me = n
52、ull) synchronized (UserServiceImpl_DB.class) if (me = null) me = new UserServiceImpl_DB();userDao = new UserDaoImpl();userDao.setSessionFactory(sf);return me;private UserServiceImpl_DB() Overridepublic boolean addFriend(String userName, String friendName) User user = findByName(userName, true);User
53、friend = findByName(friendName, true);for (User f : user.getFriends() if (f.getName().equals(friend.getName()return false;user.getFriends().add(friend);friend.getFriendsRequest().add(user);update(user);update(friend);return true;Overridepublic List<User> checkFriendsRequest(String name) List&l
54、t;User> list = null;Session session = sf.getCurrentSession();List<User> frList = new ArrayList<User>();try session.beginTransaction();if (name != null) User user = userDao.findByName(name);if (user != null) list = user.getFriendsRequest();for (int i = 0; i < list.size(); i+) Hibernate.initialize(list.get(i);frList.add(list.remove(i);session.getTransaction() mit(); catch (Exception e) session.getTransaction().rollback();e
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44744-2024糧食儲(chǔ)藏低溫儲(chǔ)糧技術(shù)規(guī)程
- 2024面向智能制造專業(yè)領(lǐng)域的多模態(tài)內(nèi)容資源分類與編碼標(biāo)準(zhǔn)規(guī)范
- 包頭2024年09版小學(xué)五年級(jí)下冊(cè)英語(yǔ)第3單元寒假試卷
- 2023年過(guò)熱蒸汽干燥設(shè)備資金申請(qǐng)報(bào)告
- 2023年環(huán)氧丙烷資金申請(qǐng)報(bào)告
- 2024年電源適配器項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 強(qiáng)化品德修養(yǎng)方面存在的問(wèn)題-原因-措施
- 三維數(shù)字內(nèi)容制作-三維動(dòng)畫(huà)材質(zhì)師工作流程
- 【上海54】期中模擬卷01【24-25章】
- 質(zhì)量月代表的發(fā)言稿(3篇)
- 機(jī)器人-abb操作手冊(cè)簡(jiǎn)易
- 醫(yī)療質(zhì)量管理與持續(xù)改進(jìn)記錄表
- 最新《輔酶q10》課件
- 西方醫(yī)學(xué)史概要課件
- 石化項(xiàng)目設(shè)備及管道防腐保溫施工方案
- Unit 1 Food comments 課件-高中英語(yǔ)外研版(2019)必修第二冊(cè)
- 2022年烏魯木齊市法院書(shū)記員招聘考試題庫(kù)及答案解析
- 應(yīng)急預(yù)案救援物資檢查表
- 安全隱患排查記錄表
- 浙美版美術(shù)四上第5課《美術(shù)檔案袋》課件1
- 初中 初一 心理健康 我有我氣質(zhì) 課件
評(píng)論
0/150
提交評(píng)論