“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. How Many to Be Happy?

    How Many to Be Happy? 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Let G be a connected simple undirected graph wh ...

  2. Netbeans 8.2启动参数含义及配置

    在manjaro linux中Netbeans8.2 + JDK 1.8 netbeans的配置文件具体在:/usr/share/netbeans/etc/netbeans.conf,需要使用root ...

  3. cisco packet 实验教程(二)

    06. 三层交换机实现VLAN间路由 技术原理 1)三层交换机是带有三层路由功能的交换机,也就是这台交换机的端口既有三层路由功能,也具有二层交换功能.三层交换机端口默认为二层口,如果需要启用三层功能就 ...

  4. hdu 5698(杨辉三角的性质+逆元)

    ---恢复内容开始--- 瞬间移动 Accepts: 1018 Submissions: 3620 Time Limit: 4000/2000 MS (Java/Others) Memory Limi ...

  5. LeetCode OJ-- Pow(x, n) **@

    https://oj.leetcode.com/problems/powx-n/ 二分法 class Solution { public: double pow(double x, int n) { ...

  6. (转)Kettle命令行

    kettle使用命令行来运行ktr和kjb 1:cmd方式运行 1.ktr的运行:运行transformation文件是通过Pan.bat来运行的. 打开cmd命令行窗口,转到Pan.bat所在的目录 ...

  7. EasyMvc入门教程-基本控件说明(13)选项卡导航

    选项卡Tab导航主要用于企业页面显示不同子类或者子页面的信息内容. 先来一个基本的使用例子:代码如下: @{ var data = new List<TabItem>() { new Ta ...

  8. 经验分享 | Burpsuite抓取非HTTP流量

    使用Burp对安卓应用进行渗透测试的过程中,有时候会遇到某些流量无法拦截的情况,这些流量可能不是HTTP协议的,或者是“比较特殊”的HTTP协议(以下统称非HTTP流量).遇到这种情况,大多数人会选择 ...

  9. Web终端之使用shellinabox在浏览器进行ssh登录

    shellinbox有一个内建的web server作为基本的web ssh client,允许你通过指定的端口访问linux服务器的ssh shell,只要你的浏览器支持AJAX/JS/CSS就可以 ...

  10. 【React Native开发】React Native移植原生Android项目(4)

    ),React Native技术交流4群(458982758),请不要反复加群!欢迎各位大牛,React Native技术爱好者加入交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章 ...