“DWR is a Java library that enables Java on the server and JavaScript in a browser to interact and call each other as simply as possible. With Reverse Ajax, DWR allows Java code running on a server to use client side APIs to publish updates to arbitrary groups of browsers. This allows interaction 2 ways - browser calling server and server calling browser. DWR supports Comet, Polling and Piggyback (sending data in with normal requests) as ways to publish to browsers.”

上面的话是DWR官网给出的,浏览器请求服务器是很容易做到的,但是服务端主动与浏览器客户端的交互是一个难点。

如果服务端主动而且实时的往浏览器上push数据,有哪些办法可以做到呢?

1.       浏览器ajax请求

浏览器被动利用ajax每隔一段时间进行请求,这样的做法有些盲目且给服务端带来较大的压力。

2.       利用reverse ajax技术

服务端可以主动调用客户端的js函数,来多浏览器的内容进行实时的更新,下面通过一个实例对DWR的reverse ajax技术进行更深入的理解。

首先,需要说明的是DWR是一个基于Java的开源library,所以实例的服务端语言限定在Java;其次,这个例子的目的是服务端主动而且实时的网客户端的textarea中写数据,达到模拟console输出的效果。

在eclipse的Dynamic Web Project类型的项目中进行如下的配置开发:

1.       导入dwr.jar和commons-logging.jar

2.       配置web.xml

web.xml中加入如下的配置:

 dwr-invoker
org.directwebremoting.servlet.DwrServlet <init-param>
debug
true
param> <init-param>
pollAndCometEnabled
true
param> <init-param>
在WEB启动时是否创建范围为application的creator
initApplicationScopeCreatorsAtStartup
true
param> 1 dwr-invoker
/dwr/*

3.       配置dwr.xml

与web.xml同级的目录中新建dwr.xml并进行如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://getahead.org/dwr/dwr10.dtd"> <dwr> <allow> <create creator="new" javascript="Demo">
<param name="class" value="com.demo.redirect.DwrDemo"/>
create> allow> dwr>

4.       服务端Java开发

package com.demo.redirect;

import org.directwebremoting.Browser;
import org.directwebremoting.ScriptSessions; publicclass DwrDemo { publicstaticvoid sendMsg(final String msg){ Browser.withPage("/DeNA_Dynamic/index.html",new Runnable(){
publicvoid run(){
ScriptSessions.addFunctionCall("show", msg);
}
}); } }

/DeNA_Dynamic/index.html即/项目名称/page名称,show为前端的js函数,msg为参数。

5.       客户端JavaScript开发

$(document).ready(function(){
dwr.engine.setActiveReverseAjax(true);
}); function show(msg){
var textarea = $("#text").append(msg+"\n");
textarea.scrollTop(textarea[0].scrollHeight - textarea.height());
}

服务端如果想往客户端push数据,在Java代码中调用sendMsg函数即可。

Reference: http://directwebremoting.org/dwr/index.html

DWR3.0(Direct Web Remoting)实践的更多相关文章

  1. DWR(Direct Web Remoting)是什么

    DWR可以用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助你开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一 ...

  2. DWR3.0 dwr 返回值(数组,集合,Map)

    首先导入项目所需要的包,如下:dwr.jar,commons-logging-1.0.4.jar,版本可以调整 1.web.xml<?xml version="1.0" en ...

  3. DWR3.0框架入门(1) —— 实现ajax

    框架简介:DWR(Direct Web Remoting)      是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏 ...

  4. DWR3.0 服务器推送及解惑

    前言:在慕课网上学习一下服务器推送给客户端技术,代码亲测过,没毛病,今天整理记录一下: 一.环境搭建 直接上图,简单粗暴,myeclipse上file->new->WebProject 二 ...

  5. Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

    首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...

  6. ASP.NET Web API实践系列04,通过Route等特性设置路由

    ASP.NET Web API路由,简单来说,就是把客户端请求映射到对应的Action上的过程.在"ASP.NET Web API实践系列03,路由模版, 路由惯例, 路由设置"一 ...

  7. DWR3.0框架入门(2) —— DWR的服务器推送

    DWR3.0框架入门(2) —— DWR的服务器推送 DWR 在开始本节内容之前,先来了解一下什么是服务器推送技术和DWR的推送方式.   1.服务器推送技术和DWR的推送方式   传统模式的 Web ...

  8. DWR3.0框架入门(3) —— ScriptSession的维护及优化

    1.ScriptSession使用中存在的问题        在上一节实现了服务器的推送功能,但是根据 ScriptSession的生命周期我们可以得出以下几点的问题:   (1)ScriptSess ...

  9. 20155326《网路对抗》Exp8 WEB基础实践

    20155326<网路对抗>Exp8 WEB基础实践 实践内容 (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写 ...

随机推荐

  1. Java数据结构-------Map

    常用Map:Hashtable.HashMap.LinkedHashMap.TreeMap 类继承关系: HashMap 1)无序:  2)访问速度快:  3)key不允许重复(只允许存在一个null ...

  2. C#、.Net学习资料免注册下载基地。。。

    原文发布时间为:2008-11-28 -- 来源于本人的百度文章 [由搬家工具导入] http://club.topsage.com/forumdisplay.php?fid=121&filt ...

  3. 关于Struts2中param的作用

    1.页面传参与配置传参的区别: 如果页面Form表单的参数在Action类中有相应的setter方法,则会优先取页面Form表单传过来的值,如果页面没有该属性同名的参数,则会从配置文件中取同名的参数值 ...

  4. Linux Shell 文本处理工具集锦【转】

    转自:http://www.cnblogs.com/me115/p/3427319.html 内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq ...

  5. Android代码中设置字体大小,字体颜色,显示两种颜色.倒计时效果

    Android代码中设置字体大小,字体颜色,显示两种颜色 在xml文件中字体大小用的像素 <TextView android:id="@+id/uppaid_time" an ...

  6. C#根据经纬度获取物理地址

    废话不多说,直接上代码: 1.首先新建几个类,定义一些属性: public class BaiDuGeoCoding { public int Status { get; set; } public ...

  7. 51nod 1105 第K大的数 【双重二分/二分套二分/两数组任意乘积后第K大数】

    1105 第K大的数  基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * ...

  8. 如何证明一个数的数根(digital root)就是它对9的余数?

    数根就是不断地求这个数的各位数之和,直到求到个位数为止.所以数根一定和该数模9同余,但是数根又是大于零小于10的,所以数根模9的余数就是它本身,也就是说该数模9之后余数就是数根. 证明: 假设有一个n ...

  9. 洛谷——P1617 爱与愁的一千个伤心的理由

    P1617 爱与愁的一千个伤心的理由 题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第二章. 经历了心痛后,爱与愁大神不行了. 题目描述 ...

  10. Eclipse 最常用的 10 组快捷键,个个牛逼!

    虽然栈长我现在不怎么用 Eclipse 了,但 Eclipse 的快捷键还是忘不了的,可以说 Eclipse 的快捷键很方便,恰到好处. 今天,我大概整理了 10 组 Eclipse 我觉得比较常用的 ...