龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

ToDoTasks: 使用DWR向Java添加AJAX(1)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
将基于互联网的Java应用软件做得更具交互性并不一定很困难,直接互联网远程(Direct Web Remoting(DWR))工具包可以帮您实现AJAX中大部分工作。 以往,我们使用过ToDoTasks软件,并将其添

将基于互联网的Java应用软件做得更具交互性并不一定很困难,直接互联网远程(Direct Web Remoting(DWR))工具包可以帮您实现AJAX中大部分工作。

以往,我们使用过ToDoTasks软件,并将其添加到工作架构中,这样人们可以通过浏览器来查阅报告,这个月,我们将继续前进一步,创建一个更具交互性的浏览器体验。

现在,我们可以通过编写我们自己的servlet或JSP代码来生成更加智能的网页以实现这一点,这种方法行得通,但是在浏览器中使用AJAX/DHTML进行人机交互变得越来越普遍,但它的工作量也是非常大的,而且在维护软件方面也存在潜在的困难,现在有更加快捷的方法,这就是我们将要使用的DWR。

DWR的意思是直接互联网远程工作(Direct Web Remoting),在DWR背后的基本思想是使存在于服务器上的Java类对于运行在浏览器中的JavaScript代码是可见的。

DWR是基于所需要的Java类方法和字段的,DWR创建的JavaScript代码也是访问这些类和字段所必需的,因此您不必自己编写AJAX代码,一下是一个简单的例子:

package com.builder.uk.todotasks;

public class Adder {

public Adder() {}

public int add(int x,int y) { return x+y; }

}

然后,在一个HTML文件中适当的位置进行适当的配置:

这将会调用DWR为Adder生成JavaScript界面,并包括DWR“引擎”代码和DWR工具代码。在页面的脚本中我们可以通过一个调用来访问Adder:

Adder.add(doneAdd,100,200);

脚本中的doneAdd是一个函数引用,该函数是在一个请求完成的时候被调用的,调用的结果就是Adder.add:

function doneAdd(result) {

alert(result);

}

这在我们的例子中将会弹出"300"的结果。

在建立我们的新用户界面之前,我们在ToDoTasks上的第一站将是让它工作,所以继续使用上一篇文章中的源代码,并添加DWR。首先,下载DWR,DWR 2.0目前还在开发中,所以我们使用现在的1.1版,下载dwr.jar文件。我们将它添加到以前创建的网络应用软件文件夹而不是将jar文件放到libs文件夹中,所以我们webapp/WEB-INF中创建一个lib文件夹并将dwr.jar拷贝到此位置。

在dwr.jar的内部就是DWR所使用的servlet和资源,所以我们需要将DWR servlet和网络应用软件连接起来。编辑webapp/WEB-INF/web.xml文件并加入以下语句:

dwr-invoker

DWR Servlet

uk.ltd.getahead.dwr.DWRServlet

debug

true

在现有的条目之后定义DWR servlet并在现有的条目之后添加:

dwr-invoker

/dwr/*

为了映射DWR servlet来处理所有对/dwr/*的请求。我们使用早前展示过的的代码在src/com/builder/uk/todotasks/创建了Adder.java文件。

现在就只有一个步骤了­­­­­­:配置DWR。DWR是通过webapp/WEB-INF文件夹中一个名为dwr.xml的文件配置的,此文件可以控制哪些Java类对于JavaScript是可见的,以下是连接Adder的dwr.xml的例子:

"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"

"http://www.getahead.ltd.uk/dwr/dwr10.dtd">

元素之内有一个元素可以控制哪些类是允许被访问的,在之内,我们有一个元素,它定义了DWR在何时创建类的一个实例。在此处,creator的属性被设定为"new",它规定了实例被创建时将使用Java的'new'操作符。其它的creator值还包括"scripted",用于通过一种脚本语言创建实例,"spring"、"jsf"、"struts"以及"pageflow"用于通过这些架构来创建实例,而"null"则用于静态类。

Javascript属性指定了该实例在JavaScript代码中使用的名称,最后scope属性设定了对象何时出现以及存续时间,在此,我们指定了"session"所以它将在服务器上浏览器会话开始的时候创建。

元素可以包含许多元素,元素是传送到creator的,所以在这种情况下,我们将"class"参数设定为Java类的名字。

现在我们可以运行ToDoTasks程序了,并在浏览器中打开http://localhost:8080/dwr/,在此我们可以看到DWR类的列表,这个页面是DWR测试/调试的前台,我们可以在定义中打开它。

图1

当我们点击 Adder的链接,我们将得到Adder的测试页面。

图2

这首先展示了使用Adder时,我们向一个JavaScript页面所需要添加的代码,然后它列出了可供调用的方法,这是一个动态列表,您可以向add()项目的字段中输入值,并点击执行来调用软件/服务器端的方法。

图3

这包含了DWR的基础,为了钻研得深入一些,我们使用了一个新版本的ToDoTasks,您可以用它来构建和运行。和Adder的例子一样,它拥有基于DWR的前端界面,可以查看、编辑和删除任务。

图4

为了管理前端界面,我们创建了一个名为TasksSession的类。这包含了一个Task实例的ArrayList,它可以根据一个SortOrder变量进行排序,该变量可以封装该字段以实现排序,无论是升序还是降序。

精彩图集

赞助商链接