版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一個(gè)簡(jiǎn)單的即時(shí)通訊工具的設(shè)計(jì)與開發(fā)一個(gè)簡(jiǎn)單的即時(shí)通訊工具的設(shè)計(jì)與開發(fā)一個(gè)簡(jiǎn)單的即時(shí)通訊工具的設(shè)計(jì)與開發(fā)一個(gè)簡(jiǎn)單的即時(shí)通訊工具的設(shè)計(jì)與開發(fā)摘摘 要要即時(shí)通訊(instant messaging)是目前 internet 上最為流行的通訊方式,各種各樣的即時(shí)通訊軟件也層出不窮;服務(wù)提供商也提供了越來越豐富的通訊服務(wù)功能。java 是當(dāng)前比較流行的開發(fā)語言之一,它有著自己的易用特點(diǎn)與性能優(yōu)勢(shì),比如跨平臺(tái)、安全性、多線程、網(wǎng)絡(luò) socket 編程、數(shù)據(jù)流概念等方面,因此通過對(duì)開源即時(shí)通訊 linuxqq 的研究和分析,基于 java 語言和 j2ee 規(guī)范設(shè)計(jì)了一個(gè)即時(shí)通訊工具 jicq (java
2、for i seek you),并對(duì)其體系結(jié)構(gòu)、構(gòu)成模塊及系統(tǒng)關(guān)鍵技術(shù)進(jìn)行了分析與設(shè)計(jì)。在系統(tǒng)設(shè)計(jì)與建模過程中,使用了uml 和面向?qū)ο蟮姆治?、設(shè)計(jì)方法,并使用 rose 作為建模工具;本系統(tǒng)基于j2se1.5,j2ee1.4,使用 eclipse 等作為開發(fā)工具,在開發(fā)過程中用到了時(shí)下流行的重構(gòu)開發(fā)方法,優(yōu)化了系統(tǒng)的設(shè)計(jì)。力圖使系統(tǒng)具有安全、高效、實(shí)用、支持在不同系統(tǒng)平臺(tái)運(yùn)行等特點(diǎn)。關(guān)鍵詞關(guān)鍵詞:即時(shí)通訊;多線程;socket 編程;jspdesign and development of a simple instant communication toolabstractinstant
3、message is currently the most popular way to communicate on the internet,so various instant messaging software are continuously appearing; service providers offer more and more communication service nowadays. java programming language (java 2 standard edition) is one of popular programming languages
4、. with its features of cross-platform, security, multi-threaded capability, socket programming, data flow concepts and so on, java has its own distinctive and functional advantages. therefore, based on the research and analysis of linuxqq, with the java language and j2ee, this paper designs an insta
5、nt messengerjicq (java for i seek you), and then analyzes its architecture, modules, as well as its key technologies. during the design and modeling process of instant messenger system, the uml and method of object-oriented analysis and design are used. furthermore, the modeling tool of rose is incl
6、uded. based on the system j2se1.5, j2ee1.4, the eclipse development tool in the development process, and refactoring development method, the system design is optimized. due to these factors, the system is safe, efficient and practical in different operating system platforms.key words: instant messag
7、e; multithreaded; socket program; jsp目目 錄錄論文總頁數(shù):30 頁1 引言.11.1 項(xiàng)目開發(fā)背景.11.1.1 項(xiàng)目背景.11.1.2 技術(shù)背景.11.2 該系統(tǒng)設(shè)計(jì)的意義.22 相關(guān)理論及基礎(chǔ)技術(shù)與開發(fā)平臺(tái).22.1 即時(shí)通訊應(yīng)用工作原理分析.22.2 所用技術(shù).32.3 工具及開發(fā)平臺(tái).42.4 系統(tǒng)配置要求.53 系統(tǒng)體系結(jié)構(gòu)的設(shè)計(jì).53.1 需求描述.53.2 系統(tǒng)架構(gòu)設(shè)計(jì).63.3 系統(tǒng)的總體功能設(shè)計(jì).73.3.1 總體功能設(shè)計(jì).73.3.2 注冊(cè)模塊設(shè)計(jì).83.3.3 登錄模塊設(shè)計(jì).103.3.4 用戶間交互模塊設(shè)計(jì).123.4 數(shù)據(jù)庫設(shè)計(jì).
8、143.4.1 數(shù)據(jù)庫物理模型.143.4.2 數(shù)據(jù)字典.154 系統(tǒng)實(shí)現(xiàn).164.1 網(wǎng)絡(luò)通訊編碼實(shí)現(xiàn).164.1.1 聊天客戶端部分代碼.164.1.2 服務(wù)器端監(jiān)聽與轉(zhuǎn)發(fā)消息代碼.174.1.3 服務(wù)端單線程上線處理代碼.184.2 系統(tǒng)運(yùn)行的效果圖.204.2.1 登錄界面.204.2.2 主界面.204.2.3 群聊天界面.214.2.4 好友聊天界面.224.2.5 好友查找界面.234.3 注冊(cè)模塊的實(shí)現(xiàn).244.3.1 數(shù)據(jù)庫連接.244.3.2 字符編碼過濾器的核心代碼.244.4 注冊(cè)模塊運(yùn)行效果圖.254.4.1 主頁面.254.4.2 注冊(cè)頁面.255 系統(tǒng)測(cè)試與運(yùn)行.
9、26結(jié) 論.27參考文獻(xiàn).28致 謝.29聲 明.30第 30 頁 共 30 頁1 1 引言引言1.11.1 項(xiàng)目開發(fā)背景項(xiàng)目開發(fā)背景.1 項(xiàng)目背景項(xiàng)目背景“即時(shí)通信產(chǎn)品”最早的創(chuàng)始人是三個(gè)以色列青年,是他們?cè)?1996 年做出來的,取名叫 icq( i seek you)。隨后,騰迅 qq 抓住 im 的大好機(jī)遇,在中國(guó)迅速崛起并壟斷即時(shí)通訊市場(chǎng)。自從騰迅的 qq 在中國(guó)即時(shí)通訊行業(yè)壟斷后,即時(shí)通訊的產(chǎn)品在 it 行業(yè)可謂雨后春筍,層出不窮,目前,windows 平臺(tái)方面的即時(shí)通訊已經(jīng)很多,但是其他系統(tǒng)比如 linux 平臺(tái),雖然有類似 qq 方面的一些產(chǎn)品,比如 linux
10、qq,lunaqq,但數(shù)量畢竟不多且功能界面等都還不是很理想,鑒于此種情況,我們開發(fā)了基于 java 語言的即時(shí)通信系統(tǒng)(jicq),該系統(tǒng)是以j2se(java 2 standard edition)語言實(shí)現(xiàn)的網(wǎng)絡(luò)即時(shí)通信工具,包括服務(wù)器端和客戶端,可以在企業(yè)內(nèi)部網(wǎng)絡(luò)和互聯(lián)網(wǎng)上運(yùn)行,同時(shí)具有 java 應(yīng)用的跨平臺(tái)特性,方便運(yùn)行在各個(gè)系統(tǒng)之上。該系統(tǒng)具有相對(duì)比較漂亮的界面以及類似于qq 的很多功能,比如可以和好友進(jìn)行交流以及離線發(fā)送與好友管理、可以加入不同的群,即時(shí)發(fā)送、即時(shí)回復(fù)等功能。 .2 技術(shù)背景技術(shù)背景技術(shù)上采用 sun 公司的 java 語言,該語言有很多有點(diǎn),比如
11、多線程、網(wǎng)絡(luò)流概念、異常捕獲處理、安全性以及速度與性能等方面,并且具有可以一次編寫、到處運(yùn)行的跨平臺(tái)優(yōu)點(diǎn)。多線程:多線程是這樣一種機(jī)制,它允許在程序中并發(fā)執(zhí)行多個(gè)指令流,每個(gè)指令流都稱為一個(gè)線程,彼此間互相獨(dú)立,線程又稱為輕量級(jí)進(jìn)程,多線程技術(shù)允許你在一個(gè)應(yīng)用程序中啟動(dòng)多個(gè)執(zhí)行輕量程序,使多段程序同時(shí)競(jìng)爭(zhēng) cpu資源,從而提高系統(tǒng)效率。而對(duì)于網(wǎng)絡(luò)通訊工具來說,多線程的特性是必須的,不僅是為了效率,而且可以實(shí)現(xiàn)同時(shí)處理多個(gè)請(qǐng)求。網(wǎng)絡(luò)流:java 中的網(wǎng)絡(luò)通訊以及文件的讀取都是以一種流的概念來理解的,這樣,網(wǎng)絡(luò)上數(shù)據(jù)的傳輸其實(shí)就等同于看成一臺(tái)機(jī)器上文件的讀取,有利于理解與編寫運(yùn)用程序,java 類
12、庫中提供了豐富的 io 流類資源以及網(wǎng)絡(luò)編程類資源,軟件開發(fā)人員可以很方便的編寫網(wǎng)絡(luò)應(yīng)用程序。例外處理:java 通過面向?qū)ο蟮姆椒▉硖幚砝?。在一個(gè)方法的運(yùn)行過程中,如果發(fā)生了例外,則這個(gè)方法生成代表該例外的一個(gè)對(duì)象,并把它交給運(yùn)行時(shí)系統(tǒng),運(yùn)行時(shí)系統(tǒng)尋找相應(yīng)的代碼來處理這一例外。我們把生成例外對(duì)象并把它提交給運(yùn)行時(shí)系統(tǒng)的過程稱為拋棄(throw)一個(gè)例外。運(yùn)行時(shí)系統(tǒng)在方法的調(diào)用棧中查找,從生成例外的方法開始進(jìn)行回朔,直到找到包含相應(yīng)例外處理的方法為止,這一個(gè)過程稱為捕獲(catch)一個(gè)例外。所以,java 的例外處第 30 頁 共 30 頁理使非常方便的??缙脚_(tái):java 語言的一個(gè)非常重
13、要的特點(diǎn)就是與平臺(tái)的無關(guān)性。而使用java 虛擬機(jī)是實(shí)現(xiàn)這一特點(diǎn)的關(guān)鍵。一般的高級(jí)語言如果要在不同的平臺(tái)上運(yùn)行,至少需要編譯成不同的目標(biāo)代碼。而引入 java 語言虛擬機(jī)后,java 語言在不同平臺(tái)上運(yùn)行時(shí)不需要重新編譯。java 語言使用模式 java 虛擬機(jī)屏蔽了與具體平臺(tái)相關(guān)的信息,使得 java 語言編譯程序只需生成在 java 虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺(tái)上不加修改地運(yùn)行。java 虛擬機(jī)在執(zhí)行字節(jié)碼時(shí),把字節(jié)碼解釋成具體平臺(tái)上的機(jī)器指令執(zhí)行。1.21.2 該系統(tǒng)設(shè)計(jì)的意義該系統(tǒng)設(shè)計(jì)的意義伴隨著當(dāng)今互聯(lián)網(wǎng)迅速發(fā)展,網(wǎng)上通訊成為一種必不可少的通訊習(xí)慣,該系統(tǒng)的設(shè)計(jì)
14、就是為了實(shí)現(xiàn)在互聯(lián)網(wǎng)上的即時(shí)通訊,它是利用當(dāng)今最為流行的java 編程語言來實(shí)現(xiàn)即時(shí)通訊工具的雛形,同時(shí)在系統(tǒng)開發(fā)過程中所用的都是java 常用的技術(shù)或者難點(diǎn),比如用 java 的 swing 怎么去做一個(gè)界面美觀的應(yīng)用程序、java 的網(wǎng)絡(luò)編程技術(shù)的原理與應(yīng)用、以及如何根據(jù) j2ee 規(guī)范去開發(fā)一個(gè)基于 jsp 和 servlet 的 web 應(yīng)用等關(guān)鍵技術(shù)。通過設(shè)計(jì)和開發(fā)該系統(tǒng),使自己所學(xué)的理論知識(shí)得到實(shí)踐應(yīng)用,也對(duì)即時(shí)通訊軟件的通訊原理有了比較深刻的認(rèn)識(shí),大大的提高了自己的動(dòng)手能力和解決問題的能力,為今后工作打下堅(jiān)實(shí)的基礎(chǔ)。2 2 相關(guān)理論及基礎(chǔ)技術(shù)與開發(fā)平臺(tái)相關(guān)理論及基礎(chǔ)技術(shù)與開發(fā)平臺(tái)
15、2.12.1 即時(shí)通訊應(yīng)用工作原理分析即時(shí)通訊應(yīng)用工作原理分析我們經(jīng)常聽到tcp/ip和udp(用戶數(shù)據(jù)報(bào)協(xié)議)這兩個(gè)術(shù)語,它們都是建立在更低層的ip協(xié)議上的兩種通訊傳輸協(xié)議。前者是以數(shù)據(jù)流的形式,將傳輸數(shù)據(jù)經(jīng)分割、打包后,通過兩臺(tái)機(jī)器之間建立起的虛電路,進(jìn)行連續(xù)的、雙向的、嚴(yán)格保證數(shù)據(jù)正確性的文件傳輸協(xié)議。而后者是以數(shù)據(jù)報(bào)的形式,對(duì)拆分后的數(shù)據(jù)的先后到達(dá)順序不做要求的文件傳輸協(xié)議。qq就是使用udp協(xié)議進(jìn)行發(fā)送和接收“消息”的。當(dāng)你的機(jī)器安裝了oicq以后,實(shí)際上,你既是服務(wù)端(server) ,又是客戶端(client) 。當(dāng)你登錄oicq時(shí),你的oicq作為client連接到騰訊公司的主
16、服務(wù)器上,當(dāng)你“看誰在線”時(shí),你的oicq又一次作為client從qq server上讀取在線網(wǎng)友名單。當(dāng)你和你的oicq伙伴進(jìn)行聊天時(shí),如果你和對(duì)方的連接比較穩(wěn)定,你和他的聊天內(nèi)容都是以u(píng)dp的形式,在計(jì)算機(jī)之間傳送。如果你和對(duì)方的連接不是很穩(wěn)定,qq服務(wù)器將為你們的聊天內(nèi)容進(jìn)行“中轉(zhuǎn)”。其他的即時(shí)通信軟件原理與此大同小異。 oicq的通訊原理:第 30 頁 共 30 頁 1.用戶首先從qq服務(wù)器上獲取好友列表,以建立點(diǎn)對(duì)點(diǎn)的聯(lián)系。2.用戶( clientl)和好友(client2)之間采用udp方式發(fā)送信息。 3.如果無法直接點(diǎn)對(duì)點(diǎn)聯(lián)系,則用服務(wù)器中轉(zhuǎn)的方式完成。我們看到兩個(gè)oicq用戶如
17、果是在兩個(gè)不同的內(nèi)網(wǎng)上,它們經(jīng)過登錄后可以不同過服務(wù)器來直接通訊。那這是為什么呢。其根本原因是oicq使用了udp協(xié)議,這樣用戶之間的通訊自己完成就減少了服務(wù)器的負(fù)擔(dān)。那么到底原理是什么樣的,為什么tcp應(yīng)用就不能達(dá)到這一要求。這就涉及到nat ( network addresstranslator)技術(shù)。nat技術(shù)使得一個(gè)私有網(wǎng)絡(luò)可以通過internet注冊(cè)ip連接到外部世界,位于inside網(wǎng)絡(luò)和outside網(wǎng)絡(luò)中的nat路由器在發(fā)送數(shù)據(jù)包之前,負(fù)責(zé)把內(nèi)部ip翻譯成外部合法地址。內(nèi)部網(wǎng)絡(luò)的主機(jī)不可能同時(shí)與外部網(wǎng)絡(luò)通信,所以只有一部分內(nèi)部地址需要翻譯。nat的翻譯可以采取靜態(tài)翻譯和動(dòng)態(tài)翻譯
18、兩種。靜態(tài)翻譯將內(nèi)部地址和外部地址一對(duì)一對(duì)應(yīng)。當(dāng)使用了動(dòng)態(tài)翻譯時(shí)就采用port multiplexing技術(shù),通過改變外出數(shù)據(jù)的源port技術(shù)可以將多個(gè)內(nèi)部ip地址影射到同一個(gè)外部地址,這就是pat (port address translator)。在這種情況下,一個(gè)tcp連接只能和固定的連接方通訊,而udp應(yīng)用本身就可以接受不同數(shù)據(jù)來源的數(shù)據(jù)包,所以在nat轉(zhuǎn)換的時(shí)候能夠完成兩個(gè)客戶端之間的通訊,從而達(dá)到了客戶端直接通訊的目的??偟膩碚f,oicq 的應(yīng)用在客戶端方面符合即時(shí)通訊系統(tǒng)的模型??蛻舳酥g的通訊中,采用了 udp 的通訊方式,當(dāng)客戶端之間無法直接通訊時(shí),采用通過服務(wù)器轉(zhuǎn)發(fā)的方式來
19、實(shí)現(xiàn)即時(shí)信息的傳送。2.22.2 所用技術(shù)所用技術(shù)java 多線程技術(shù):多線程的各個(gè)線程看上去像是并行地獨(dú)自完成各自的工作,就像一臺(tái)一臺(tái)計(jì)算機(jī)上運(yùn)行著多個(gè)處理機(jī)一樣。在多處理機(jī)計(jì)算機(jī)上實(shí)現(xiàn)多線程時(shí),它們確實(shí)可以并行工作,而且采用適當(dāng)?shù)姆謺r(shí)策略可以大大提高程序運(yùn)行的效率。而作為接受客戶端請(qǐng)求的服務(wù)器來說,必須使用多線程技術(shù)來接受不同時(shí)刻的請(qǐng)求,接收一個(gè)處理一個(gè),將其放入線程隊(duì)列,然后繼續(xù)監(jiān)聽其他的請(qǐng)求。網(wǎng)絡(luò)通訊與 socket 編程:java 網(wǎng)絡(luò)編程中有兩種不同的通訊協(xié)議,分別是 tcp(面向連接)與 udp(面向無連接) ,兩種協(xié)議各有優(yōu)缺點(diǎn)。tcp:是 tranfer control pr
20、otocol 的簡(jiǎn)稱,是一種面向連接的保證可靠傳輸?shù)膮f(xié)議。通過 tcp 協(xié)議傳輸,得到的是一個(gè)順序的無差錯(cuò)的數(shù)據(jù)流。發(fā)送方和接收方的成對(duì)的兩個(gè) socket 之間必須建立連接,以便在 tcp 協(xié)議的基礎(chǔ)上進(jìn)行通信,當(dāng)一個(gè) socket(通常都是 server socket)等待建立連接時(shí),另一第 30 頁 共 30 頁個(gè) socket 可以要求進(jìn)行連接,一旦這兩個(gè) socket 連接起來,它們就可以進(jìn)行雙向數(shù)據(jù)傳輸,雙方都可以進(jìn)行發(fā)送或接收操作。 udp:是 user datagram protocol 的簡(jiǎn)稱,是一種無連接的協(xié)議,每個(gè)數(shù)據(jù)報(bào)都是一個(gè)獨(dú)立的信息,包括完整的源地址或目的地址,它在
21、網(wǎng)絡(luò)上以任何可能的路徑傳往目的地,因此能否到達(dá)目的地,到達(dá)目的地的時(shí)間以及內(nèi)容的正確性都是不能被保證的。jdbc 數(shù)據(jù)庫技術(shù):jdbc, 全稱為 java database connectivity standard, 它是一個(gè)面向?qū)ο蟮膽?yīng)用程序接口(api), 通過它可訪問各類關(guān)系數(shù)據(jù)庫。jdbc 也是 java 核心類庫的一部分。jdbc 的最大特點(diǎn)是它獨(dú)立于具體的關(guān)系數(shù)據(jù)庫。與 odbc (open database connectivity)類似, jdbc api 中定義了一些java 類分別用來表示與數(shù)據(jù)庫的連接(connections), sql 語句(sql statement
22、s), 結(jié)果集(result sets)以及其它的數(shù)據(jù)庫對(duì)象, 使得 java 程序能方便地與數(shù)據(jù)庫交互并處理所得的結(jié)果。使用 jdbc, 所有 java 程序(包括 java applications , applets 和 servlet)都能通過 sql 語句或存儲(chǔ)在數(shù)據(jù)庫中的過程(stored procedures)來存取數(shù)據(jù)庫。swing 界面設(shè)計(jì):java 的擴(kuò)展包,其中包括眾多的控件以及豐富的控件操作功能,使用戶可以簡(jiǎn)單的利用它畫出應(yīng)用程序的界面,結(jié)合 jbuilder9.0 帶的絕對(duì)定位類包,可以設(shè)計(jì)出非常好看的用戶界面。jsp與servlet技術(shù):jsp和servlet是在j
23、2ee平臺(tái)下開發(fā)web應(yīng)用的基礎(chǔ), jsp是由sun公司倡導(dǎo) 眾多公司參與一起建立的一個(gè)動(dòng)態(tài)網(wǎng)頁標(biāo)準(zhǔn)技術(shù),jsp技術(shù)為建立具有動(dòng)態(tài)生成內(nèi)容的web應(yīng)用提供了一種簡(jiǎn)便而且功能強(qiáng)大的途徑,它可以快速開發(fā)出與平臺(tái)無關(guān)的基于web的應(yīng)用,jsp是更高級(jí)的servlet,在運(yùn)行的時(shí)候jsp先被轉(zhuǎn)化為servlet。uml:uml是一個(gè)統(tǒng)一建模語言, 是當(dāng)今世界上面向?qū)ο笙到y(tǒng)開發(fā)領(lǐng)域中的工具之一,它是一種可視化的建模語言,能夠讓系統(tǒng)構(gòu)造者用標(biāo)準(zhǔn)的、易于理解的方式建立起能夠表達(dá)出他們想像力的系統(tǒng)藍(lán)圖,并且提供了便于不同的人之間有效地共享和交流設(shè)計(jì)結(jié)果的機(jī)制。它包含了9種圖形還有其他一些特征,很方便用戶進(jìn)行建
24、模。2.32.3 工具及開發(fā)平臺(tái)工具及開發(fā)平臺(tái)borland jbuilder 是全球第一的跨平臺(tái) java 開發(fā)環(huán)境,可以用于構(gòu)建符合工業(yè)標(biāo)準(zhǔn)的 java 應(yīng)用系統(tǒng),不僅可以開發(fā)桌面級(jí)程序,并且可以開發(fā)ejb、web、xml 以及數(shù)據(jù)庫等各類應(yīng)用程序。雙向、可視化設(shè)計(jì)工具使得我們可以快速的構(gòu)建各種應(yīng)用程序,并部署至多種應(yīng)用程序服務(wù)器,利用jbuilder,我們可以快速、方便的構(gòu)建出 java 應(yīng)用程序,并且其中提供了一個(gè)第 30 頁 共 30 頁類似于 vs.net 中的界面編輯器功能,它具有絕對(duì)的定位功能,我們不用再手工粗糙的排列 java 的 layoutmanager,這一切完全可以用
25、 jbuilder 開快速完成。eclipse 是一個(gè)開放源代碼的、基于 java 的可擴(kuò)展開發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 java 開發(fā)工具(java development tools,jdt) 。 雖然大多數(shù)用戶很樂于將 eclipse 當(dāng)作 java ide 來使用,但 eclipse 的目標(biāo)不僅限于此。eclipse 還包括插件開發(fā)環(huán)境(plug-in development environment,pde) ,這個(gè)組件主要針對(duì)希望擴(kuò)展 eclipse 的軟件開發(fā)人員,因?yàn)樗试S他
26、們構(gòu)建與 eclipse 環(huán)境無縫集成的工具。更舒服的是,利用 eclipse 中的 myeclipse 插件來搭建一個(gè)動(dòng)態(tài) jsp 程序,快速,簡(jiǎn)單、方便。rose 一套非常有使用價(jià)值的系統(tǒng)建模工具,其中提供了非常方便的系統(tǒng)建模功能,比如用例圖、行為圖、活動(dòng)圖、時(shí)序圖等。利用它可以加快系統(tǒng)設(shè)計(jì)開發(fā)效率,同時(shí)可以給用戶和開發(fā)者提供清晰的圖,使他們之間的交流變得更加的方便有效。sql server2000 數(shù)據(jù)庫是微軟的功能強(qiáng)大的數(shù)據(jù)庫管理系統(tǒng),具備很多數(shù)據(jù)庫管理常用的功能,例如存儲(chǔ)過程、數(shù)據(jù)查詢與更新等,是一個(gè)非常理想的后臺(tái)數(shù)據(jù)庫系統(tǒng)。tomcat 是 sun 的 jswdk(javaserv
27、er web development kit)中 servlet 的運(yùn)行環(huán)境(servlet 容器), 是一個(gè)免費(fèi)的開源的 serlvet 容器,它是 apache 基金會(huì)的 jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,由 apache,sun 和其它一些公司及個(gè)人共同開發(fā)而成。2.42.4 系統(tǒng)配置要求系統(tǒng)配置要求 推薦配置如下:cpu2g 以上, 內(nèi)存 512 以上,運(yùn)行平臺(tái)基于 windows 平臺(tái)。 客戶端需要安裝 java 虛擬機(jī),同時(shí)還要有 jicq 的客戶端程序。服務(wù)器端需要安裝 sql server2000 數(shù)據(jù)庫, 服務(wù)器端如果是 windowsxp 系統(tǒng)要打上 sql serve
28、r 2000 的 sp3 或者 sp4 補(bǔ)丁包,同時(shí)服務(wù)器端需要安裝 web 服務(wù)器tomcat,還有 jicq 的服務(wù)器端程序。3 3 系統(tǒng)體系結(jié)構(gòu)的設(shè)計(jì)系統(tǒng)體系結(jié)構(gòu)的設(shè)計(jì)3.13.1 需求描述需求描述伴隨著當(dāng)今互聯(lián)網(wǎng)的迅速發(fā)展,人們之間的信息交互的實(shí)時(shí)性能變得越來越重要,傳統(tǒng)的電子郵件交互已經(jīng)不能夠滿足人們的即時(shí)通訊要求,鑒于此種情況打算開發(fā)出一款類似于騰訊 qq 的即時(shí)通訊軟件,只要經(jīng)過注冊(cè)你便可以獲第 30 頁 共 30 頁取一個(gè)帳號(hào),通過該帳號(hào)你可以在客戶端登陸,成功登錄后便可以在互聯(lián)網(wǎng)上與你的親朋好友進(jìn)行暢談,由于技術(shù)和時(shí)間問題,該軟件主要提供私聊、群聊、好友管理、群管理等常用功能
29、,其它一些功能比如文件傳輸、語音聊天和視頻聊天等功能,由于技術(shù)問題暫時(shí)沒有實(shí)現(xiàn),可以在該系統(tǒng)的基礎(chǔ)上實(shí)現(xiàn)這些功能,也可以在此基礎(chǔ)上進(jìn)行更多功能的擴(kuò)展。3.23.2 系統(tǒng)架構(gòu)設(shè)計(jì)系統(tǒng)架構(gòu)設(shè)計(jì)該系統(tǒng)主要包括三層,客戶端,服務(wù)器端,以及數(shù)據(jù)庫服務(wù)器,客戶端用來提供用戶的登錄,服務(wù)器端用來對(duì)登錄的用戶進(jìn)行管理以及用來處理信息之間的轉(zhuǎn)發(fā),數(shù)據(jù)庫服務(wù)器主要存放一些重要的信息。它們之間的關(guān)系如下圖所示:客戶端服務(wù)器數(shù)據(jù)庫服務(wù)器圖 1 三層模型中間層又分成四個(gè)部分:圖 2 中間層的構(gòu)成本系統(tǒng)采用的設(shè)計(jì)模型為平時(shí)所說的 c/s 架構(gòu),client/server,系統(tǒng)總體第 30 頁 共 30 頁模型圖如下:圖
30、3 客戶端/服務(wù)器端模型圖3.33.3 系統(tǒng)的總體功能設(shè)計(jì)系統(tǒng)的總體功能設(shè)計(jì).1 總體功能設(shè)計(jì)總體功能設(shè)計(jì)根據(jù)上述需求的描述,對(duì)該系統(tǒng)按照功能進(jìn)行了模塊的細(xì)化,主要包括注冊(cè)登錄、好友聊天、好友組管理、群聊天 4 個(gè)模塊,還有很多其它小模塊,這4 個(gè)模塊是實(shí)現(xiàn)該系統(tǒng)的核心模塊,模塊之間的耦合程度非常低,其中注冊(cè)模塊是通過 b/s 結(jié)構(gòu)來實(shí)現(xiàn),不需要安裝客戶端。下圖是上述的 4 個(gè)重要模塊的用例交互圖。第 30 頁 共 30 頁與 與 與 與與 與 與 與與 與 與 與 與jicq與 與與 與 與 與 與 與圖 4 總功能用例圖.2 注冊(cè)模塊設(shè)計(jì)注冊(cè)模塊設(shè)計(jì)注冊(cè)模塊
31、是整個(gè)系統(tǒng)的最基礎(chǔ)模塊,該模塊主要通過b/s模式來實(shí)現(xiàn),技術(shù)上采用j2ee的三(n)層結(jié)構(gòu),它有以下特點(diǎn): 1.能有效降低建設(shè)和維護(hù)成本,簡(jiǎn)化管理;2.適應(yīng)大規(guī)模和復(fù)雜的應(yīng)用需求;3.可適應(yīng)不斷的變化和新的業(yè)務(wù)需求:4.訪問異構(gòu)數(shù)據(jù)庫; 5.能有效提高系統(tǒng)并發(fā)處理能力;6.能有效提高系統(tǒng)安全性該模塊表現(xiàn)層主要用的技術(shù)是 jsp 和 servlet,后臺(tái)數(shù)據(jù)庫用的是 sql 2000數(shù)據(jù)庫。該模塊主要包括以下功能:帳號(hào)注冊(cè)、密碼的找回、密碼的修改以及個(gè)人信息的查詢。通過該模塊,用戶可以與 web 服務(wù)器交互進(jìn)行號(hào)碼的注冊(cè)、密碼找回等功能。下圖是一張簡(jiǎn)單的 j2ee 的結(jié)構(gòu)圖,該系統(tǒng)只是用到了其中
32、的一部分技術(shù)。第 30 頁 共 30 頁圖5 j2ee結(jié)構(gòu)圖下邊是用戶注冊(cè)與web服務(wù)器之間的用例交互圖。與 與 與 與 與 與與 與 與 與 與與 與 與 與jicq與 與 與與 與 jicq與 與 與 與圖 6 注冊(cè)用例交互圖 下邊是用戶注冊(cè)的活動(dòng)圖。第 30 頁 共 30 頁圖 7 用戶注冊(cè)活動(dòng)圖.3 登錄模塊設(shè)計(jì)登錄模塊設(shè)計(jì)該模塊主要給注冊(cè)成功的用戶提供一個(gè)登錄界面,用戶根據(jù)自己注冊(cè)的帳號(hào)信息可以與服務(wù)器交互,如果提供的信息通過服務(wù)器的驗(yàn)證便可以成功的登錄系統(tǒng),成功登錄系統(tǒng)之后,可以進(jìn)行一些操作,比如和好友聊天等,使用該模塊之前必須安裝一個(gè)客戶端。登錄模塊只是一個(gè)簡(jiǎn)單的
33、頁面,主要填寫用戶名、密碼之類的信息,登錄成功后的主界面包含了系統(tǒng)的大部分功能,比如添加和刪除好友、添加和刪除好友分組、和朋友聊天等功能。下圖是登錄模塊的用例圖。合法合法?合法合法?是否否是第 30 頁 共 30 頁與 與 jicq與 與 與 與與 與 與 與jicq與 與與 與 與 與與 與 與 與 與與 與 與 與與 與 與 與圖 8 登錄用例圖 下邊的登錄模塊的活動(dòng)圖,主要是對(duì)用戶提供的用戶名和密碼提供驗(yàn)證。圖 9 登錄活動(dòng)圖下邊是用戶之間交互信息的時(shí)序圖,主要包括從用戶登錄到通過驗(yàn)證然后進(jìn)行信息的發(fā)送,給好友發(fā)送信息包含兩種情況,第一,如果好友在線的話消第 30 頁 共 30 頁息直接
34、通過服務(wù)器中轉(zhuǎn)發(fā)送給好友,如果對(duì)應(yīng)的好友不在線,則講發(fā)送的信息保存到數(shù)據(jù)庫中,當(dāng)該好友上線的時(shí)候從數(shù)據(jù)庫中讀出相應(yīng)的信息進(jìn)行發(fā)送。圖 10 用戶信息交互圖.4 用戶間交互模塊設(shè)計(jì)用戶間交互模塊設(shè)計(jì)該模塊主要實(shí)現(xiàn)已用戶之間的信息交流,用戶交流的前提是先要添加好友,可以通過查找功能進(jìn)行好友的查找,找到要添加的好友后,通過發(fā)送好友申請(qǐng)消息來添加好友,當(dāng)對(duì)方通過添加好友的驗(yàn)證消息后,便可以成功的添加好友。只有成功的添加好友之后,才可以進(jìn)行用戶之間的信息的相互交互。下邊是用戶交互的用例圖。jicq與 與 與與 與 與 與 與與 與 與 與與 與 與 與 與 與jicq與 與 a與 與 與
35、 與jicq與 與 b證 證圖 11 用戶交互用例圖第 30 頁 共 30 頁用戶之間聊天的信息主要通過聊天服務(wù)器進(jìn)行中轉(zhuǎn),用戶之間聊天內(nèi)容主要存儲(chǔ)在客戶端的一些文件中,可以通過查看聊天功能來進(jìn)行對(duì)這些聊天信息的讀取。下圖是用戶交互的活動(dòng)圖:圖 12 用戶交互活動(dòng)圖下邊是好友添加的時(shí)序圖在線?yn第 30 頁 共 30 頁圖 13 好友添加時(shí)序圖3.43.4 數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫設(shè)計(jì).1 數(shù)據(jù)庫物理模型數(shù)據(jù)庫物理模型通過對(duì)系統(tǒng)需求的分析,在關(guān)系數(shù)據(jù)庫中建立相應(yīng)的表,并建立了表之間的相互關(guān)系,下邊的圖是在 sql 2000 下這些表之間的對(duì)應(yīng)關(guān)系圖。圖 14 數(shù)據(jù)庫物理模型第 30
36、頁 共 30 頁.2 數(shù)據(jù)字典數(shù)據(jù)字典下邊是關(guān)系數(shù)據(jù)庫中每個(gè)表所對(duì)應(yīng)的字段的詳細(xì)信息表 1 jusers(用戶表)用來存放用戶注冊(cè)時(shí)的基本信息簡(jiǎn)稱字段名類型長(zhǎng)度允許空備注jicq號(hào)碼bigint8not nullpkjpassword密碼varchar50not nulljshowname昵稱varchar100not nulljtruename真實(shí)名稱varchar100jage年齡int4jsex性別char4jcountry國(guó)家varchar50jprovince省varchar50jcity市varchar50jstatus狀態(tài)smallint2not nulljuse
37、ripipvarchar50not nulljpicid圖片 idint4not nulljicqshowidint4jemail電子郵件varchar100junderwrite個(gè)人簽名varchar500jprofession專業(yè)varchar50jstar星座varchar50jxuexing血型varchar50jgradute學(xué)歷varchar50jaddress住址varchar200jpostalcode郵編char6jpersonalpage個(gè)人主頁varchar500joption個(gè)人愛好int4jidcardtype證件類型char20jusermoblie手機(jī)號(hào)碼varc
38、har11juseridcard用戶卡號(hào)varchar30jprotectpwdquestion密保提問varchar50jprotectpwdanswer密保答案varchar50表 2 jmessages(消息表)用來存放用戶發(fā)送的離線消息簡(jiǎn)稱字段名類型長(zhǎng)度允許空備注messageid自增主鍵bigint8not nullmyjicq自己號(hào)bigint8not nullfriendjicq朋友號(hào)bigint8not nullmessagehead消息標(biāo)題varchar200not nullflag消息狀態(tài)smallintmessagecontent消息內(nèi)容varchar500not nul
39、l第 30 頁 共 30 頁表 3 jfriends(朋友表)用來存放用戶的好友信息簡(jiǎn)稱字段名類型長(zhǎng)度允許空備注jicq_friend_id自增主鍵bigint8not nullpkjicq自己 icq 號(hào)bigint8not nulljfriendid朋友 icq 號(hào)bigint8not nulljfriendtypeid朋友類別int4not nullfk表 4 jfriendtype(朋友類別表)用來存放用戶的好友組信息簡(jiǎn)稱字段名類型長(zhǎng)度允許空備注jfriendtypeid主鍵自增int4not nullpkjfriendtypename好友組名稱varchar100not nullji
40、cqicq 號(hào)碼bigint8not null表 5 jgroups(用戶組表)用來存放用戶的群組信息簡(jiǎn)稱字段名類型長(zhǎng)度允許空備注jgroupid群號(hào)碼int4not nullpkjgroupjicq群名稱bigint8jgroupname群名稱varchar100not nulljgrouppicid群圖片 idint4not nulljgrouptype群類別varchar100jgroupbcast群公告varchar500jgroupinfo群信息varchar500表 6 jgroup_users(用戶和組關(guān)聯(lián)表)用戶和組之間的關(guān)聯(lián)表簡(jiǎn)稱字段名類型長(zhǎng)度允許空備注jgroupid_ji
41、cq主鍵bigint8not nullpkjgroupid組 idint4not nullfkjicqicq 號(hào)碼bigint8not nullfkjgroupname群名稱varchar200not nulljmessagestatus群消息狀態(tài)smallint2not null4 4 系統(tǒng)實(shí)現(xiàn)系統(tǒng)實(shí)現(xiàn)4.14.1 網(wǎng)絡(luò)通訊編碼實(shí)現(xiàn)網(wǎng)絡(luò)通訊編碼實(shí)現(xiàn).1 聊天客戶端部分代碼聊天客戶端部分代碼下邊是聊天客戶端的核心代碼,它用來判定消息的來源以及針對(duì)該消息所進(jìn)行的相應(yīng)的操作。for(int i=0;imypersontree.alist.size();i+)/判斷是哪個(gè)好友發(fā)來的信
42、息 p=(person)mypersontree.alist.get(i); if(p.getid().equals(hisjicq) break; else p=null; if(p!=null)/隊(duì)列中有該好友 jicqchatframe jchatexist=null;第 30 頁 共 30 頁 int isexistframe=0;/判定聊天窗口是否已經(jīng)打開 for(int i=0;imypersontree.vector.size();i+)/遍歷向量 jchatexist=(jicqchatframe)mypersontree.vector.get(i); if(jchatexis
43、t.jicq.equals(hisjicq) isexistframe=1;/聊天窗口已經(jīng)打開 break; if(isexistframe=0)/聊天窗口沒有打開,新建一個(gè)窗口 jicqchatframe jchat=new jicqchatframe(p,this); mypersontree.vector.addelement(jchat); jchat.setmessage(headmsg,msg); else /在聊天窗口中顯示該信息 jchatexist.setmessage(headmsg,msg); else jicqchatframe jchatexist=null; int
44、 isexistframe=0; for(int i=0;imypersontree.unkonwvector.size();i+) /陌生人的信息 jchatexist=(jicqchatframe)mypersontree.unkonwvector.get(i); if (jchatexist.jicq.equals(hisjicq) isexistframe=1; break; .2 服務(wù)器端監(jiān)聽與轉(zhuǎn)發(fā)消息代碼服務(wù)器端監(jiān)聽與轉(zhuǎn)發(fā)消息代碼下邊是服務(wù)器端的監(jiān)聽程序,如果發(fā)現(xiàn)有 socket 連接,就創(chuàng)建一個(gè)與該連接所對(duì)應(yīng)的一個(gè)線程,該線程主要用來處理用戶之間的信息交互。pub
45、lic void run() try while(true) /始終監(jiān)聽狀態(tài)第 30 頁 共 30 頁 socket client=listen.accept(); /創(chuàng)建用戶線程 personthread f=new personthread(client); f.setpriority(thread.min_priority); f.start(); catch(ioexception e) system.err.println(erro:+e); system.exit(1); /服務(wù)器端的消息轉(zhuǎn)發(fā)函數(shù) public static void broadcast(string msg,st
46、ring hisjicq) int i; personthread you; for(i=0;iconnections.size();i+) you=(personthread)chatserverthree.connections.elementat(i); if(you.jicq.equals(hisjicq) you.send(msg); .3 服務(wù)端單線程上線處理代碼服務(wù)端單線程上線處理代碼下邊是服務(wù)器端上的單線程的處理代碼,主要通過網(wǎng)絡(luò)流來讀取客戶端發(fā)送的消息,然后將消息分解,用來區(qū)分消息的類型,譬如是群消息還是個(gè)人消息等。 while(true) line=in.r
47、eadutf(); system.out.println(line); /將讀取的信息按照特定格式進(jìn)行拆分 stringtokenizer stk=new stringtokenizer(line,#); /people+#+jicq if(stk.hasmoreelements() key=(string)stk.nextelement(); /用戶上線提示 if(key.equals(people)第 30 頁 共 30 頁 try string jnum=(string)stk.nextelement(); this.jicq=jnum; for(int i=0;ichatservert
48、hree.connections.size();i+) personthread tt=(personthread)chatserverthree.connections.get(i); if(tt.jicq.equals(this.jicq) chatserverthree.broadcast(relog#yes,tt.jicq); chatserverthree.connections.remove(i); tt.stopthread(); break; /將該線程加入到線程向量中 chatserverthree.connections.addelement(this); friends
49、f=new friends(); resultset rs=f.selectaddmeperson(jnum); arraylist flist=new arraylist(50); while(rs.next() flist.add(rs.getstring(1); for(int i=0; ichatserverthree.connections.size();i+) personthread pt=(personthread)(chatserverthree.connections.elementat(i); if(flist.contains(string)pt.jicq) chats
50、erverthree.broadcast(line,pt.jicq); s_mydetails smy=new s_mydetails(); /從信息表中讀取離線信息,然后將之刪除 resultset rsmessage=smy.ishavemessage(jnum); if(rsmessage!=null) while(rsmessage.next() int friendjicq=rsmessage.getint(friendjicq); int myjicq=rsmessage.getint(myjicq); string msghead=rsmessage.getstring(mess
51、agehead); string msgbody=rsmessage.getstring(messagecontent); int flag=rsmessage.getint(flag); string allmsg=; if(flag=1)allmsg=msgone#+friendjicq+#+myjicq+#+msghead+#+msgbody; else 第 30 頁 共 30 頁allmsg=addfriend#+friendjicq+#+myjicq+#+msghead+#+msgbody; chatserverthree.broadcast(allmsg,jnum); smy.de
52、loldmessage(jnum); 4.24.2 系統(tǒng)運(yùn)行的效果圖系統(tǒng)運(yùn)行的效果圖 .1 登錄界面登錄界面該界面提供用戶輸入自己注冊(cè)號(hào)碼和相應(yīng)的密碼,然后登錄系統(tǒng),如果還沒有注冊(cè)帳號(hào),可以點(diǎn)“申請(qǐng)”進(jìn)行帳號(hào)的申請(qǐng)。如下圖所示:圖 15 登錄界面.2 主界面主界面登錄成功后的主界面,主要是一些好友的信息,以及一些好友分組的信息,在此界面上可以進(jìn)行好友的添加、查找、刪除,以及好友組的添加、刪除,同時(shí)還可以查看最近聯(lián)系人等功能。第 30 頁 共 30 頁圖 16 主界面.3 群聊天界面群聊天界面如果你已經(jīng)成功的加入該群,你就可以在群中和其他群成員進(jìn)行
53、一些信息的交互。第 30 頁 共 30 頁圖 17 群聊天界面.4 好友聊天界面好友聊天界面 該界面主要是用戶聊天的主要界面,主要提供了發(fā)送和接受聊天信息功能,以及查看聊天記錄,同時(shí)還可以查看好友的一些基本信息。第 30 頁 共 30 頁圖 18 好友聊天界面.5 好友查找界面好友查找界面好友添加和查找的界面,你可以根據(jù)不同的條件來進(jìn)行好友查找的篩選,比如只查找在線的用戶或者可以查看所有用戶,還可以根據(jù)一些信息講查找范圍縮小,比如根據(jù)用戶的性別 年齡等信息進(jìn)行查詢,以滿足自己的查找需要。圖 19 添加好友界面第 30 頁 共 30 頁4.34.3 注冊(cè)模塊的實(shí)現(xiàn)
54、注冊(cè)模塊的實(shí)現(xiàn).1 數(shù)據(jù)庫連接數(shù)據(jù)庫連接jdbc 數(shù)據(jù)庫連接的核心代碼,ip 地址設(shè)定為本機(jī)的 ip:connection conn = null;statement st = null;try /加載驅(qū)動(dòng)程序class.forname(com.microsoft.jdbc.sqlserver.sqlserverdriver); /創(chuàng)建數(shù)據(jù)庫的連接conn=drivermanager.getconnection(jdbc:sqlserver:/;databasename=jicq,sa, sa);.2 字符編碼過濾器的核心代碼字符編碼過濾器的核
55、心代碼該過濾器實(shí)現(xiàn) servlet 的過濾器接口,設(shè)置字符編碼為 gb2312,主要用來解決在表單提交工程中所出現(xiàn)的中文亂碼問題,主要用來解決以 post 方式提交的表單所出現(xiàn)的中文亂碼問題。 public class characterencodingfilter implements filterprotected filterconfig filterconfig; protected string encoding=null;protected boolean ignore=true;/初始化字符過濾器 public void init(filterconfig filterconfi
56、g) throws servletexception this.filterconfig = filterconfig; /設(shè)定編碼方式,從 web.xml 配置文件中獲取該參數(shù) this.encoding = filterconfig.getinitparameter(encoding); string value = filterconfig.getinitparameter(ignore); if(value=null)this.ignore=true; else if(value.equalsignorecase(true)this.ignore=true; else if(value
57、.equalsignorecase(yes)this.ignore=true; else this.ignore=false; /重寫 filter 的過濾方法 public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception 第 30 頁 共 30 頁 if(ignore|request.getcharacterencoding()=null) string encoding =this.selectencoding(request); if(encoding!=null) system.out.print
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年財(cái)務(wù)顧問服務(wù)合同標(biāo)的為上市公司并購重組
- 證券投資公司參股管理流程
- 教育機(jī)構(gòu)對(duì)賬管理規(guī)范
- 書店勤雜工聘用合同
- 建筑工程審計(jì)評(píng)估勞務(wù)合同
- 農(nóng)業(yè)科技轉(zhuǎn)化種植合作
- 2025進(jìn)口設(shè)備補(bǔ)償貿(mào)易合同范文
- 2024年鮮花保鮮冷庫協(xié)議
- 林業(yè)資源安全防護(hù)事故規(guī)定
- 2025食堂蔬菜等采購合同協(xié)議書
- 低空經(jīng)濟(jì)產(chǎn)業(yè)園項(xiàng)目可行性研究報(bào)告
- 中國(guó)神話故事繪本倉頡造字
- 消化道出血護(hù)理新進(jìn)展
- MOOC 心理健康與創(chuàng)新能力-電子科技大學(xué) 中國(guó)大學(xué)慕課答案
- 黃蒿界礦井及選煤廠建設(shè)項(xiàng)目環(huán)境影響報(bào)告書
- 感動(dòng)中國(guó)人物張桂梅心得體會(huì)(30篇)
- 2024年云南昆明市公安局文職輔警招聘筆試參考題庫附帶答案詳解
- 采購計(jì)劃員年終工作總結(jié)
- 技術(shù)總監(jiān)年度述職報(bào)告
- 第十四章出口管制課件
- 常用井下工具原理與用途課件
評(píng)論
0/150
提交評(píng)論