`
txf2004
  • 浏览: 6873362 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DWR--AJAX更方便

 
阅读更多

附spring整合DWR(包含struts1,spring,hibernate整合置):

http://blog.csdn.net/jiabeis/archive/2010/05/26/5626121.aspx

最近了解了一个有用的AJAX工具,看了网上的文章这里有一些摘抄和自己的总结,和大家分享:

什么是DWR(Direct Web Remote)?
DWR是一种AJAX解决方案!
DWR包括一个java库,以及一套javascript,使得我们可以用一种非常简单的方式,在页面上使用javascript直接调用后台的java对象!
DWR架构
DWR的javascript库包括几个部分:dwr的javascript引擎(即对AJAX调用的封装)、dwr提供的一些非常有用的辅助javascript函数库、以及dwr自动帮我们生成的专门用于调用后台JavaBean方法的javascript库!
Dwr在运行的时候,动态生成一个javascript库,这个库是对后台javabean调用的封装,我们可以直接使用这个库来实现直接调用JavaBean的目的!
注意:是在运行的时候动态生成!



下面我们来看看如何安装和使用(基于DWR2.x版本):
1.下载dwr.jar,将其加入web-inf/lib目录
2.修改web.xml文件,添加DWRServlet的映射
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

3.配置dwr,即在WEB-INF目录下,添加dwr.xml文件,让dwr知道在运行的时候应该给哪些JavaBean生成相应的javascript库!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="test1">
<param name="class" value="com.bjsxt.dwr.Test1"/>
</create>
</allow>
</dwr>
这个配置的意思是,要创建的是Test1对象的javascript库,而且这个库的名字叫test1,同时,这也是我们在JSP页面上调用这个对象的时候所使用的名称,
dwr.xml也支持spring:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="spring" javascript="aclManager">
<param name="beanName" value="aclManager"/><!--Spring配置文件中的bean:aclManager -->
</create>
</allow>
</dwr>


请看下面的JavaBean代码和JSP实例:

4、下面是Test1这个JavaBean的源代码:package com.bjsxt.dwr;


public class Test1 {

public String sayHello(String name){
return "你好,"+name;
}

}

5、在JSP中的使用!

<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/test1.js"></script>
<title>Insert title here</title>
<script type="text/javascript">
function sayHello(){
test1.sayHello("李四ddd",
function(data){
alert(data);
}
);
}
</script>
</head>
<body>
<a href="#" onclick="sayHello()">Test1</a>
</body>
</html>

注意:这里的服务器处理类,可以是任何的javaBean,而无需是一个Servlet.服务器支持spring整合和struts等框架


DWR原理
通过前面五章学习,对DWR整体有所了解,但是我仍然对核心细节不是很清楚。我最后的办法就是单步调试,调试之后将所有东西串一串,DWR的原理就清楚了,搞清楚核心生产线,其他全是辅助的,没必要再分析了。老外聪明啊,服。
我们以DWR的第一个样例为例Dynamically Text
1,在index.html里面我们嵌入
<script type='text/javascript' src='../dwr/engine.js'> </script>
<script type='text/javascript' src='../dwr/util.js'> </script>
<script type='text/javascript' src='../dwr/interface/Demo.js'> </script>

注意:这里的引入的js文件也都是动态生成的。
前面两个都是DWR系统默认需要加载的,Demo.js是Demo.java所对应的。按理论,只要在web.xml和dwr.xml配置好,那么我们就可以在客户端操作Demo.js,类似于操作服务器端的Demo.java。 HTML source:
<p>
Name:
<input type="text" id="demoName"/>
<input value="Send" type="button" onclick="update()"/>
<br/>
Reply: <span id="demoReply"></span>
</p>

Javascript source:
function update() {
var name = dwr.util.getValue("demoName");
Demo.sayHello(name, function(data) {
dwr.util.setValue("demoReply", data);
});
}

Java source:
package org.getahead.dwrdemo.simpletext;
public class Demo {
public String sayHello(String name) {
return "Hello, " + name;
}
}

dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="Demo">
<param name="class" value="org.getahead.dwrdemo.simpletext.Demo"/>
</create>
</allow>
</dwr>
在浏览器第一次加载本页面时,浏览器第一步发现<script type='text/javascript' src='../dwr/engine.js'> </script>,根据web.xml关于dwr的配置,系统会激发Servlet的POST方法,向客户端输出engine.js文件流,这个文件你可以在IE的缓存里面发现,当然,程序会在最后输出一刻比较客户端是否已经存在该文件,如果要输出的文件流大小和和该文件大小一致,就不输出了,同样util.js、Demo.js也是这么输出的。那么看看Demo.js文件里面的内容如下:
if (typeof this['Person'] != 'function') {
function Person() {
this.address = null;
this.phoneNumber = null;
this.name = null;
this.id = 0;
this.salary = 0;
}
}

// Provide a default path to dwr.engine
if (typeof this['dwr'] == 'undefined') this.dwr = {};
if (typeof dwr['engine'] == 'undefined') dwr.engine = {};

if (typeof this['Demo'] == 'undefined') this.Demo = {};

Demo._path = '/dwr/dwr';

Demo.sayHello = function(p0, callback) {
return dwr.engine._execute(Demo._path, 'Demo', 'sayHello', p0, callback);
};

Demo.getInclude = function(callback) {
return dwr.engine._execute(Demo._path, 'Demo', 'getInclude', callback);
};
这样我们就知道了,实际上Demo.java类的sayHello方法已经被解释到Demo.js中了,只不过后面的调用还不是很清楚而已。
继续!
public String sayHello(String name) {
return "Hello, " + name;
}
翻译成
Demo._path = '/dwr/dwr';
Demo.sayHello = function(p0, callback) {
return dwr.engine._execute(Demo._path, 'Demo', 'sayHello', p0, callback);
};
在调用engine.execute()方法时,最终采用无刷新访问服务器技术。
采用该技术的关键问题是两个参数,一个是url,往什么地方发送;一个是doc,发送什么内容
通过跟踪engine.js我们知道
url=/dwr/dwr/call/plaincall/Demo.sayHello.dwr
发送内容如下:
callCount=1
windowName=DWR-442B435899
c0-scriptName=Demo
c0-methodName=sayHello
c0-id=0
c0-param0=string:Joe
batchId=1
page=/dwr/simpletext/index.html
httpSessionId=
scriptSessionId=1CC3A.0A3

实际上url=/dwr/dwr/call/plaincall/Demo.sayHello.dwr,转向的是DwrServlet,DwrServlet实际上获取了两部分信息,一部分是url,根据这个能够解析到我们的目标java类、方法,另外一部分是发送信息包,实际上这就是SayHello所需要的参数输入信息,最后,返回数据,这些数据格式通过response返回,在engine.js中对应于return batch.reply;通过解析返回对象,采用javascirpt将数据动态刷新到页面。
至此,dwr的核心原理,基本清晰
让我们简单看一下这个JSP文件:首先引入DWR中的两个核心javascript库:engine.js和util.js,它们分别是dwr中的核心引擎库和辅助工具函数库!
第三个引入的dwr/interface/test1.js,实际上这个文件并不存在,这是由dwr在运行的时候动态生成的!test1这个名称,跟dwr.xml文件中配置的对应对象的javascript属性一致!
而且,我们在使用的时候,直接使用test1这个名称,作为这个对象的引用。直接调用这个对象的方法:sayHello,这个方法的名称必须与JavaBean中的方法名称一致!
sayHello方法有一个参数,同时返回一个值。我们可以直接传递参数,同时指定一个javascript函数来处理这个返回值(如上例所示)。
如何传递参数
如果要调用的方法有参数,则将参数放在前面
如何处理返回值
定义一个函数来处理返回值,这个函数有一个参数,就是JavaBean方法的返回值
设置异步/同步模式
默认情况下,DWR以异步的方式跟服务器通信,即可以同时向服务器发送请求,如果想要改为同步的方式,可以调用:dwr.engine.setAsync(false);
获得对某个页面元素对象的引用
$(“元素的ID或名称”)

分享到:
评论

相关推荐

    dwr3.0.jar_ajax

    dwr3.0.zip包括dwr3.0的jar包和war运行文件,方便下载

    DWR:java ajax application

    dwr, java ajax 应用框架,可以将Java对象直接export到ie客户端,成为javascript对象,非常方便js和服务器端的交互,如果你还没有用,就是一下。太方便了呀。

    Dwrweb服务的ajax请求数据直接调用javaDAO类返回JSON数据。取值方便。快捷

    web服务的ajax请求数据直接调用javaDAO类返回JSON数据。取值方便。快捷

    dwr、ajax 无刷新技术

    dwr基于ajax的框架,也是一种无刷新技术,简单方便又实用,试用于各种门户网,已经喜欢无刷新的伙伴们,大家都来尝试下吧,不玩不知道,一玩吓一跳。

    AJAX-dwr实现增删改查的示例代码

    一个利用DWR的简单应用实例,可以实现增删改查,全部数据存内存列表中,暂不用任何数据库支持,直接部署应用即可使用,方便易用...主要用于DWR初学者体验下DWR在页面的使用和配置方法.

    基于DWR反向AJAX的Web监控系统

    摘 要: 采用DWR框架和反向AJAX,结合Java多线程技术和Siemens Simatic S7-400 PLC TCP/IP通讯模块CP243-1 IT,开发了新的Web监控系统,并应用在供热公司供热管路监控系统中。其替代了原有的C/S模式的工业控制机,...

    dwr什么东传说中的AJAX框架

    dwr开发框架是目前比较方便开发的ajax本人认为他米有AJAX ANY WHREE 好用不过为了下载俺找了个上来和大家共享,需要更多这东东和我联系kongmeng520520163.com&lt;br&gt;&lt;br&gt; QQ 410990678

    基于struts2和DWR的Ajax输入校验实例

    DWR是一个很好的Ajax框架,使用他和STRUTS框架结合在一起,实现输入的校验的效果非常好,使用也方便

    Ajax入门首选(Ext+dwr)

    让初学者可以逐渐进阶Ajax,Ext可以迅速增加用户体验,Dwr可以很方便的通过JavaScript来调用远程服务器端的Java方法 。

    DWR框架Ajax

    用DWR框架,借助DWR框架帮简单实现了Ajax。 数据库链接运用了Hibernate框架,方便完成访问数据库。 数据库为:MYSQL; Java JDK 7; tomcat 6.0服务器; 通过写JavaScipt创建XMLHttpRequest对象,javaScipt方法...

    Ajax资源大全-prototype、ext、dojo、dwr等

    本资源包括各类丰富的Ajax资源,有各种主流的Ajax框架,每种框架都包含最近几个版本,另外,还配有参考说明,方便对各类框架的使用

    Spring 2.0 + Struts 1.2 + Hibernate 3.2 + DWR 2.0 的JavaEE应用示例

    环境:Window Xp Professional, JDK 1.6, Tomcat 6.0, MyEclipse 5.5 MS SQL Server 2000.... 使用DWR可以方便的使用Spring托管的持久层功能。 目的:希望广大Java程序能够熟练的使用SSHA整合框架来作轻量的项目开发。

    dwr快速入门+实例

    本资料详细讲述了dwr的配置及简单常见的应用,方便快速上手!

    dwr简单入门例子

    最近发现了一个java框架,这个框架已经是很老的的了,现在才学习用了,真是迟啊。...原理其实就是它把你的java类发布成了接口服务,js的调用也是ajax的一些封装,有些地方使用这个框架真的很方便。

    struts2.0_Ajax

    &lt;br&gt;实现原理 基于不重新发明轮子的原则,Struts 2并没有开发新的AJAX框架,而是使用时下Java EE平台中比较流行的AJAX框架——Dojo和DWR。 &lt;br&gt;最近在Musachy Barroso等同志的无私奉献下,开发了Struts 2...

    工业电子中的基于DWR反向AJAX的Web监控系统

    摘 要: 采用DWR框架和反向AJAX,结合Java多线程技术和Siemens Simatic S7-400 PLC TCP/IP通讯模块CP243-1 IT,开发了新的Web监控系统,并应用在供热公司供热管路监控系统中。其替代了原有的C/S模式的工业控制机,...

    个人信息管理系统Struts2 spring hibernate dwr

    每天面对大量的知识,时间一长,容易造成某些知识点的生疏或者遗忘,本系统方便对知识进行分类收录,并结合人类遗忘规律,及时对相应的知识点进行提示复习。 提示复习的时间分别是: 第一次:10 分钟, 第二次:30...

    dwr与hibernate实现的分页

    关键JS代码已经加入注释,方便理解. 数据库结构比较简单,可以参照hibernate映射文件自己创建数据库,也可以使用文件下的sql脚本生成数据库. IDE:myeclipse 6.0.1 数据库: sqlserver2000

    DWR+Spring下拉框联动实例

    通过初步学习DWR框架发现真是一个不错的AJAX框架,特别是dwr.util工具对java发数据传输特别方便。这是我写的一个dwr和spring结合在页面下拉框产生联动效果的简单例子,请多指教!

    ajax三级联动菜单

    ajax 联动菜单,操作的是数据库,是一个非常值得学习的实例。此外还用到了dwr,将js和java文件联系起来,操作起来非常方便。

Global site tag (gtag.js) - Google Analytics