毕业设计(论文)-基于JAVA的企业级即时平台设计与实现.doc_第1页
毕业设计(论文)-基于JAVA的企业级即时平台设计与实现.doc_第2页
毕业设计(论文)-基于JAVA的企业级即时平台设计与实现.doc_第3页
毕业设计(论文)-基于JAVA的企业级即时平台设计与实现.doc_第4页
毕业设计(论文)-基于JAVA的企业级即时平台设计与实现.doc_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中南大学学士论文 基于java的企业级即时通信平台设计与实现中 南 大 学本科生毕业论文(设计) 题 目 基于java的企业级即时 通讯平台设计与实现 学生姓名 指导教师 学 院 商学院 专业班级 信息管理及信息系统0601 完成时间 2010年5月 目 录摘 要1abstract2第一章绪 论31.1本文研究背景及意义31.1.1本文研究背景31.1.2本文研究意义31.2 国内外即时通讯发展状况41.3本文内容及结构5第二章 相关技术理论概述72.1即时通讯常用技术简介72.2 eim通信系统相关技术82.2.1 tcp/ip与udp简介82.2.2 mina通信框架简介92.2.3 xml解析简介102.2.4 hibernate框架简介122.2.5 swing美工技术13第三章 eim系统通信协议设计163.1 eim系统网络结构163.2 eim系统通信协议分析163.2.1现行常用即时通信协议163.2.2 eim通信协议分析173.3 eim系统协议设计173.3.1 消息结构设计173.3.2 消息详细设计183.3.3 eim通信协议总结23第四章 eim服务器设计与实现254.1 eim服务器分析254.1.1 eim服务器可行性分析254.1.2 eim服务器需求分析264.2 eim服务器设计304.2.1服务器总体设计304.2.2服务器数据库设计314.2.3服务器详细设计324.3 eim服务器运行界面展示36第五章 eim客户端设计与实现375.1 eim客户端分析375.1.1 eim客户端可行性分析375.1.2 eim需求分析需求分析375.2 eim客户端设计385.2.1客户端总体设计385.2.2客户端详细设计395.3eim客户端界面展示42第六章 结 论43结束语45参考文献46附 录4752摘 要即时通讯(im:instant messenger)软件是我国目前上网用户使用率最高的软件之一,即时通讯系统(instant messaging system)可使人们在网上识别在线用户并与之实时交流。通过im我们可以达到即时和沟通1。在现代化的企业中,员工在工作时经常要与其他同事进行协同工作和跨部门合作,全方位地利用有限资源协同完成更多工作,因此各部门同事间需要进行即时的沟通。而很多公司内部员工的沟通是基于email、电话、短信、传真。大公司在通信费用上的花销绝对不是个小数目,尤其是那些跨地域分公司众多的企业这块尤其突出。在竞争如此激烈的社会,企业节约这部分费用也是利率提高的手段。本文对企业即时通讯系统所涉及的技术问题进行了比较系统的研究,针对即时通讯的特点,运用java、apache的开源通信框架mina(multipurpose infrastructure for network applications)以及mysql开发一个在基于tcp/ip面向连接的企业内部沟通平台。主要在一下几个方面做了研究: 通信框架mina。用apache的开源通信框架mina作为本系统的应用层,通信连接类都是在mina的基础上封装而成。 java技术。在系统中大量运用java中的swing、多线程,io流,集合框架以及众多的设计模式 数据持久。系统中运用了mysql作为数据库,hibernate作为orm(object relational mapping)层。 解析xml。用xml文件去为系统做配置,大消息内容也是基于xml。所以此系统用了大量的xml解析。本系统的最终目的是构造一个企业级的即时通讯软件,实现企业内部的即时通信。通过该系统,在服务器端可以向全公司的人员发布通知、公司新闻、行业动向,而在客户端可以即时消息、文件传输等功能。可实现使用者与各部门同事间协同办公的要求,满足企业内部进行更加高效沟通的需求,为企业提供一种公共的、可靠的内部沟通方式。关键词:即时通讯;java; swing; apache mina; xml; hibernateabstractas to internet users in china at present ,im(instant messenger) software is one of the highest rates of software .instant messenger system will enable people to identify online users and the internet with real-time communication. we can achieve real-time via im and communication. in the modern enterprise, employees at work often were working together with other colleagues and cross-sectoral cooperation, all-round cooperative use of limited resources to do more work, hence the need for real-time colleagues to communicate. and many internal staff communication is based on email, telephone, sms, fax. large companies spending on communication costs are definitely not a small number, especially those cross-regional branch pieces of a large number of enterprises in particular. in such a competitive society, business is also part of the cost savings it means higher interest rates.in this paper, enterprise instant messaging systems technical issues involved in a more systematic study. for the instant messaging features, using of java, apaches open source communications framework mina and mysql , i develop one internal communication platform which base on tcp / ip connection and is connection oriented . mainly in the following aspects have been studied:: communication framework (mina). apaches open source communications framework with mina as application layer of the system. communication connection class is based on mina to package.: parsing xml. using xml file to configure the system, the message content is also based on xml. therefore, the system spent a lot of xml parsing.: java technology. in the system make extensive use of java in the swing, multithreading, io streams, collections framework and many of the design patterns: data persistence. in system, mysql is used for the database and hibernate as orm layer.the ultimate goal of this system is to construct an enterprise-class instant messaging software, instant messaging within the enterprise. through the system, the server side can be issued to notify all the companys personnel, the company news, industry trends. in the client can instant messages, file transfer and other functions. enables users with the collaboration between colleagues in the department office requirements, meet enterprise demands for more efficient communication, and provide a public good, reliable internal communication.key words:instant messenger; java; swing; apache mina; xml; hibernate;第一章 绪 论1.1本文研究背景及意义1.1.1本文研究背景近些年来,随着网络通信技术的不断发展和社会信息化建设水平的不断提高,即时通讯系统在社会生活和经济生活中得到了越来越广泛的应用。即时通讯大大改变了人们的生活和工作方式也改变了企业的工作流程,规范了内部信息交互流程,减少了企业沟通的中间环节,降低了企业的沟通成本;并使沟通活动不再受地域和时间的限制,方便了企业的信息发布,密切了企业和员工的关系。因此越来越多的企业采纳即时通讯系统作为内部的沟通模式。随着互联网上的即时通讯工具大量出现,即时通信作为一种交流形式己经在社会经济生活中占据一定的地位。另一方面,互联网技术的发展在推动即时通讯进步的同时,也使即时通讯系统的构建实现技术面临新的挑战。作为网络信息技术前沿的java,己经是软件界的一个热门话题,它提供的跨平台性、支持网络和数据库编程,为网络系统的开发提供了新的途径。1995年,sun公司的java语言以其提供的跨平台应用程序开发与配置震撼了整个编程世界。几年来,java从一种编程语一言发展到了开发企业级应用系统的java2平台。1999年sun公司推出j2ee,它包括servlet, jsp和javabean等许多技术和规范。j2ee平台也为web应用的开发提供了从客户层到web服务层到业务逻辑层的全方位技术支持,而且得到了ibm, bea和oracle等很多公司的认可,是一种很有前途的也是比较成熟的开发网络应用的技术选择方案。1.1.2本文研究意义即时通信的确是对企业非常有用的一项技术,它能实现快速人际交流、数据共享,从而提高效率和生产力。然而对于个人即时通信,企业主管们却是又爱又恨。一个显而易见的顾虑是:你没法知道你的属下正在用它做什么,而个人即时通信软件与生俱来的娱乐性,让这一顾虑看上去似乎更有道理。于是针对企业用户的即时通信(enterprise instant messenger,以下简称eim)产品应运而生,其易于管理的特性和相对“严肃”的风格,有理由使公司的老板们相信用友crm趋利避害是可能的。qq,msn等即时通讯面向全社会,会将与工作无关的人进入办公室,从而影响工作效率;而企业即时通讯客户端则是将工作相关的人引入电脑,从而提高工作效率。” 原因很简单,企业即时系统不仅可以使公司内外各个作业流程在电脑上表现出来,还能提高工作效率,简化业务流程。以企业即时通讯客户端系统为例,其所具备的点对点、一点对多点、多点对多点群发消息、文件传输、文件共享、白板交流、协同浏览、在线支付、数据统计、发送手机短信等功能,完全可以帮助企业降低内外交易成本,增进工作效率。而msn等个人即时通讯系统,则更重视娱乐方面的功能,无法适应企业需求。而且,由于缺乏监督和实名制等手段,个人即时通讯更容易与工作无关的陌生人取得联系。这反而会降低工作效率,对企业即时通讯客户通的作用恰得其反。 首先,企业时常需要面对内部员工发布一些信息。传统的文件方式需要先打印出来,然后人工分发,若要收集员工的反馈信息则还要另外准备,因此效率比较低。使用客户通之后,向员工发布信息通知则变得相当简单,同时还可以即时得到反馈信息。 此外,召开内部会议是企业经常性的事务。有了客户通,利用其网络会议功能,可以方便地在员工电脑前召开或者参加会议。随着手机的普及,收发短信已经成为企业一种重要的联系方式。因此手机短信功能也被集成到企业im之中,用友crm让信息传达变得非常方便快捷。1.2 国内外即时通讯发展状况目前国内即时通讯产品市场竞争异常激烈,以腾讯qq微软msn网易popo 等为代表的众多即时通讯产品显然拥有大批使用者!而其具备的高交互性特点和日新月异的新功能也让更多的网民对其爱不释手.现对国内几款主流即时通讯工具做一简要分析2.腾讯qq 据腾讯qq 官方消息,2009年qq在国内已拥有10.57亿多的注册用户,4.84亿活跃用户,同时在线人数1亿以上.目前腾讯qq已成为国内用户最多的个人即时通讯工具。占据着国内约65%以上的市场份额 1999 年2 月,腾讯推出基于互联网的即时通讯工具-qq,支持在线消息收发,即时传送语音,视频和文件,并且整合移动通讯手段!,可通过客户端发送信息给手机用户. 目前qq已开发出穿越防火墙、 动态表情、给好友放录像、捕捉荧屏、共享文件夹、提供聊天场景、聊天时可显示图片等强大的使用功能. 另外, qq 还增加了qq群、 qq秀、 qq宠物 、qq游戏等娱乐功能.由于qq良好的开放功能、休闲娱乐服务,使其拥有了庞大的用户群,在近几年内突飞猛进,牢牢占据着国内即时通讯霸主地位.微软msn msn是微软公司开发的即时聊天工具, 由于微软产品用户众多,操作简单,运行稳定,且与windows xp 进行了无缝结合,使得msn 的普及速度非常快,现在已经是世界主流的聊天工具,在国内即时通讯软件中稳占了第二的位置. msn支持手写功能,但与其他即时通讯软件最大的不同是不支持离线消息. 微软会愚蠢到放弃功能强大的离线消息市场吗?盖茨肯定没那么傻,msn 采用邮件地址作为用户名,借此建立msn与hotmail之间的连接,当对方不在线时,你可以选择给对方的msn 邮箱或hotmail 发送邮件. 这样msn就不仅是一个简单的即时通讯软件,而演变为以msn 为中心的整合服务.网易popo网易popo是由网易公司开发的一款免费多媒体即时通讯工具,可谓即时通讯软件中杀出的一匹黑马,虽然推出时间不长,但popo融合了qq 与msn 的优点,解决安全与隐私问题的功能非常完善,特别是好友的权限设置功能,优于其他即时通讯软件。 popo既有即时文字聊天、语音通话、视频对话、文件传输等基本即时通讯功能,还提供邮件提醒、多人兴趣组、在线及本地音乐播放、网络电台、发送网络多媒体文件、网络文件共享、自定义软件皮肤等多种功能,并可与移动通讯终端等多种通讯方式相连3。用户除了可以通过在线时长积分换取免费的短信服务,还可以设置在下线时将收到的信息转发到手机上。 另外,popo还支持用户同时登录一msn 账户,实现了与msn 的互通互联. icq icq是1996 年11月在全世界范围推出的第一款即时通讯软件,是现在功能最强大、全球用户最多、应用最广泛的即时通讯工具。 但是,由于它的操作和设置比较复杂,再加上全英文的聊天界面,使许多中国用户对它望而生畏,在中国市场上所占份额逐渐萎缩。 近期,就在其他同行纷纷通过增加功能来吸引用户时icq 反而推出了功能精简版的icq lite 试图在中国市场东山再起2。1.3本文内容及结构本文对企业即时通讯系统所涉及的技术问题进行了比较系统的研究,针对即时通讯的特点,运用java、apache的开源通信框架mina以及mysql开发一个在基于tcp/ip面向连接的企业内部沟通平台。这个系统除了没有用web技术外几乎用了本人的全部技能,这大学4年里学的java技术都可以从这个项目中得以体会,主要在一下几个方面做了研究: 通信框架mina。用apache的开源通信框架mina作为本系统的应用层,通信连接类都是在mina的基础上封装而成。 java技术。在系统中大量运用java中的swing、多线程,io流,集合框架以及众多的设计模式。在swing运用了窗体重绘、倒影、透明等一系列技术。在多线程方面研究了线程的同步、互斥、加锁。系统里有大量的计模式例如:单例模式、工厂模式、生产消费者模式、命令模式、责任链模式、观察者模式,适配器模式等等数据持久。系统中运用了mysql作为数据库,hibernate作为orm(object relational mapping)层。解析xml。用xml文件去为系统做配置,大消息内容也是基于xml。所以此系统用了大量的xml解析。本系统运用了最新的解析xml技术xstream,在本文中我会详细介绍下如何去现实object和xml之间的转换。本文研究背景及意义国内即时通讯发展状况内容与结构eim系统通信协议设计eim客户端设计与实现结 论eim系统网络结构eim通信协议分析eim通信协议设计eim通信协议总结即时通讯常用技术通信系统相关技术tcp/ip与udp简介mina通信框架简介xml解析简介hibernate数据持久swing美工技术eim服务器设计及实现eim服务器分析eim服务器运行展示eim服务器设计与实现eim客户端分析具eim客户端设计及实现具eim客户端运行展示具结束语图1-1:本文结构图第二章 相关技术理论概述2.1即时通讯常用技术简介现在有许多的 im 系统,如 aol im、yahoo im 和 msn im,它们使用了不同的技术,而且它们互不兼容。为了创建即时通讯的统一标准,人们经过了多次尝试:ietf 的对话初始协议(sip)和即时通讯对话初始协议和表示扩展协议(simple)、应用交换协议(apex)、显示和即时通讯协议(prim)及基于 xml且开放的可扩展通讯和表示协议(xmpp)协议(常称为 jabber 协议)。人们多次努力,试图统一各大主要 im 供应商的标准(aol、yahoo 及 microsoft),但无一成功,且每一种 im 仍然继续使用自己所拥有的协议4。 这些常用的即时通讯传送协议如下:可扩展通讯和表示协议(xmpp):用于流式传输准实时通信、表示和请求 -响应服务等的 xml 元素。xmpp 基于 jabber 协议,是用于即时通讯的一个开放且常用的协议。尽管 xmpp 没有被任何指定的网络架构所融合,它还是经常会被用于客户机/服务器架构当中,客户机需要利用 xmpp 协议通过 tcp 连接来访问服务器,而服务器也是通过tcp连接进行相互连接5。 即时通讯对话初始协议和表示扩展协议(simple):simple 协议为 sip 协议指定了一整套的架构和扩展方面的规范,而 sip 是一种网际电话协议,可用于支持im/消息表示。sip 能够传送多种方式的信号,如 invite 信号和 bye 信号分别用于启动和结束会话。 simple 协议在此基础上还增加了另一种方式的请求,即 message 信号,可用于发送单一分页的即时通讯内容,即分页模式的即时通讯。subscribe 信号用于请求把显示信息发送给请求者,而 notify 信号则用于传输显示信息。较长 im 对话的参与者们需要传输多种的延时信息,它们使用 invite 和一个叫做消息会话中继协议(msrp)。与 simple 协议结合,msrp 协议可用于 im 的文本传输,正如与sip协议相结合,rtp 协议就可以用于传输 ip 电话中的语音数据包一样。jabber: jabber 是一种开放的、基于 xml 的协议,用于即时通讯消息的传输与表示4。国际互联网中成千上万的服务器都使用了基于 jabber 协议的软件。jabber 系统中的一个关键理念是 “传输”,也叫做“网关”,支持用户使用其它协议访问网络如 aim 和 icq、msn messenger 和 windows messenger、sms 或 e-mail。即时通讯通用结构协议(cpim):cpim 定义了通用协议和消息的格式,即时通讯和显示服务都是通过 cpim 来达到 im 系统中的协作。2.2 eim通信系统相关技术本系统的开发是基于java的,开发工具用到了myeclipse以及netbeans,而相关技术则涉及众多 大体分为:mina通信框架、xstream解析xml 、hibernate数据持久、swing美工 、java多线程等等。2.2.1 tcp/ip与udp简介在此系统做之前应该选定其最底层的通信协议,是基于tcp/ip还是udp还是其他的一些协议。这要看系统的要求,因本人的时间有限以及udp编程实战经验不足,所以选择了基于tcp/ip面向连接的网络连接。在下面本人介绍下tcp/ip和udp。因本人在网络基础课题上没好好认真听讲,网络知识不是很扎实,这些知识都是我在日常的编程中所体会到的,如有错误请见谅。那么它们是什么?tcp/ip和udp他们都是网络协议,它们都规定了一组io流或者数据在网络中的读写顺序和差错控制机制。没有tcp/ip就没有今天的网络,没有udp就没有今天的qq,当然现在qq支持多种协议。tcp/ip和udp最大的区别是: tcp/ip是面向连接而udp则面向无连接。tcp/ip提供可靠的通信而udp提供不可靠的通信,当然tcp/ip提供可靠的通信必然要付出代价,那就是udp数据包简单快速。为啥?原因很简单tcp/ip数据包复杂,在解析它是时间比udp长,所以udp快。udp又称数据报通信,与tcp/ip想比,是不可靠的,非面向连结的;基于tcp/ip的通信,前提是双方选要建立一个连结管道,即程序中的socket对象,然后双方在这个管道上收发数据;而udp数据发送时,发送方只需要知它的目标地址即可发送,发送后,并不关心,也不保证会被接收方收到一个形象的例子是:二个人之间打电话,就是基于tcp/ip的socket通信前提是双方必须建立一个通话信道;而udp通信就像发短信,发送方只需发出即可。它们的通信模型见图2-1和图2-2。图2-1: 基于tcp/ip的socket通信模型图2-2: 基于udp数据包的通信模型tcp/ip的socket通信是面向连结的!双方必须先建立一个通信管道;而udp只需要知道目标地址(ip和端口)即可发送,至于目标端口是否打开,目标地址是否真正存在,数据是否被发送到了目标地址,发送者都不需知道,也无法知道,发送者只要发送即可。2.2.2 mina通信框架简介apache mina(multipurpose infrastructure for network applications) 是 apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 mina 版本支持基于 java nio 技术的 tcp/udp 应用程序开发、串口通讯程序(只在最新的预览版中提供),mina 所支持的功能也在进一步的扩展中。目前正在使用 mina 的软件包括有:apache directory project、asyncweb、amqp(advanced message queuing protocol)、red5 server(macromedia flash media rtmp)、object radius、open fire 等等。mina能干什么?先写两个程序来演示一下:我们用它做两个小程序,一个为服务器,收到客户机的消息后,就回送给客户机;一个是简单的客户机,一连上服务器,就发一条消息报到,然后将从服务器接到的消息再发给服务器。第一 mina开发环境准备首先到官方网站下载最新的mina 版本,地址是:/downloads.html。下载之前先介绍一下 mina 的两个版本:1.0.x 适合运行环境为 jdk1.4,1.1.x 适合 jdk1.5 的版本,两者的编译环境都需要 jdk1.5。jdk1.5 已经是非常普遍了,本文中使用 1.1.5 版本的 mina,编译和运行所需的文件是 mina-core-1.1.5.jar。下载 mina 的依赖包 slf4j。mina 使用此项目作为日志信息的输出,而 mina 本身并不附带此项目包,请到/download.html 地址下载 slf4j 包,slf4j 项目解压后有很多的文件,本例中只需要其中的 slf4j-api-1.4.3.jar 和 slf4j-simple-1.4.3.jar 这两个 jar 文件。如果没有这两个文件就会导致启动例子程序的时候报 org/slf4j/loggerfactory 类没找到的错误 当然要求机器上必须装有 1.5 或者更新版本的 jdk。最好你应该选择一个顺手的 java 开发环境例如 eclipse 或者 netbeans 之类的,可以更方便的编码和调试,虽然我们的最低要求只是一个简单的文本编辑器而已。第二 编写代码并执行 编写mina服务器代码服务器端由两个类组成,一个是min.java,启动服务器的主类;另一个是samplminaserverhandler.java,这个类负责处理连结上来的客户机,即消息处理器。samplminaserverhandler代码如附录中的程序1,mainserver代码如附录中程序2。一个基于mina的服务器创建流程如图2-3图2-3服务器创建流程 编写mina客户机代码一个基于mina最简单的客户机包括一个启动主类main client,一个消息处理器(client handler)。启动主类代码见附录程序3,消息处理器类代码见附录程序4。一个基于mina的客户端创建流程如图2-4图2-4客户端创建流程按照以上三个步骤就可以实现一个简单的客户/服务器的程序。需要复杂则可以在mina的基础上封装成自己想要的类。本文在服务器设计时会详细介绍如何去封装。2.2.3 xml解析简介1. xml简介xml(extensible markup language)即可扩展标记语言,它与html一样,都是sgml(standard generalized markup language,标准通用标记语言)。xml是internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言xml是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然xml占用的空间比二进制数据占用更多的空间,但xml极其简单易于掌握和使用。xml的简单使其易于在任何应用程序中读写数据,这使xml很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持xml,那就意味着程序可以更容易的与windows、mac os, linux以及其他平台下产生的信息结合,然后可以很容易加载xml数据到程序中并分析他,并以xml格式输出结果。为了使得sgml显得用户友好,xml重新定义了sgml的一些内部值和参数,去掉了大量的很少用到的功能,这些繁杂的功能使得sgml在设计网站时显得复杂化。每个xml文档都由xml序言开始,在前面的代码中的第一行便是xml序言,。这一行代码会告诉解析器和浏览器,这个文件应该按照前面讨论过的xml规则进行解析。第二行代码,则是文档元素(document element),它是文件中最外面的标签(我们认为元素(element)是起始标签和结束标签之间的内容)。所有其他的标签必须包含在这个标签之内来组成一个有效的xml文件。xml文件的第二行并不一定要包含文档元素;如果有注释或者其他内容,文档元素可以迟些出现。xml文档结构如图2-5图2-5 xml 文档结构2. xstream简介开源项目xstream是一套简单实用的类库,用于序列化对象与xml对象之间的相互转换。本文以xstream 1.1.2版进行说明,它具有以下几个特点:灵活易用:在更高的层次上提供了简单、灵活、易用的统一接口,用户无需了解项目的底层细节。无需映射:大多数对象都可以在无需映射的情况下进行序列化与反序列化的操作高速稳定:设计时力求达到的最重要的指标是解析速度快、占用内存少,以使之能够适用于大的对象处理或是对信息吞吐量要求高的系统清晰易懂:项目采用reflection机制得到无冗余信息的xml文件。所生成的xml文件较本地java序列化产物更简洁,格式更清晰,更便于用户阅读无需修改:完全序列化包括private和final类型在内的全部内部字段。支持非公有类和内部类,类可以没有缺省的构造函数易于集成:通过实现特定的接口,xstream可以直接与其它任何树型结构进行序列化与反序列化操作(而不仅仅是xml格式)灵活转换:转换策略是可以定制的,允许用户自定义特殊类型的对象如何以xml格式存储。错误处理:由于xml资料不合法而造成异常时,会提供详细地诊断信息帮助处理问题。xstream主要应用于以下场合:数据对象的持久化、数据交换、配置文件3. xstream解析xml实例在附录中代码5至7我们通过一个简单的例子来了解xstream是如何工作的。先定义一个person类phonenumber类。我将会用xstream把他们转换为xml格式的字符串(将对象序列化为xml文档),之后我又从字符串转换成对象(从xml文件反序列化成对象)。源码及运行效果如附录代码5至7。2.2.4 hibernate框架简介在系统开发中必然要用到数据库,在程序中操作数据库是件十分麻烦和繁琐的事情。所以在系统开发前选择好数据持久工具。在本系统开发时本人运用了hibernate框架来做服务器系统的orm。hibernate是一个开放源代码的对象关系映射框架10,它对jdbc进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库。 hibernate可以应用在任何使用jdbc的场合,既可以在java的客户端程序使用,也可以在servlet/jsp的web应用中使用,最具革命意义的是,hibernate可以在应用ejb的j2ee架构中取代cmp,完成数据持久化的重任11。hibernate全面解决方案体系结构如图2-6。图2-6 hibernate体系结构这个图上我们可以看出,hibernate面向程序的是hibernate的持久类,面向数据库的是session。他是应用程序和数据库的桥梁。而我们编程是离不开数据的操作的,所以我的感觉是学好hibernate是件很重要的事情。hibernate用hibernate_cfg_xml文件集中了数据库的配置信息,用* .hbm_xml规范了数据库表格的字段,连接了应用程序中的对象和数据库的表格11。在这里就不详细介绍如何使用hibernate,因为hibernate在java编程界是个基本工,这个资料网上书本上有很多。2.2.5 swing美工技术java 基础类(jfc)swing 工具提供了使用java 平台创建高度可交互性图形用户界面的类。swing 是高度灵活的,但是也因此相当复杂,虽然新手能够使用swing 创建基本的图形用户界面(gui),但是真要创建一个复杂、专业的gui 界面,你必须理解swing 的体系架构的基础,尤其是使用swing 创建复杂、像jtable 、jtree、jcombobox 以及jlist 这样基于渲染器的组件,swing 提供的基于模型和渲染器的组件是构建高性能、可扩展gui 的关键。1.swing 体系结构最初smalltalk 系统的ui 工具使用所谓的模型视图控制(mvc)模式,mvc 引入这样一个概念:数据源应该同屏幕展现分开。这是一个优秀的体系设计结构,能促进代码重用和程序框架。swing 使用的是一个变体的mvc 架构,如图2-7所示: 图2-7 swing的mvc结构 图2-8 带渲染器的swing mvc结构典型的swing gui 组件包括至少三个对象:一个component,一个model 和一个ui delegate,在这个框架中,model 负责存储数据,ui delegate 负责从model 获取数据并渲染到屏幕上去,component 通常协调model 和delegate 之间的操作,并同时负责将swing 嵌入到awt 窗口系统中12。注意,ui delegate 对象可以在运行的时候动态替换,这就使swing 具备了可插拔的外观(pluggable look-and-feel, plaf)。虽然swing 的mvc 结构显然具备灵活性的好处,但是这个结构通常被指责为一些程序慢的根源。虽然基于mvc 结构需要更多的方法调用来支持额外的重定向,其实花费在这儿的消耗很小。对基于swing 的应用程序profile 的结果显示,model-view 分隔的开销可以忽略不计,不到cpu 总开销的1%,复杂的swing 用户界面的多数处理事件其实都花费在了底层的图形操作上了12。swing 的model-vie w 结构并不是低性能的根源,它是构建可扩展程序的关键。swing还提供了一些处理大数据量数据集的组件,包括jtable、jtree、jlist 以及jcombobox。这些矢量组件被设计成能够处理成千上万甚至数百万的数据,为了避免占用大量内存,这些组件在swing 的体系架构增加了渲染器(renderer)概念。下图(图2-8)是增加了渲染器结构的swing 体系架构。在客户端的有某些界面用了倒影效果、透明化效果、重绘组建技术。下面我分别把这几个技巧详细说下。在服务器个客户端详细设计时就不多说了。2. swing 透明和重绘技术swing透明化透明化在java中其实就是在窗体构造函数中增加一行代码,代码如下:windowutils.setwindowalpha(jframe frame, float value)其中value就是对应的透明度,value值越小窗体就越透明。windowutils是jdk提供的窗体界面工具类。想了解windowutils可以去查看jdk的api,api中有很详细的介绍,swing重绘重绘窗体在做软件中是件必然的事情,想让你的软件漂亮并且是自己想象中的外型就非得用到窗体重绘技术。在我了解的java中窗体重绘可以有两种方法。第一种是调用实现rectangularshape抽象类的工具类来绘制自己想要的形状,在jdk中 有arc2d 、ellipse2d 、rectangle2d 、roundrectangle2d实现了这个抽象类,本文介绍下roundrectangle2d的实现过程。roundrectangle2d实现重绘过程如图2-9。如图2-9 roundrectangle2d重绘第二种是重写组件的paintcomponent方法,在此方法中使用graphics2d的绘制方法重绘组件。3. swing 倒影技术首先swing倒影技术是由romain guy和chet haase所创立的,我只是在本文中简单介绍下。非本人所创。首先看看我写的一个窗口如图2-9。图2-9 swing 倒影 图2-10倒影创建序列图从图2-9的表面分析,上面是个窗口(主窗口),下面也是个窗口,只是下面窗口是透明倒立的。其主要流程为:在主窗口创建时同时也把倒影窗口也创建,最后利用工具类把这两个窗口绑定。工具类是把倒影窗口加在主窗口的下方。倒影创建序列图如图2-10 。第三章 eim系统通信协议设计每个im都有其核心的通信协议,本eim系统也定义了一组协议栈,规定了服务器与客户端的通信接口。此系统模拟腾讯qq实现用户之间简单聊天的程序,其中涉及到图形界面的的设计,网络通信的实现,线程的应用等等。启动服务端后,用户点击登陆实现与服务端的连接,同时向服务器发送登陆消息包,服务器接收到一个用户消息包则启动一个客户线程,将当前用户加入到线程中。用户进入主界面便可通过服务端给在线好友发送消息、传送文件、创建好友分组等简单互操作。这些交互都是建立在通信协议的基础上,本章主要介绍该系统的通信协议。3.1 eim系统网络结构如图3-1所示,服务器是客户之间的中介实体,它接受客服端a发送来的消息,对其进行处理并返回应答消息,根据eim用户01的要求,转发给目的eim用户04。服务器的核心任务就是解析收的消息,然后根据业务逻辑作相应的处理,再简洁点就是解析,处理,转发消息。而客户机就是个“消息解析器”,例如众所周知的浏览器就是解析http协议的“消息解析器”。而本系统的客户机就是eim协议的解析器。图3-1通信网络结构3.2 eim系统通信协议分析3.2.1现行常用即时通信协议目前,多数im软件都是采用im服务提供商自己设计开发的im协议,如美国在线的oscar协议、微软的msnp协议等6。目前,im通用标准的协议主要有三个13-14:即时消息在线协议(instant messaging and presence protocol,impp),由ietf(互联网工程任务组)的impp工作组制定;可扩展的即时消息在线会话初始协议(sip for instant messaging and presence leverage extension,simple),由ietf的simple工作组制定,是对sip协议的扩展;可扩展消息在线协议(extensible messaging and presence protocol,xmpp),由ietf的xmpp工作组制定。xmpp用xml(可扩展标记语言)语言定义和描述协议中的命令和数据,充分利用xml通用性强、易扩展的优点,方便了协议在应用中的扩展。3.2.2 eim通信协议分析本通信协议就基于tcp/ip协议的,是面向连接的。如下图3-2所示。关于tcp/ip的相关知识在第二章的相关技术介绍中有详细说明。 图3-2 eim通信协议 图3-3 交互过程交互过程和网络上的其它协议一样都是一个消息对应一个相应响应消息。其过程如下图3-3。3.3 eim系统协议设计3.3.1 消息结构设计所有消息包的数据都是由byte组成,可分为整型和定长字符串两种。定长字符串部分的byte可被编码为字符串。消息结构的组成:所有消息结构都是由两部分组成,即消息头(header)+消息体(body)组成,如表3-1所示。表3-1消息结构组成成分说明header消息头,所有消息都是相同格式body消息体,不同消息格式不同消息头的格式是固定的,所有消息都必须得有相同格式的消息头,其格式如下表3-2:表3-2消息头格式字段名字节数类型描述totallen4unsigned integer消息总字节长度type4unsigned integer消息类型srcid4unsigned integer发送消息方的id号destid4unsigned

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论