dwr学习文档

2019-04-23 13:11

DWR: Easy AJAX for JAVA

DWR简介

DWR是一个Java开源库,帮助你实现Ajax网站。

它可以让你在浏览器中的Javascript代码调用Web服务器上的Java,就像在Java代码就在浏览器中一样。 DWR主要包括两部分:

? ?

在服务器上运行的Servlet来处理请求并把结果返回浏览器。 运行在浏览器上的Javascript,可以发送请求,并动态改变页面。

DWR会根据你的Java类动态的生成Javascript代码。这些代码的魔力是让你感觉整个Ajax调用都是在浏览器上发生的,但事实上是服务器执行了这些代码,DWR负责数据的传递和转换。

这种Java和Javascript之间的远程调用会让DWR用户感觉像是曾经习惯使用的RMI或SOAP的RPC机制。而且这一过程还不需要额外的浏览器插件。

Java是同步的,而Ajax是异步的。所以当你调用一个远程方法时,你要给DWR一个回调函数,当数据从网络上回来时,DWR会调用这个函数。

这个图表现了DWR是如何在onclick事件中改变下拉列表的内容的。

DWR动态为服务端AjaxService类(Java)生成了一个相应的客户端AjaxService类(Javascript)。这个类被eventHandler调用。DWR就会去处理整个远程调用的细节,包括在Javascript和Java之间转换参数和返回值。然后在这里例子中,它会执行你提供的回调函数(populateList),这个函数再利用DWR提供的工具函数来更改页面内容。

DWR帮你生产出具有很好交互性的网站,它提供的一些Javascript库帮你处理DHTML,也提供了一些例子做为参考。

如何开始用DWR

有两种方法开始DWR,简单的方式是下载WAR文件然后看看。但是这不能帮你知道如何轻松的把DWR整合到你的web应用中,所以还是推荐你按照下面的3个步骤做: 1. 安装DWR的Jar包

下载dwr.jar文件。把它放到你的webapp的WEB-INF/lib目录下。那里可能已经有很多其他的jar文件了。 2. 编辑配置文件

需要把下面的代码加到WEB-INF/web.xml文件中。那部分需要和其他的在一起,部分也一样。

dwr-invoker DWR Servlet

uk.ltd.getahead.dwr.DWRServlet

debug true

dwr-invoker /dwr/*

在WEB-INF目录下的web.xml旁边创建一个dwr.xml文件。可以从最简单的配置开始:

\ \>

DWR配置文件定义了那些DWR会创建提供远程调用的Javascript类。在上面的例子中我们定义了两个类来提供远程调用,并为其提供的Javascript类的名字。

在上面我们使用了new创建器,它会调用没有参数的构造函数来创建实例,但是所有JavaBean必须有这一构造函数。还要注意DWR有一些限制:

? ? 不要出现Javascript保留关键字;和保留关键字同名的函数指定被排除。多数Javascript的关键字和Java是相同的。所以你不可能有一个方法叫做\。但是该死\对与Javascript有着特殊意义,而对Java则不是。 Javascript方法重载是不支持的,所以尽量不要再Java中使用。 3. 访问下面的URL

http://localhost:8080/[YOUR-WEBAPP]/dwr/

你可以看见一个页面,里面有第二步中的类。接着往里点,你会看到所有可以调用的方法列表。这个页面是动态生成用来测试的例子。 自己动手试一下!

怎么在你的web应用中使用 在文档中有很多例子演示如何动态更改页面中的文字、更新列表、操作表单,还有直接更改table中的内容。每一个都有如何实现的介绍。 另一种方式是看刚才的页面中提供的代码:

到 http://localhost:8080/\\[YOUR-WEBAPP\\]/dwr/ 页面,点击你的类。查看源码,找到执行方法的那几行,把那些文字粘贴到你的HTML或JSP中。

要包括下面这些能产生神奇效果的Javascript文件的链接。

你也可以把其中/[YOUR-WEBAPP]/替换成你的web页面的相对路径。 译者注:如果是JSP最好用request.getContextPath()

如何写与DWR交互的Javascript代码。

DWR根据dwr.xml生成和Java代码类似的Javascript代码。

相对而言Java同步调用,创建与Java代码匹配的Ajax远程调用接口的最大挑战来至与实现Ajax的异步调用特性。

DWR通过引入回调函数来解决这个问题,当结果被返回时,DWR会调用这个函数。 有两种推荐的方式来使用DWR实现远程方法调用。可以通过把回调函数放在参数列表里,也可以把回调函数放到元数据对象里。

当然也可以把回调函数做为第一个参数,但是不建议使用这种方法。因为这种方法在处理自动处理http对象时(查看\上会有问题。这个方法主要是为向下兼容而存在的。 简单的回调函数

假设你有一个这样的Java方法: public class Remote {

public String getData(int index) { ... } }

我们可以在Javascript中这样使用: ...

function handleGetData(str) { alert(str);

}

Remote.getData(42, handleGetData); 42是Java方法getData()的一个参数。 此外你也可以使用这种减缩格式:

Remote.getData(42, function(str) { alert(str); }); 调用元数据对象(Meta-Data)

另外一种语法时使用\调用元数据对象\来指定回调函数和其他的选项。上面的例子可以写成这样:

Remote.getData(42, {

callback:function(str) { alert(str); } });

这种方法有很多优点:易于阅读,更重要的指定额外的调用选项。 超时和错误处理

在回调函数的元数据中你可以指定超时和错误的处理方式。例如: Remote.getData(42, {

callback:function(str) { alert(str); }, timeout:5000,

errorHandler:function(message) { alert(\ + message); } }); 查找回调函数

有些情况下我们很难区分各种回调选项(记住,Javascript是不支持函数重载的)。例如: Remote.method({ timeout:3 }, { errorHandler:somefunc });

这两个参数之一是bean的参数,另一个是元数据对象,但是我们不能清楚的告诉DWR哪个是哪个。为了可以跨浏览器,我们假定null == undefined。 所以当前的情况,规则是:

?

如果第一个或最后一个是一个函数,那么它就是回调函数,没有元数据对象,并且

其他参数都是Java的方法参数。


dwr学习文档.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:02增值税法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: