网页聊天系统-消息流转模块-完整版.doc_第1页
网页聊天系统-消息流转模块-完整版.doc_第2页
网页聊天系统-消息流转模块-完整版.doc_第3页
网页聊天系统-消息流转模块-完整版.doc_第4页
网页聊天系统-消息流转模块-完整版.doc_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

网页聊天系统-消息流转模块摘 要网络的出现,改变了人们使用计算机的方式。互联网的出现,又改变了人们使用网络的方式。随着互联网的发展,各个网站的建立,使其在各个领域都得到了广泛的应用。本文借鉴新浪网页聊天室,设计并实现了基于java的网页聊天系统。 本文利用J2EE的开源技术Struts、Spring和Hibernate搭建一个高效、灵活、易扩展的网页聊天平台,该平台能在前台系统中显示登录、好友列表、聊天室列表等内容,后台系统可以处理客户端产生的消息并发送给服务器端,以及接收服务器端发来的消息并处理之后显示给用户。关键字Web chat - The message flow moduleAbstractAdvent of the Internet has changed the way people use computers. The emergence of the Internet, but also changed the way people use the network. With the development of the Internet, the establishment of various websites, so in all fields have been widely used. This article draws Sina Web chat rooms, designed and implemented web based java chat system. By using open source technologies J2EE Struts, Spring and Hibernate to build an efficient, flexible, and scalable Web chat platform that can be displayed in the foreground system, log on, buddy lists, chat rooms, list etc., the background system can handle customer end of the message generated and sent to the server, and receiving the message sent by the server and processed to the user.目录第一章绪论41.1课题开发背景41.2课题开发意义41.3课题的主要工作5第二章开发技术介绍62.1 J2EE开发平台62.2 Ajax92.2.1 Ajax的意义92.2.2 同步与异步92.2.3 传统的web与ajax的比较9第三章网页聊天系统需求分析与概要设计113.1系统需求分析123.1系统概要设计14第四章系统详细设计184.1 系统总体功能设计184.2 前台聊天子系统功能详细设计194.3 数据库设计24第五章系统的实现285.1 SSH基础框架搭建285. 2 表示层的实现355.3 业务逻辑层的实现475.4持久化层的实现545.5 系统运行效果595. 6 系统实现类层次关系图61结论64致 谢66参 考 文 献67第一章 绪论1.1引言 互联网是一个具体的网络实体,没有一个特定的网络疆界,泛指通过网关连接起来的网络集合,即是一个由各种不同类型和规模的独立运行与管理的计算机网络组成的全球范围的计算机网络。这些网络通过普通电话线、高速率专用线路、卫星、微波和光缆等通讯线路,把不同国家的大学、公司、科研机构和政府等组织的网络资源连接起来,从而进行通信和信息交换,实现资源共享。近年来计算机技术的快速发展,特别是计算机网络的发展,越来越深刻的改变了人们生活的方方面面。使得人们能以更加低廉的价格,开发出更方便,更实用的网络工具。各种在线服务系统,更是深刻的影响了人们的联系和交流方式,使得人们科研在远隔千里之遥也可以即时的通讯。过去的种种陈旧的联系方式,已经不能满足现代生活的需要。网上聊天系统作为一种方便消费者与人们之间联系的实用系统便应运而生。网上聊天系统是为人们进行交流和联系提供了一个平台。通过提供完善的网上聊天系统的管理,可以达到增进人们与消费者之间、消费者与消费者之间的交流和联系的目的。利用互联网廉价、高速、广泛的特性,网页即时聊天工具将具有广阔的前景,因为在互联网覆盖到的地方只要在网页浏览器中输入简单的网址就可以实现即时的聊天,简单、方便、易用。1.2课题开发意义目前国内的聊天工具多以软件的形式存在,用户在使用时必须先下载这种软件,然后才能和同样装有这种软件的其他用户聊天,并且软件的运行效果是否良好取决于网络状况,如果遇到网络拥堵则出现各种错误。而本项目研究的聊天系统是基于网页的,网页浏览器是每个操作系统都会自带的,任何上网的人都可以使用,不需要下载,使用的范围非常广。本课题主要研究基于java的网页聊天工具服务器端控制模块的设计。在本系统开发过程当中,本课题选择以Struts、Spring、 Hibernate这三种开源框架来搭建系统架构。其开发意义在于:首先,Struts、Spring、 Hibernate三个框架都是免费、开源的,并且有丰富的帮助文档和众多的相关开发论坛提供技术支持;其次,将这些框架无缝地整合起来,充分发挥各个层次的框架的自身优势,便于实现系统的大规模开发、管理以及扩展。运用IOC和AOP思想,使用多层体制系统解决方案,不同的业务逻辑是基于模块进行开发,所以便于团队开发;第三,提高了系统的重用性和可维护性。基于这种架构的Web应用是基于模块的,表示层和业务逻辑分离,业务逻辑层与持久层分离,从而减少开发成本、缩短开发周期,达到提供系统性能的目的;第四,良好的设计思想。Struts是基于MVC的框架;Hibernate能够实现对象关系映射思想,把面向对象的设计开发思想与关系数据库联系起来。在研究如何设计和实现这样一个聊天工具的同时,我们对于系统的构建会有一个较为深刻和全面的理解,尤其是对JAVA WEB技术以及相关的开发技术更要认真切实的掌握,这样才能开发出一个安全实用可靠的聊天网站系统来。当然,在设计和实现的过程当中一定会遇到这样那样的问题,可能是暂时性的有望在设计完成时能够解决的问题,也可能是直到毕业设计完成之后仍然解决不了的问题,无论怎样,遇到问题应该庆幸才对,因为在想办法解决问题的过程中你会学到很多,甚至会有意想不到的收获。有了构建一个聊天网站的切身经历和体验,一定能够为今后的动态网站设计打下良好的基础。因此,本课题有其自身的研究意义和价值。1.3课题的主要工作本课题研究内容主要包括以下方面:网页聊天系统的需求分析,利用需求分析基本方法,描述本系统的功能需求,给出系统模型。网页聊天系统整体解决方案的系统设计,并规划了子系统的功能模块,介绍部分功能模块详细功能设计。网页聊天系统相应的测试方法和完整的实施方案的设计,并实现该系统、给出测试结果。网页聊天系统采用基于WEB的设计方式实现,便于用户操作,引入SSH框架技术,构建了基于SSH技术的系统整体架构。第二章 开发技术介绍2.1 J2EE开发平台Java2平台目前有3个版本,它们是适合于小型电子设备和智能卡的Java2平台Micro版(Java2PlatformMICroEdition,J2ME)、适用于桌面应用系统的Java2平台标准版(Java2PlatformStandardEdition,J2SE)、适用于开发服务器应用程序和服务的Java2平台企业版(Java2PlatformEnterpriseEdition,J2EE) 4。其中,J2EE是一种利用Java2平台来简化企业应用系统的开发、部署和管理相关的复杂问题的体系结构。J2EE技术核心是Java平台或Java2平台的标准版,J2EE巩固了标准版中的许多优点。J2EE最终目的就是成为一个能够使企业开发者大幅缩短应用软件投放市场时间的体系结构。J2EE平台采用一个多层次分布式的应用模式,应用逻辑按功能划分为组件,包括客户端组件、表示层组件、业务逻辑组件等,各个应用组件根据他们所在的层分布在不同的机器上。事实上,SUN设计J2EE的初衷正是为了解决C/S模式的弊端,在传统模式中,客户端担当了过多的角色而显得臃肿,而且由于其自身缺陷难于升级和扩展,业务逻辑与用户界面、数据库的过于紧密结合,使得重用变得异常困难5。现在使用J2EE的多层企业级应用模型,将两层化模型中的不同层面切分成许多层。一个多层化应用能够为不同的每种服务提供一个独立的层,图2-1是J2EE典型的四层结构。图2-1 J2EE的四层结构1. 客户层组件 客户层用来与用户交互,并把来自系统的信息显示给用户。下图2-2所示客户层那样,把信息传送给表现层的JavaBean进行处理,并吧输入发送给业务层上的EJB进行处理,然后把处理结果返回给客户层。图2-2 客户层组件与表现层组件、业务逻辑层组件的交互2. 表示层组件 表示层位于J2EE服务器中,组件可以由JSP页面、基于Web的Applets以及显示HTML页面的Servlets组成。按照J2EE规范,静态的HTML页面和Applets不算是Web层组件。Web层主要作用是处理客户请求,调用相应的逻辑模块,并把结果以动态网页的形式返回到客户端。3. 业务层组件 业务层也叫EJB层,它由EJB服务器和EJB组件组成。EJB层用来实现企业级信息系统的业务逻辑。这是企业级应用的核心,由运行在业务层中的EJB来执行。一个EJB从客户程序处接收数据,对数据进行处理,再将数据发送到企业信息系统层存储。同样,一个EJB也可以从企业信息系统取出数据,发送到客户端程序。运行在业务层的EJB依赖于容器提供诸如事务、生命期、状态管理、缓冲池等十分复杂的系统级功能。4.企业信息系统层组件 企业信息系统层处理企业信息系统软件,在企业应用系统的逻辑层划分中,EIS层通常包括企业资源规划(ERP)系统、大型机事务处理系统、关系数据库系统(RDMS)及其它遗留信息系统。EIS层是J2EE应用与非J2EE应用或遗留系统集成的连接点。例如,J2EE 应用组件可能为了数据库连接需要访问企业信息系统。2.2 Ajax 2.2.1 Ajax的意义 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth、google suggest以及gmail等对ajax技术的广泛应用,催生了ajax的流行。谈到ajax技术的意义,我们关注得最多的毫无疑问是提升用户的体验。但是,如果我们结合将来电脑和互联网的发展趋势,我们会发现ajax技 术在某些方面正好代表了这种趋势。我们知道,自从电脑出现以来,一直是桌面软件占据着绝对主导的地位,但是互联网的出现和成功使这一切开始发生着微妙的变化。相当一部分的人都相信,迟早有一天,数据和电脑软件将会从桌面转移到互联网。也就是说,将来的电脑有可能抛弃笨重的硬盘,而直接从互联网来获取数据和服务,那么,这其中的主要问题就是互联网的连接不稳定,谁也不愿意看着自己的电脑从服务器一点一滴的下载数据,精确的说,ajax并不能提高从服务器端下载数据的速度,而只是使这个等待不那么令人沮丧。但是正是这一点就足以产生巨大的影响和震动,它实际上也对桌面软件产生了巨大的冲击。ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式。2.2.2 同步与异步异步传输是面向字符的传输,它的单位是字符;而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的。具体来说,异步传输是将比特分成小组来进行传送。一般每个小组是一个8位字符,在每个小组的头部和尾部都有一个开始位和一个停止位,它在传送过程中接收方和发送方的时钟不要求一致,也就是说,发送方可以在任何时刻发送这些小组,而接收方并不知道它什么时候到达。一个最明显的例子就是计算机键盘和主机的通信,按下一个键的同时向主机发送一个8比特位的ASCII代 码,键盘可以在任何时刻发送代码,这取决于用户的输入速度,内部的硬件必须能够在任何时刻接收一个键入的字符。这是一个典型的异步传输过程。异步传输存在 一个潜在的问题,即接收方并不知道数据会在什么时候到达。在它检测到数据并做出响应之前,第一个比特已经过去了。这就像有人出乎意料地从后面走上来跟你说 话,而你没来得及反应过来,漏掉了最前面的几个词。因此,每次异步传输的信息都以一个起始位开头,它通知接收方数据已经到达了,这就给了接收方响应、接收 和缓存数据比特的时间;在传输结束时,一个停止位表示该次传输信息的终止。按照惯例,空闲(没有传送数据)的线路实际携带着一个代表二进制1的信号。步传输的开始位使信号变成0,其他的比特位使信号随传输的数据信息而变化。最后,停止位使信号重新变回1,该信号一直保持到下一个开始位到达。例如在键盘上数字“1”,按照8比特位的扩展ASCII编码,将发送“00110001”,同时需要在8比特位的前面加一个起始位,后面一个停止位。同步传输的比特分组要大得多。它不是独立地发送每个字符,每个字符都有自己的开始位和停止位,而是把它们组合起来一起发送。我们将这些组合称为数据帧,或简称为帧。数据帧的第一部分包含一组同步字符,它是一个独特的比特组合,类似于前面提到的起始位,用于通知接收方一个帧已经到达,但它同时还能确保接收方的采样速度和比特的到达速度保持一致,使收发双方进入同步。帧的最后一部分是一个帧结束标记。与同步字符一样,它也是一个独特的比特串,类似于前面提到的停止位,用于表示在下一帧开始之前没有别的即将到达的数据了。同步传输通常要比异步传输快速得多。接收方不必对每个字符进行开始和停止的操作。一旦检测到帧同步字符,它就在接下来的数据到达时接收它们。另外,同步传输的开销也比较少。例如,一个典型的帧可能有500字节(即4000比特)的数据,其中可能只包含100比特的开销。这时,增加的比特位使传输的比特总数增加2.5%,这与异步传输中25 %的增值要小得多。随着数据帧中实际数据比特位的增加,开销比特所占的百分比将相应地减少。但是,数据比特位越长,缓存数据所需要的缓冲区也越大,这就限制了一个帧的大小。另外,帧越大,它占据传输媒体的连续时间也越长。在极端的情况下,这将导致其他用户等得太久。2.2.3 传统的web与ajax的比较传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然後返回一个新的网页。这个做 法浪费了许多带宽,因为在前後两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的 响应时间。这导致了用户界面的响应比本地应用慢得多。与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的web service接口,并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快 的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像DHTML应用程序那样,Ajax应用程序必须在众多不同的 浏览器和平台上经过严格的测试。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支 持JavaScript的用户提供替代功能。用JavaScript作的Ajax引擎,JavaScript的兼容性和DeBug都是让人头痛的事;Ajax的无刷新重载,由于页面的变化没有刷新重载那么明显,所以容易给用户带来困扰用户不太清楚现在的数据是新的还是已经更新过的;现有的解决有:在相关位置提示、数据更新的区域设计得比较明显、数据更新后给用户提示等;第三章 网页聊天系统需求分析与概要设计在整个聊天系统进行开发之前,要确定出整个项目的整体架构,包括系统的选型、运行环境的确定及系统结构设计。在进行软件系统开发的最初环节,一般都需要进行系统的选型,即根据系统功能的实际需求,选择合适的开发工具及软件架构。 本文主要工作涉及的是消息流转的,这里分析下基于java web开发的基本原理,以及选择使用ajax 的原理。目前web聊天室的实现方法有多种,包括:基于ajax技术的实现,基于Comet(Pushlet)技术的实现,基于XMPP协议的实现,以及基于flash的XmlSocket和远程共享对象的实现。 (1) 基于ajax技术的实现。 ajax(异步JavaScript和XML,Asynchronous javascript and xml),它的作用就是可以实现页面与服务器端的无刷新交互。用ajax来实现web聊天室的基本原理是:在页面上每隔一段时间就通过ajax从服务器中获取数据,然后更新页面显示。这种方法简单明了,缺点是实时性不高。 (2) 基于Comet技术的实现。 Comet 是一种新的 Web 应用架构。基于这种架构开发的应用中,服务器端会主动以异步的方式向客户端程序推送数据,而不需要客户端显式的发出请求。Comet 架构非常适合事件驱动的 Web 应用,以及对交互性和实时性要求较高的应用,如股票交易行情分析、聊天室和 Web 版在线游戏等。 Pushlet是一种comet实现(Pushlet 是开源的Comet 框架):在Servlet机制下,数据从服务器的Java对象直接推送(push)到客户端的页面,而无需任何Java applet或者插件的帮助。它使server端可以周期性地更新client的web页面,这与传统的request/response方式不同。 Pushlet基于HTTP流,这种技术常常用在多媒体视频、通讯应用中,比如QuickTime。与装载HTTP页面之后马上关闭HTTP连接的做法相 反,Pushlet采用HTTP流方式将新数据源源不断地推送到client,再此期间HTTP连接一直保持打开。有关如何在Java中实现这种 Keep-alive的长连接请参看Sun提供的HTTP Persistent Connection和W3C的HTTP1.1规范。 (3)基于XMPP协议的实现 XMPP(可扩展消息处理现场协议)是基于XML的协议,是专为及时通信系统设计的通信协议,用于即时消息以及在线现场探测。它在促进服务器之间的准即时 操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。XMPP的前身是Jabber,一个开源形式组 织产生的网络即时通信协议。著名的开源聊天系统服务器Openfire就是基于XMPP协议的Jabber服务器。 可以通过Flash或ajax与Jabber服务器进行交互,实现webIM的功能. (4)基于flash的XmlSocket的实现 Flash Media Server是一个很强大的流媒体服务器,它基于rtmp协议,提供了强壮的流媒体交互功能。在FMS中,提供一种远程共享对象(SharedObject) 的机制,客户端可以创建并连接到服务器端的远程共享对象。可以有很多个客户端连接到同一个远程共享对象中,任何一个客户端对共享对象进行了修改,服务器都 会将共享对象的修改信息发送给所有其他连接到这个共享对象的客户端。 从前文的技术介绍来看,我们可以了解到ajax的优点,利用这些优点,我们可以开发出用户体验度较高的网页聊天度。采用ajax的另个一原因是,随着ajax的流行,出现大量的支持的ajax的框架,使得开发者能够花费很少的精力就能够得到很好的开发效果。实际上,为了提高代码的重用性和兼容性,很多工作小组编写了大量的JavaScript框架。在Ajax技术出现后,针对Ajax的框架也纷纷涌现,本系统使用的框架就是目前互联网上流行的主流开源JavaScript框架。而在 /67.htm 这个网址上有近百种支持ajax的框架,其中最流行的两种框架是Prototype和JQuery 本系统采用的就是使用最广泛的jquery 4.2 版本“jQuery”是一款同“Prototype”一样优秀的JavaScript框架,特别是其对CSS和XPath的支持,使JavaScript的书写变得更加方便。其宗旨是写更少的代码,做更多的事情。其是轻量级的JavaScript框架(压缩后只有21k),这是其他的JavaScript框架所不及的。该框架兼容“CSS3”,还兼容各种浏览器(IE 6.0+,FF 1.5+,Safari 2.0+,Opera 9.0+)。“jQuery”是一个快速的,简洁的JavaScript框架,使用户能更方便地处理HTML文档、事件、实现动画效果,并且方便地为网站提供AJAX交互。“jQuery”还有一个比较大的优势是,其的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。“jQuery”能够使用户的HTML页保持代码和内容的分离,也就是说,不用再在HTML里面插入一堆JavaScript来调用命令了,只需定义其ID属性即可。重用其他程序员已经做好的半制品代码,即框架,来构建复杂的应用程序,可以起到事半功倍的作用。3.1系统需求分析这是一个功能相对比比较齐全的网页聊天系统,在聊天系统,用户可以通过设置不同的用户名和密码以各种不同的身份进入聊天系统,用户的类型有两种:普通用户和管理员。普通用户可以在聊天室中发送公聊信息,也可以和指定的聊天对象用户私聊,还可以对自己的公聊消息记录和私聊消息记录进行管理,在不知道最近聊天室有哪些活动时,可以查看其他在用户在聊天室中的发言,以找到感兴趣的公聊话题,然后进行聊天。管理员在注册成为普通用户后就可以进入前台的聊天页面和普通用户一起聊天,具有普通用户的功能外,还可以使用用户名和密码进入后天管理系统,在后台管理系统中,管理员创建聊天室,可以删除修改聊天室,还能对系统中的所有的用户和所有数据库中的用户进行设置,以便对聊天系统进行维护。用户可以根据自己的需要进入不同的聊天室进行聊天。系统还应具有自动把在线超过三十分钟但不发言的用户剔除聊天室,同时具有当有新用户进入聊天室时,实时更新在线用户的功能。聊天室的特点就是要求能够实时显示出聊天者所谈的内容。即在同一个聊天室的使用者,可以在短时间内立刻看到其他聊天者的发言。作为用户喜欢的Web应用程序,出了具有能够实时显示出聊天者所谈论的内容外,还应具有以多种方式发布信息的功能。Ajax正好可以满足聊天室的这种要求,它可以异步的快速地创建和显示Web页面的动态内容,可以异步的刷新在线用户,使得用户在网页中能够得到实时的聊天信息。总的来说,本聊天室主要实现了以下的功能:l 用户输入帐号,密码登录聊天室l 用户选择聊天房间l 用户添加好友l 用户可以搜索系统注册用户l 用户可以查看系统注册用户的基本注册信息l 把用户的聊天信息写入数据库l 用户可以查看好友的在线情况l 用户可以选择聊天对象(私聊,群聊)l 用户可以变换私聊对象、l 用户可以快速注册l 用户可以看到其好友发送的离线私聊信息l 用户可以变换聊天房间l 用户可以修改自己的注册信息、l 用户可以退出系统l 聊天室的聊天页面要不断地对数据库进行刷新、读取l 实时更新在线的用户l 管理员管理注册用户l 管理员管理聊天室l 管理员管理用户聊天消息(公聊、私聊)3.1系统概要设计根据以上聊天系统的需求分析,本聊天系统总体上分为普通用户登陆的前台聊天子系统模块和后台管理员管理子系统模块。其中普通用户模块包括登录模块、聊天模块、退出模块,管理模块又包含各种聊天相关子功能模块,管理员模块包括登录模块、管理模块、退出模块,其中管理模块又包括管理系统对象的各个功能子模块。普通用户和管理员的退出聊天室模块机制是类似。系统总体模块框架划分及其关系如下图所示:图3-1 系统总体模块架构 在使用何种技术去开发系统的问题上,我们考虑到 Web浏览器是一个巨大的进步,它让同样的信息在不同的机器上同样地显示。于是出现了浏览器/服务器模式(Browser/Server, B/S)的三层结构(见图4)。B/S模式的优点是维护方便,能够降低总体拥有成本。客户端运行软件,就像我们平时上网浏览网页一样,有个浏览器就行了,不用安装其它软件。B/S模式的软件所有的维护、升级工作都只在服务器上进行,而客户端就能获得最新版本的软件。采用三层结构可以是提高服务器的配置,降低客户端的配置。这样增加的只是一台服务器(应用服务和数据库服务可以放在同一台计算机电脑中)的价格,而降低的却是几十台客户端机器的价格,起到了降低总体拥有成本的作用。客户端应用服务数据库服务 图1-4三层结构(B/S结构)由于本系统是毕业设计性质的,在实现过程中把当前比较流行和使用的系统的设计模式尽可能的应用的本次毕业当中,以达到提高个人专业和水平和专业知识的能力的目的。消息流转模块的基本原理是就是把每个连上同一网页的用户传送的发言数据储存起来,然后将所有的聊天室的发言数据传给该聊天室的每一用户。也就是说,用数据库汇集每个人的发言,并将数据库中的数据传给每一个人就实现了聊天系统最基本的功能。先从客户端收集消息,然后通过服务器端的消息管理中转,将全局消息发送给的所有用户。而这种消息流转采用的方式我们采用的就是ajax技术。Ajax在客户端和服务器端传输数据的格式有很多种,其中比较常用的XML和json 格式。Ajax的核心对象XMLHttpRequest,但实际上它和XML 没有什么直接的关系.应该与它的名字有很大的关系,XMLHttpRequest,而且是出现在Ajax里面那肯定就是和XML有关了.其实在大多数 Ajax应用中XML用的并不是特别多,主要还都是用名/值对进行传值、XML格式在Ajax中进行传递数据的方式:首先,从客户端把数据传递到服务器,Ajax应用中基本上都是用文本的方式来直接传递请求参数,这样做的好处是浏览器和服务器只需要把参数当作普通文本进行处理,速度会比较快,不需要进行格式转换. Xml和json是两种纯文本格式,XML需要使用DOM之类的机制来访问数据并将数据整合到布局之中,采用这种方法,我们不再使用像XML这样的格式来交付Ajax更新,而是采用一种更为简单直观的方式,采用JavaScript引擎自然匹配的格式也就是JSON,而且Ajax传递XML却需要固定的XML格式,以及多余的字符,还要把请求格式给设置成(text/xml),而且在传递的时候并不是象在 传递普通文本一样放在URL后面传递,而是由send方法亲自传递到服务器,服务器还要把它们以XML格式进行分析处理,然后做出响应。所以说本系统并不选择使用XML传递数据到服务器。我们选择的JSON格式的了解:对于JSON,首先要明白JSON和XML一样也是一种简单文本格式。相对于XML,它更加易读、更便于肉眼检查。在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。乍看上去,使用JSON的数据分隔符的优点可能并不那么明显,但存在一个根本性的缘由:它们简化了数据访问。使用这些数据分隔符时,JavaScript引擎对数据结构(如字符串、数组、对象)的内部表示恰好与这些符号相同。这将开创一条比DOM技术更为便捷的数据访问途径。JSON的另一个优点是它的非冗长性。在XML中,打开和关闭标记是必需的,这样才能满足标记的依从性;而在JSON中,所有这些要求只需通过一个简单的 括号即可满足。在包含有数以百计字段的数据交换中,传统的XML标记将会延长数据交换时间。目前还没有正式的研究表明JSON比XML有更高的线上传输效 率;人们只是通过简单的字节数比较发现,对于等效的JSON和XML有效负载,前者总是小于后者。至于它们之间的差距有多大,特别是在新的XML压缩格式 下它们的差距有多大,有待进一步的研究。此外,JSON受到了擅长不同编程语言的开发人员的青睐。我们在客户端对于消息结构的定义,mess:sender:senderUserName,“roomName”:”sendRoomName”,“context”:”sendcontext” ,secretmess:sender:senderUserName,receiver:receiverName, “context”:”sendcontext”对于消息的解析主要分为两个方面,一个是服务器端对于客户端传送过来的消息的内容解析,另一个方面是客户端对于服务器端传送过来的聊天消息队列的解析在服务器端不同的语言也有不同的JSON解析器,可以很方便的解析客户端传过来的字符串,不需要任何的API工具。比如说本系统使用了struts2框架, Struts 2 其中的一个重要的功能(Feature)就是 First-class AJAX support - Add interactivity and flexibility with AJAX tags that look and feel just like standard Struts tags(大意:一流的 AJAX 支持 支持通过 AJAX 标志增加 一流的 互动性和灵活性,而且使用这些 AJAX 标志与普通的 Struts 标志同样简单).基于不重新发明轮子的原则,Struts 2 并没有开发新的 AJAX 框架,而是使用时下 Java EE 平台中比较流行的 AJAX 框架Dojo 和 DWR. 最近在 Musachy Barroso 等同志的无私奉献下,开发了 Struts 2 的 JSON 插件(Plugin), 极大地方便了我们输出 JSON 结果(Result).一旦为Action指定了该结果处理类型,JSON插件就会自动将Action里的数据序列化成JSON格式的数据, 并返回给客户端物理视图的JavaScript。简单的说,JSON插件允许我们在JavaScript中异步的调用Action,而且Action不需 要指定视图来显示Action的信息显示。 而是由JSON插件来负责具体将Action里面具体的信息返回给调用页面。第四章 系统详细设计 4.1 系统总体功能设计 根据以上的系统需求分析,系统应该包括以下前台聊天子系统和后天管理子系统,系统的总体架构图如下所示,。图3.1 系统总体架构图前台聊天子系统包括用户登陆和注册模块、聊天大厅模块、我的消息管理模块、个人消息管理模块、用户退出模块,后天管理子系统包括房间管理模块、用户管理模块、消息管理模块等,系统的总体功能框架图为图3.2 系统总体框架4.2 前台聊天子系统功能详细设计其中前台聊天子系统作为整个系统的主要部分,也是消息流转模块的主要实现功能模块。从上面的需求分析来看,其用例图如下。本文接下来详细介绍各个功能模块的设计思路。 图3-3 前台功能子系统用例图 1.聊天大厅模块该模块是整个系统的核心模块,用户进入聊天室聊天以及和好友进行私聊都是在模块中进行的。在该模块的页面中列出了当前所有系统可以进入的聊天室,以及该用户的所有好友信息已经该好友是否在线的状态信息,用户可以选择进入房间的公聊页面或则选择进入和好友的页面。若选择房间后面的进入链接,则进入系统公聊页面,若选择好友的话, 则可以进入私聊页面。进入公聊聊天页面后,聊天页面上方显示欢迎用户进入信息,若是之前进入过其他房间公聊页面,则同时会提示之前进入过的房间信息。在聊天信息显示出,会给出该房间的所有用户的聊天信息,这些聊天信息包括,发送人、发送时间、发送内容,以不同的颜色进行显示。消息内容按照发送消息的时间顺序显示,新的聊天信息总是显示在页面的最上方,若是信息超出信息框的范围,则可以使用滚动条下拉就可以看到其他信息。这些聊天信息时系统实时更新的,只要这个房间内的用户有人发送了信息,这些信息就会实时显示在信息区。页面的下方是发送信息区,系统只允许用户发送不超过200个的自负的信息,输入信息时,页面上会给出当前所输入信息的总字数,写完后按enter键就可以直接发送,或者按页面中的“Enter”下发送。若是缩写的信息超过允许最大的200个,则系统会提示信息超过限制,不允许发送该消息。为了防止用户在消息中输入一些非法的字符,可能会导致系统的安全问题,系统会自动过滤掉这些非法字符。数据库中也不会存储这些非法字符。页面的右方显示的是当前房间内的在线用户列表,从这个列表中,用户可以选择这些在线用户就可以进行私聊。右上方有“重新选择”链接,用户点击该链接后,会重新进入聊天大厅页面,重新选择要进入的公聊页面或者是私聊页面。进入私聊页面和公聊页面的方式类似,页面布局也是类似的。只是没有在线用户列表的内容,其他内容相信。信息区有两个部分信息,一个是好友发送的离线信息区,一个是用户当前聊天信息。该消息区只显示这两个用户的互相聊天信息,同样是按照时间顺序从上到下显示。其他方式类似。公聊聊天流程如下:私聊聊天的流程类似。这里不再叙述。2.我的聊天消息管理模块我的聊天消息管理包括两个子模块。在我的公聊消息模块中,用户可以输入要查看在哪个房间的公聊信息,哪些内容的公聊信息,在哪个时间段的公聊消息。如果用户没有输入任何值,则默认的是显示所有公聊房间的,最近一周的公聊消息。由于公聊信息可能数据量比较大,所以系统中是分页显示聊天信息,用户可以点上一页、下一页、首页、末页查看搜索的消息,若是到最后一个时还是点击下一页,则信息仍是在最后一个,系统会自动过滤这些给发的页数,给用户正确的显示信息。同时系统支持支持输入页数,进入某页的消息显示页面。每页显示多少个消息数量,系统也是可以设置的,若是设置的数量比所有消息的数量都大,则系统会自动更新每页消息数。由于消息的内容可能比较多,在消息列表中最多显示10个字节的消息,若是超过这个字节数字,当会在页面上显示“。”,表示该消息被截断。要是想查看某个消息的详细信息,可以选择某行消息的“查看详细”链接,就能够进入详细消息页面,查看具体信息后,可以点击“返回”回到刚才的“我的公聊”消息页面。同时在消息页面,可以删除我的公聊消息。页面会显示删除后的消息列表我的私聊消息和我的公聊消息子模块功能相似,只是在查询条件中,去掉房间名称,增加上发送者和接受者得姓名条件,由于是用户某个人的的私聊信息,当用户输入要查看到某个发送者的私聊消息时,页面上的接受者的名称就会自动变成成当前用户的姓名,同样的,当用户输入要查看到某个接受者的私聊消息时,页面上的发送者的名称就会自动变成成当前用户的姓名,其他操作方式和公聊消息管理页面类似。搜索我的公聊消息的流程图如下:3.搜索公聊话题模块新注册的用户可能并不知道当前系统的用户的聊天内容包括哪些,该模块提供了这样一个功能,使得用户可以查看所有用户的公聊消息,在这个页面,用户可以输入关心的内容,页面会列出与这些内容相关的所有公聊信息,用户可以查看这个公聊消息是谁在那个房间内发送的,什么时间发送的,并且用户可以点击发送者姓名,可以查看发送这的姓名,加发送者为好友,进入发送该房间等。公聊话题也是按照分页机制进行处理的。搜索公聊话题流程图如下:4.3 数据库设计数据库是用来存储数据的存储中心聊天系统的所有数据均存放在这俩。本系统使用的数据表如下表:名称对象类型注释adminTable系统管理员表friendTable描述系统中用户之间好友关系messTable存储用户公聊消息表roomTable描述系统中各个公聊聊天室的信息secretmessTable存储用户私聊消息表userlistTable在线用户列表userssTable存储注册用户表下面我们分别列出几个主要数据表的表结构表admin的结构如下:名称注释数据类型是否是主键adminID管理员idint(11)TRUEadminName管理员名称varchar(18)FALSEadminPassword管理员密码varchar(18)FALSE表friend的结构如下:名称注释数据类型主要的friendID系统自动生成的idint(11)TRUEuserName用户名varchar(18)FALSEfriendName好友名varchar(18)FALSEmkfridTime加为好友关系时间datetimeFALSEmkfridReason加为好友关系原因varchar(200)FALSE表mess的结构如下:名称注释数据类型是否是主键messageID系统自动生成的idint(11)TRUEroomName公聊房间名称varchar(18)FALSEsendName发送者姓名varchar(18)FALSEcontext内容textFALSEmessdate发送时间timestampFALSE表room的结构如下:名称注释数据类型是否是主键roomID系统自动生成的idint(11)TRUEroomName房间名称varchar(18)FALSEcreateTime创建时间datetimeFALSEdesription房间描述信息varchar(200)FALSEkey关键字varchar(50)FALSE表secretmess的结构如下:名称注释数据类型是否是主键messageID系统自动生成的idint(11)TRUEsenderName发送者姓名varchar(18)FALSEreceiverName接受者姓名varchar(18)FALSEcontext内容textFALSEMessDate发送消息时间timestampFALSEstate消息状态char(1)FALSE表userlist的结构如下:名称注释

温馨提示

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

评论

0/150

提交评论