DWR3.0(Direct Web Remoting)实践
“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)实践的更多相关文章
- DWR(Direct Web Remoting)是什么
DWR可以用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助你开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一 ...
- DWR3.0 dwr 返回值(数组,集合,Map)
首先导入项目所需要的包,如下:dwr.jar,commons-logging-1.0.4.jar,版本可以调整 1.web.xml<?xml version="1.0" en ...
- DWR3.0框架入门(1) —— 实现ajax
框架简介:DWR(Direct Web Remoting) 是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏 ...
- DWR3.0 服务器推送及解惑
前言:在慕课网上学习一下服务器推送给客户端技术,代码亲测过,没毛病,今天整理记录一下: 一.环境搭建 直接上图,简单粗暴,myeclipse上file->new->WebProject 二 ...
- Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》
首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...
- ASP.NET Web API实践系列04,通过Route等特性设置路由
ASP.NET Web API路由,简单来说,就是把客户端请求映射到对应的Action上的过程.在"ASP.NET Web API实践系列03,路由模版, 路由惯例, 路由设置"一 ...
- DWR3.0框架入门(2) —— DWR的服务器推送
DWR3.0框架入门(2) —— DWR的服务器推送 DWR 在开始本节内容之前,先来了解一下什么是服务器推送技术和DWR的推送方式. 1.服务器推送技术和DWR的推送方式 传统模式的 Web ...
- DWR3.0框架入门(3) —— ScriptSession的维护及优化
1.ScriptSession使用中存在的问题 在上一节实现了服务器的推送功能,但是根据 ScriptSession的生命周期我们可以得出以下几点的问题: (1)ScriptSess ...
- 20155326《网路对抗》Exp8 WEB基础实践
20155326<网路对抗>Exp8 WEB基础实践 实践内容 (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写 ...
随机推荐
- 提高Java开发效率,Idea必装的几款插件
1.codeMaker 重复代码生成工具 domian和dto两个类基本差不多,这个工具就可以通过一个类快速生成另一个类. 2.gsonFormat json转换成Java类 很多时候根据别人接口给的 ...
- FOJ Problem 2273 Triangles
Problem 2273 Triangles Accept: 201 Submit: 661Time Limit: 1000 mSec Memory Limit : 262144 KB P ...
- 【转载】Outlook2010 移动数据文件到其它地方
您可以将数据文件移到计算机的其他文件夹中.移动文件的一个原因在于可使备份更容易并且可以让默认的outlook邮件文件不在存在C盘,导致装系统不见或者文件过大而撑死了C盘.例如,如果数据 ...
- 五、Ubuntu 进入vi相关问题
1.进入vi环境:vim 路径 2.编辑vi:按i键即可 3.保存vi:按esc键,输入冒号,输入wq 回车即可 4.遇到readonly相关问题,可先解除readonly:按esc键,输入:set ...
- Android进阶之Fragment与Activity之间的数据交互
1 为什么 因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常. 2 Activity把值传递给Fragment 2.1 第一种方式,也是最常用的 ...
- Android项目搭建最常用的架构解密
在完成android项目的时候第一步都是要搭建架构,下面我们来展示一下最常用的架构结构的: 源码下载地址: https://download.csdn.net/download/heishuai123 ...
- 8大排序算法的java实现--做个人收藏
排序算法分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因为数据量太大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.这里只讨论内部排序,常见的内部排序算法有:插入排序 ...
- Needle in a haystack: efficient storage of billions of photos 【转】
转自09年的blog,因为facebook在国内无法访问,故此摘录. The Photos application is one of Facebook’s most popular features ...
- httperf+autobench测试web应用
测试性能相关的概念理解 httperf使用 主页: http://www.hpl.hp.com/research/linux/httperf/ 下载: http://httperf.googleco ...
- concurrencyProgrammingGuide 1
thread用来表述执行代码的独立path.os x的线程执行基于POSIX 线程API. process用来表述一个运行操作,可以包含多个线程. task用来描述工作的抽象概念. Concurren ...