工作也已经有几年了, 最近突然心血来潮, 想写点技术博客,记录在工作和学习中碰到的一些问题,一方面方便自己以后查看,一方面也可以帮助下碰到同类问题的朋友们。 好了,闲话少说,进入第一篇博客的正文。
最近工作中有一个需求,需要开发一个类似QQ的即时聊天系统,不过要基于BS架构,上网搜索了下,JAVA中的COMET技术可以成为实现该需求的良好途径。
comet 【计】:基于 HTTP 长连接的“服务器推”技术,是一种新的 Web 应用架构。基于这种架构开发的应用中,服务器端会主动以异步的方式向客户端程序推送数据,而不需要客户端显式的发出请求。Comet 架构非常适合事件驱动的 Web 应用,以及对交互性和实时性要求很强的应用,如股票交易行情分析、聊天室和 Web 版在线游戏等。(百度百科)
现在网上有不少开源的comet框架,比如pushlet,dwr等, 当然, 你也可以自用用jquery甚至纯JS来实现。 我这里选用了dwr,毕竟是比较成熟的框架了,用起来可能可以比较顺手些。
简单介绍下DWR,DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。(百度百科)
显然,楼主不方便把实际工作的代码放上来,这里就放一个简易的DEMO, DEMO实现了一些基本功能:
1. 前台调用后台的JAVA方法,并利用JAVA返回值执行回调函数。
2. 在后台中将数据发送至第二个页面,并调用该页面的JS方法。
3. 与SPRING的简单整合。
下面楼主把实现这个工程的步骤重复下。
第一步, 自然要先导入JAR包。 这个DEMO只需要DWR和SPRING2个JAR包,如需要可以在附件中下载(包含在DEMO的项目中)。
然后,配置WEB.xml文件,配置如下,功能基本已经写了注释,再补充一点,通过[项目地址]/dwr可以查看被dwr转化的类,可以点击进入测试页面,这样对于一些不知道怎么在实际页面中调用的初学者,可以查看源文件复制其代码。 在实际项目发布后将其设置为false,以避免用户进入此页面。
最近工作中有一个需求,需要开发一个类似QQ的即时聊天系统,不过要基于BS架构,上网搜索了下,JAVA中的COMET技术可以成为实现该需求的良好途径。
comet 【计】:基于 HTTP 长连接的“服务器推”技术,是一种新的 Web 应用架构。基于这种架构开发的应用中,服务器端会主动以异步的方式向客户端程序推送数据,而不需要客户端显式的发出请求。Comet 架构非常适合事件驱动的 Web 应用,以及对交互性和实时性要求很强的应用,如股票交易行情分析、聊天室和 Web 版在线游戏等。(百度百科)
现在网上有不少开源的comet框架,比如pushlet,dwr等, 当然, 你也可以自用用jquery甚至纯JS来实现。 我这里选用了dwr,毕竟是比较成熟的框架了,用起来可能可以比较顺手些。
简单介绍下DWR,DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。(百度百科)
显然,楼主不方便把实际工作的代码放上来,这里就放一个简易的DEMO, DEMO实现了一些基本功能:
1. 前台调用后台的JAVA方法,并利用JAVA返回值执行回调函数。
2. 在后台中将数据发送至第二个页面,并调用该页面的JS方法。
3. 与SPRING的简单整合。
下面楼主把实现这个工程的步骤重复下。
第一步, 自然要先导入JAR包。 这个DEMO只需要DWR和SPRING2个JAR包,如需要可以在附件中下载(包含在DEMO的项目中)。
然后,配置WEB.xml文件,配置如下,功能基本已经写了注释,再补充一点,通过[项目地址]/dwr可以查看被dwr转化的类,可以点击进入测试页面,这样对于一些不知道怎么在实际页面中调用的初学者,可以查看源文件复制其代码。 在实际项目发布后将其设置为false,以避免用户进入此页面。
- <?xmlversion="1.0"encoding="UTF-8"?>
- <web-appversion="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- servlet <!--dwr配置-->
- servlet-name>dwr-invoker</servlet-class org.directwebremoting.servlet.DwrServlet
- init-paramdescription>打开debug可以通过[项目地址]/dwr查看被加载的类param-name>debugparam-value>true>使用服务器推技术(反转AJAX)>activeReverseAjaxEnabled>使用comet方式推送数据>pollAndCometEnabledservlet-mappingurl-pattern>/dwr/*
- <!--Spring配置-->
- context-param>contextConfigLocation>/WEB-INF/classes/bean.xmllistenerlistener-class org.springframework.web.context.ContextLoaderListener
- web-app>
接下去是dwr的配置文件dwr.xml,将它放在web.xml的同一级即可。 这里是最简单的和spring的整合配置,如需更加复杂的功能,请自行搜索。
<!DOCTYPEdwrPUBLIC
"-//GetAheadLimited//DTDDirectWebRemoting1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd"dwrallow<!--让dwr自动生成Controller.js文件-->
createcreator="spring"javascript="Controller"paramname="beanName"value="controller"/>
create<!--转化器,DWR对于自定义的BEAN需要转换,可以用*表示所有-->
convertmatch="songzl.message.User"converter="bean">
下面spring的配置文件 bean.xml. 根据web.xml中的配置,将其放入src的根目录下。配置很简单,就是设置一个自动加载的bean的范围, 当然你也可以用<bean id="XXX" class="XXX"> 这样来加载。
beansxmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-lazy-init="true"default-autowire="byName"<!--扫描songzl.message包下的类并将其自动加载为spring的bean-->
context:component-scanbase-package="songzl.message"context:component-scanbeans>
接下去2个JAVA类。 第一个user.java,一个放参数的javaben没什么可以多说
- packagesongzl.message;
- publicclassUser{
- privateStringname;
- privateStringpassword;
- publicStringgetName(){
- returnname;
- }
- voidsetName(Stringname){
- this.name=name;
- publicStringgetPassword(){
- returnpassword;
- voidsetPassword(Stringpassword){
- this.password=password;
- }