一 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:返回数据的解析
很方便吧??
如需要原代码请回复