`
yulon
  • 浏览: 117780 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

dw之IM项目(第一个简单的dwr推送程序)

阅读更多

2.3第一个简单的dwr推送程序

第一步à 将dwr相关的jar包导入到工程

第二步à配置web.xml文件

 

 

<!--EndFragment-->

<!--EndFragment-->
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
    <!-- 设置是否允许使用dwr推送技术 -->
    <init-param>
      <param-name>activeReverseAjaxEnabled</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>maxWaitAfterWrite</param-name>
      <param-value>-1</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>
</web-app>

 

简明:activeReverseAjaxEnabled变量是设置是否使用dwr推送技术,若设置为true声明为使用,若设置为false,就不好使了。 对于maxWaitAfterWrite变量,一开始我也不知道它是干吗用的。于是我就做了一个小测试,第一次设置maxWaitAfterWrite变量为-1,第二次使用默认值或者使用其它值。有兴趣的读者还可以通过查看dwr的源码来理解maxWaitAfterWrite变量的作用。我们可以在BasePollHandler类里面找到设置maxWaitAfterWrite变量的方法setMaxWaitAfterWrite

 

第三步à编写com.im.service.SendPushService

 

<!--EndFragment-->

<!--EndFragment-->
public class SendPushService {
    //发送消息
	public void send(String msg) {
		System.out.println("==========调用了send方法==========");
		ScriptBuffer scriptBuffer = new ScriptBuffer(); //构造js脚本
		WebContext webContext=WebContextFactory.get();
		ScriptSession myScSession = webContext.getScriptSession();
		scriptBuffer.appendScript("dwrtest(");
		scriptBuffer.appendData(msg);
		scriptBuffer.appendScript(")");
		Util util = new Util(myScSession);
		util.addScript(scriptBuffer); //向客户端推送消息
	}
}

 

简明:刚接触dwr推送技术内容的大部分读者看到上面这段代码的第一反应à什么是ScriptSession,ScriptSession似乎跟HttpSession有什么关系?我的第一反应就是这样,不知道您是否也一样。不用急,我们先把这个HelloWorld程序做完成先,要看到效果才有动力学习嘛!

 

 

第四步à 在dwr.xml文件定义向外暴露的接口

 

<!--EndFragment-->

<!--EndFragment-->
<allow>
		<create creator="new" javascript="SendPushService">
			 <param name="class" value="com.im.service.SendPushService"/>
		</create>
</allow>

 

简明:这是一个把自己编写好的java服务类暴露给客户端直接调用的简单配置方式,对于不熟悉dwr框架的读者,可参看相关的dwr文档,里面有详细的介绍,在此就不用扼要。

 

 

第五步编写jsp文件.

 

 

<!--EndFragment-->

<!--EndFragment-->
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml">
  <head>
    <base href="${basePath }" />
    <script type='text/javascript' src='${basePath}dwr/engine.js'></script>
    <script type='text/javascript' src='${basePath}dwr/util.js'></script>
    <script type='text/javascript' src='${basePath}dwr/interface/SendPushService.js'></script>
    <script type="text/javascript">
    	function hello(){
    		SendPushService.send("第一个dwr推程序");
    	}
    	/**由dwr在后台调用这个方法**/
    	function dwrtest(data){
    		alert(data);
    	}
    </script>
    <title>第一个dwr推程序</title>
  </head>
  <body onload="dwr.engine.setActiveReverseAjax(true);">
	<input type="button" value="点击我" onclick="hello();" />   
  </body>
</html>

 

简明:SendPushService是在第四步里面声明的服务类,在这里已转化为js对象调用,通过src= dwr/interface/SendPushService.js 引入;onload事件触发了dwr.engine.setActiveReverseAjax(true)方法,只有激活了这个方法之后,推送才会真正生效,有兴趣的读者不妨一试,去掉onload事件,看看执行效果如何!

 

细心的读者在第三步会发现Util util = new Util(myScSession);Util画了一条删除线,因为我使用的是dwr3.0版本,在3.0版本里面新增了一个更好用的类BrowserUtil所能实现的功能在Browser类都已实现,官方建议我们使用Browser,所以将Util设置为过期。(设置过期的好处是告诉使用者说我这个类已经过期了,最好不要使用,因为已经有别的类替代它了!为了向后兼容,官方才没把它删除!)

SendPushService类如下:

 

 

public class SendPushService {
   	 ScriptBuffer scriptBuffer = new ScriptBuffer(); //构造js脚本
	 public void send(String msg){  
		 	System.out.println("==========调用了send方法==========");
			WebContext webContext=WebContextFactory.get();
			final ScriptSession myScSession = webContext.getScriptSession();
			scriptBuffer.appendScript("dwrtest(");
			scriptBuffer.appendData(msg);
			scriptBuffer.appendScript(")");
			/**向访问当前页面响应js函数**/
		   Browser.withCurrentPage(new Runnable() {   
				public void run() {
					myScSession.addScript(scriptBuffer);
				}});
	 		}
}

 

<!--EndFragment-->

<!--EndFragment-->
分享到:
评论

相关推荐

    dwr推送例子

    在这个"dw推送例子"中,我们将探讨DWR如何实现数据的实时推送,以及如何在MyEclipse环境中排除不需要的jar包。 DWR的核心功能在于提供了一种安全、高效的AJAX(Asynchronous JavaScript and XML)解决方案,它通过...

    dwr 消息后台推送

    Direct Web Remoting (DWR) 是一个开源的Java库,它允许JavaScript在浏览器和服务器之间进行安全、简单、异步的交互。这个技术主要用于创建动态、实时的Web应用,使得前端用户界面能够实时获取服务器端的数据更新,...

    Dwr3 实现消息推送步骤详解

    DWR3是其第三个主要版本,提供了更多的特性和改进,包括消息推送功能。下面我们将详细介绍Dwr3实现消息推送的步骤,并涉及与ScriptSessionListener、跨域问题以及Maven的集成。 首先,我们需要理解DWR3的消息推送...

    DW1000.rar_UWB dw1000_dw1000 定位源码_dw1000 驱动程序_dw1000芯片_uwb5g

    标题中的“DW1000.rar”是一个包含与Decawave DW1000超宽带(UWB)芯片相关的资源的压缩文件。DW1000是一款专为短距离、高精度无线通信设计的UWB芯片,常用于室内定位、物联网(IoT)设备以及5G通信的低功耗高速数据...

    UWB DW1000_c_dw1000_UWB定位_dw3000定位_tonguenpo_

    标题中的“UWB DW1000_c_dw1000_UWB定位_dw3000定位_tonguenpo_”表明这是一个关于超宽带(UWB)定位技术的项目,特别是利用Decawave公司的DW1000和DW3000芯片进行厘米级定位的应用。UWB技术是一种无线通信技术,以...

    Lis2dw12.rar_lis2dw12_lis2dw12开发_lis2dw12程序_lis2dw12驱动_lis2dw驱动

    标题中的“Lis2dw12.rar_lis2dw12_lis2dw12开发_lis2dw12程序_lis2dw12驱动_lis2dw驱动”表明这是一份关于LIS2DW12传感器的开发资源包,其中包含了与驱动程序相关的代码。LIS2DW12是一款高性能的三轴加速度计,常...

    DWR3.0.1jar打包

    DWR (Direct Web Remoting) 是一个开源的Java库,它允许Web应用程序在客户端JavaScript和服务器端Java之间进行实时通信,有效地打破了传统的浏览器与服务器之间的请求-响应模型。DWR3.0.1版本是DWR的一个重要更新,...

    Dw 和 HtmI 制作一个简易计算器

    table{border:1px solid gray;} td{width: 10px;height: 10px;border:1px groove gray;text-align: right;padding: 5px;margin: 5px;border-radius: 5px 5px 5px 5px;} button{width: 40px;height: 40px;border-...

    黄国酬dw2xls源程序

    在IT领域,数据处理与转换是不可或缺的一环,而"黄国酬dw2xls源程序"则是一个专门用于数据转换的工具,尤其针对PB(PowerBuilder)环境下的数据窗口(DataWindow)到Excel的转换。此源程序的出现,为开发者提供了一...

    dwr做的一个聊天室例子

    在这个"Dwr做的一个聊天室例子"中,我们可以深入探讨DWR如何被用来创建一个简单的在线聊天系统。 1. **DWR基础** DWR的核心功能是提供了一个安全且高效的机制,使得JavaScript可以调用服务器端的Java方法,就像...

    dw_wdt.rar_dw_dw_

    1. "dw_wdt.c":这是一个C语言源代码文件,很可能包含了DW看门狗定时器的驱动程序实现。开发者可以通过这个源代码理解如何初始化、设置和控制DW看门狗定时器。 2. "beat_spu_priv1.c":这个文件可能是Beat平台的SPU...

    lis2dw12驱动及例子

    【标题】"lis2dw12驱动及例子" 涉及的核心知识点是关于 lis2dw12 这款传感器的驱动程序开发以及相关的应用示例。LIS2DW12 是意法半导体(STMicroelectronics)推出的一款高性能、低功耗的三轴加速度计,常用于物联网...

    dw1000官方例程源码

    - 设置信道和频率:DW1000支持多个信道,需根据应用场景进行选择。 - 配置传输参数:包括数据速率、功率等级、 preamble长度等。 3. 数据发送: - 编码数据:将要发送的数据转化为DW1000可识别的格式。 - 发送...

    PB DW自动列宽源程序

    PB DW自动列宽源程序是PowerBuilder(PB)开发中的一个关键知识点,主要涉及PowerBuilder的数据窗口(DataWindow,简称DW)组件。DataWindow是PB的核心功能之一,用于展示、编辑和管理数据库中的数据,而自动列宽...

    PB90-dw2xls源程序20090504

    PB90-dw2xls源程序20090504是一款基于PowerBuilder 9.0(简称PB90)开发的工具,用于将数据窗口(DataWindow)中的数据转换为Excel(XLS)格式。这个源程序的发布日期为2009年5月4日,可能是开发者为了方便用户快速...

    打印机驱动 施乐P275DW打印机驱动

    打印机驱动 施乐P275DW打印机驱动打印机驱动 施乐P275DW打印机驱动打印机驱动 施乐P275DW打印机驱动打印机驱动 施乐P275DW打印机驱动打印机驱动 施乐P275DW打印机驱动打印机驱动 施乐P275DW打印机驱动打印机驱动 ...

    pb-dw2xls-v5.0.rar_DW2XLS 5_dw2xls_dw2xls v5.0_powerbuilder xls_

    DW2XLS是一个独立的程序,专为PowerBuilder应用程序设计,用于将数据窗口对象导出为Excel文件。它支持多种数据窗口格式,包括PBL库中的数据窗口、运行时数据窗口以及直接从数据库查询生成的数据窗口。这种转换功能...

    最简单的收发程序dw1000_api_rev2p02_dw1000API调用_最简单的收发程序_dw1000_源码.zip

    标题中的“最简单的收发程序dw1000_api_rev2p02_dw1000API调用_最简单的收发程序_dw1000_源码.zip”表明这是一个关于DW1000(Decawave 1000)模块的无线通信收发程序,其中涉及到了API(应用程序接口)的调用。DW...

    DW实现计算器功能

    在本主题中,我们将探讨如何使用Dreamweaver(DW)这个前端开发工具,结合JavaScript语言,来实现一个基本的计算器功能。Dreamweaver是Adobe公司出品的一款强大的Web设计和开发工具,它支持代码编辑、可视化设计以及...

Global site tag (gtag.js) - Google Analytics