一 Dwr 是什么?
DWR 是一个开源的类库 , 可以帮助开发人员开发包含 AJAX 技术的网站 . 它可以允许在浏览器里的代码( javascript )使用运行在 WEB 服务器上的 JAVA 函数 , 就像它就在浏览器里一样 .
它包含两个主要的部分 : 允许 JavaScript 从 WEB 服务器上一个遵循了 AJAX 原则的 Servlet( 小应用程序 ) 中获取数据 . 另外一方面一个 JavaScript 库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容 .
DWR 采取了一个类似 AJAX 的新方法来动态生成基于 JAVA 类的 JavaScript 代码 . 这样 WEB 开发人员就可以在 JavaScript 里使用 Java 代码就像它们是浏览器的本地代码 ( 客户端代码 ) 一样 ; 但是 Java 代码运行在 WEB 服务器端而且可以自由访问 WEB 服务器的资源 . 出于安全的理由 ,WEB 开发者必须适当地配置哪些 Java 类可以安全的被外部使用 .
二 dwr 的使用事例
1 从网站 http://getahead.ltd.uk/dwr/下载dwr.jar, 放入放到 WEB-INF/lib 中
2 在 web.xml 中引用包中的一个 servlet:
dwr-invoker
uk.ltd.getahead.dwr.DWRServlet
debug
true
dwr-invoker
/dwr/*
3 创建Hello.java,和Person
package com.hf.dwr;
public class Hello {
String name="";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person getPerson(String value) {
Person per=new Person();
per.setName(value);
System.out.println(per.getName());
return per;
}
}
package com.hf.dwr;
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
4 创建 dwr.xml 文件,并在里面配置Hello.java
xml version = "1.0" encoding = "UTF-8" ?>
DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd" >
< dwr >
< allow >
< create creator = "new" javascript = "Hello" >
< param name = "class" value = "com.hf.business.dwr.helloTest" />
create >
< convert converter = "bean"
match = "com.hf.dwr.Person" />
allow >
dwr >
Creator 设定为 new ,表示使用 Hello 的无参构造函数生成对象, javascript 设定为 Hello ,表示客戶端 JavaScript 程式可以使用 Hello 来调用的 com.hf.business.dwr.HelloTest.Hello 的函数。
至于 < convert converter = "bean" match = "com.hf.dwr.Person" /> ,因为我们需要将其作为一个返回对象传回客户端,所以需要配置一下(我认为只是个声明,用于反射转化)。
5 创建jsp页面
< meta http-equiv = "Context-Type" content = "text/html; charset=UTF-8" >
< html >
< head >
< title > TabContainer Demo title >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" > meta >
< script type = 'text/javascript' src = "<%=request.getContextPath()%>/dwr/interface/Hello.js">script>
< script type = "text/javascript" src = "<%=request.getContextPath()%>/js/dwr/engine.js">script>
< script type = "text/javascript" src = "<%=request.getContextPath()%>/js/dwr/util.js">script>
< script type = "text/javascript" >
var person;
function readPerson()
{
var nameValue=document.getElementById( "name" ).value;
Hello.getPerson(nameValue,callback);
//JDate.toString(callback);
}
function callback(aperson) {
alert(aperson.name);
person = aperson;
DWRUtil.setValues(person);
}
script >
head >
< body >
< table >
< tr >
< td > Name: td >
< td >< input id = "name" type = "text" />
< input type = "button" value = "Read" onclick = "readPerson()" />
td >
tr >
table >
body >
html >
首先,文件 src = "<%=request.getContextPath()%>/dwr/interface/Hello.js">script>
并不是由我们创建的。这是由dwr根据反射机制进行引用。
我们可以看一下流程:
点击onclick事件3执行函数: readPerson ,函数中调用 Hello.getPerson () ,这其实是通过ajax访问web.xml中配置的servlet,然后根据反射机制调用Hello.java的getPerson函数。并将返回的person对象的数据组织成javascript对象返回到客户端。并传递给callback()去执行。这样做起码省去了我们如下工作:
A:ajax访问代码的编写。
B:返回数据的解析
很方便吧??
如需要原代码请回复
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!