//————发送简单字符串参数返回普通字符串————–
function sendMessage(){
//获取页面中name元素的值
var name = documentgetElementById(name)value;
//调用远程方法cb是回调函数
hellohello(name cb)}
function cb(data){
documentgetElementById(show)innerHTML = data;
}
//———–发送一个JavaBean对象作为参数返回普通字符串————
function sendObject(){
var nameValue = (name)value;
//调用远程方法使用JavaScript对象作为参数
hellosendObj({name:nameValue} cb);
}
//—————调用返回JavaBean方法—————–
function getBean(){ var name = documentgetElementById(name)value;
//调用远程方法beanCb是回调函数
hellogetBean(name beanCb)
}
function beanCb(data){
//服务器方法返回JavaBean对象客户端的data是JavaScript对象
documentgetElementById(show)innerHTML = dataname + 您好您已经学会了使用JavaBean返回值;
}
//—————调用返回getObject方法—————
function getObject(){ var name = documentgetElementById(name)value;
//调用远程方法objCb是回调函数
hellogetObject(name objCb)
}
function objCb(data){
//服务器方法返回非JavaBean式的对象客户端的data是JavaScript对象
documentgetElementById(show)innerHTML = dataname + 是从服务器返回的猫的名字;
}
//—————调用返回集合的方法————–
function getBeanList(){
//调用远程方法listCb返回回调函数
hellogetPersonList(listCb);
}
//远程Java方法返回List对象集合元素是JavaBean式的对象
//此处的data是JavaScript对象数组
function listCb(data){
var result=;
//遍历每个数组元素
for (var i = ; i < datalength ; i ++) {
result += data[i]name + <br />;
}
documentgetElementById(show)innerHTML = result;
}
//—————调用返回数组的方法————–
function getBeanArray(){ hellogetPersonArray(arrayCb);
}
function arrayCb(data){
var result = ;
//下面的data是远程Java方法的返回值
//data是个数组遍历数组
for (var i = ; i < datalength ; i ++) {
//依次访问数组元素数组元素是JSON格式的对象访问其name属性
result += data[i]name + <br />;
}
documentgetElementById(show)innerHTML = result;
}
//—————调用返回Map对象的方法————
function getBeanMap(){
hellogetPersonMap(mapCb);
}
//远程Java方法返回Map对象集合元素是JavaBean式的对象
//此处的data是JavaScript对象且每个属性值都是JavaScript对象
function mapCb(data){
var result=;
for (var key in data) {
result += 键为 + key + 其值为: + data[key]name + <br />;
}
documentgetElementById(show)innerHTML = result;
}
//—————调用发送集合的方法——————
function sendBeanList(){
//创建JavaScript数组
var args = [ {name:客户端aaa} {name:客户端bbb} {name:客户端ccc} ];
//Java方法需要List参数以JavaScript数组作为参数调用远程方法
hellosendList(args sendListCb);
}
function sendListCb(data){
documentgetElementById(show)innerHTML = data;
}
//—————调用发送无泛型限制的集合——————–
function sendBeanListNoGeneric(){
//创建JavaScript数组
var args = [ {name:客户端aaa} {name:客户端bbb} {name:客户端ccc} ];
//Java方法需要List参数以JavaScript数组作为参数调用远程方法
hellosendListNoGeneric(args sendListCb);
}
//—————调用发送Map的方法————————
function sendBeanMap(){
//创建JavaScript对象
var args = { first:{name:客户端aaa} second:{name:客户端bbb} third:{name:客户端ccc}
};
//Java方法需要Map参数以JavaScript对象作为参数调用远程方法
hellosendMap(args sendMapCb);
}
function sendMapCb(data){
documentgetElementById(show)innerHTML = data;
}
webxml文件
<?xml version=″ encoding=GBK?>
<webapp xmlns= xmlns:xsi=instance xsi:schemaLocation= app__xsd version=″> <!– 配置DWR的核心Servlet –> <servlet>
<!– 指定DWR核心Servlet的名字 –>
<servletname>dwrinvoker</servletname>
<!– 指定DWR核心Servlet的实现类 –>
<servletclass>orgdirectwebremotingservletDwrServlet</servletclass>
<!– 指定DWR核心Servlet处于调试状态 –>
<initparam> <paramname>debug</paramname> <paramvalue>true</paramvalue> </initparam> </servlet>
<!– 指定核心Servlet的URL映射 –>
<servletmapping> <servletname>dwrinvoker</servletname>
<!– 指定核心Servlet映射的URL –>
<urlpattern>/dwr/*</urlpattern> </servletmapping></webapp>
客户端处理类
package comlbxdwrsimplefunction;
import javautilList;
import javautilArrayList;
import javautilMap;
import javautilHashMap;
public class HelloDwr {
// 第一个简单的hello方法
public String hello(String name) {
return name + 您好!您已经开始了DWR的学习之旅祝您学得开心…;
}
// 使用一个JavaBean作为参数的方法
public String sendObj(Person p) {
return pgetName() + 您好!您已经学会了使用JavaBean参数…;
}
// 返回JavaBean实例的方法
public Person getBean(String name) {
return new Person(name);
}
// 返回一个普通的Java对象Cat对象为其属性提供setter和getter方法
public Cat getObject(String name) {
return new Cat(服务器端 + name);
}
// 返回一个集合对象
public List<Person> getPersonList() {
List<Person> result = new ArrayList<Person>();
resultadd(new Person(集合aaaa));
resultadd(new Person(集合bbbb));
resultadd(new Person(集合cccc));
return result;
}
// 返回一个数组对象
public Person[] getPersonArray() {
Person[] result = new Person[];
result[] = new Person(数组aaaa);
result[] = new Person(数组bbbb);
result[] = new Person(数组cccc);
return result;
}
// 返回一个Map对象
public Map<String Person> getPersonMap() {
// 创建一个Map对象
Map<String Person> result = new HashMap<String Person>();
// 填充Map对象的内容
resultput(first new Person(Map aaaa));
resultput(second new Person(Map bbb));
resultput(third new Person(Map cccc));
// 返回Map
return result;
}
// 远程方法的参数是集合
public String sendList(List<Person> pl) {
String result = ;
for (Person p : pl) {
result += pgetName() + <br />;
}
return result;
}
// 远程方法的参数是不带泛型的集合
public String sendListNoGeneric(List pl) {
String result = ;
for (Object p : pl) {
result += ((Person) p)getName() + <br />;
}
return result;
}
// 远程方法的参数是集合
public String sendMap(Map<String Person> pmap) {
String result = ;
for (String key : pmapkeySet()) {
result += 键 + key + 其值为 + pmapget(key)getName() + <br />;
}
return result;
}
}
Person类
package comlbxdwrsimplefunction;
public class Person{
//私有属性
private String name;
public Person() {}
//构造器
public Person(String name) {
thisname = name;
}
//name属性的setter方法
public void setName(String name) {
thisname = name;
}
//name属性的getter方法
public String getName() {
return name;
}
}
Cat类
package comlbxdwrsimplefunction;
public class Cat {
//Cat类的私有属性
private String name;
//构造器
public Cat(String name) {
thisname = name;
}
}
dwrxml文件的配置
<?xml version=″ encoding=GBK?>
<!– 指定DWR配置文件的DTD等信息 –>
<!DOCTYPE dwr PUBLIC //GetAhead Limited//DTD Direct Web Remoting //EN ><!– DWR配置文件的根元素是dwr –><dwr> <allow>
<!– 使用new关键资创建一个Java实例 指定创建的JavaScript对象名为hello–>
<create creator=new javascript=hello>
<!– 使用class属性指定创建该Java实例的实现类 –>
<param name=class value=/> </create>
<!– 对leePerson类使用Bean转换器 –>
<convert converter=bean match=comlbxdwrsimplefunctionPerson/>
<!– 对leeCat使用Object转换器 –>
<convert converter=object match=comlbxdwrsimplefunctionCat>
<!– 指定force=true强制使用反射访问私有属性 –> <param name=force value=/> </convert> </allow> <signatures>
<![CDATA[ import javautilList; import comlbxdwrsimplefunctionHelloDwr; import comlbxdwrsimplefunctionPerson; HelloDwrsendListNoGeneric(List<Person>); ]]> </signatures></dwr>
客户端html代码
<!DOCTYPE html PUBLIC //WC//DTD XHTML Transitional//EN transitionaldtd>
<html xmlns=>
<head>
<title>DWR入门</title>
<meta name=website content= />
<meta httpequiv=ContentType content=text/html; charset=UTF″ />
<!– 导入DWR为hello对象动态生成的JavaScript代码库 –>
<script type=text/javascript src=> </script>
<!– 导入DWR引擎的核心JavaScript代码库 –>
<script type=text/javascript src=></script>
<!– 导入开发者为本应用编写的JavaScript代码库 –>
<script type=text/javascript src=></script>
</head>
<body>
<h> DWR入门 </h>
请输入您的名字
<input id=name name=name type=text /> <br />
<input type=button value=发送简单请求 onclick=sendMessage(); />
<input type=button value=发送对象参数 onclick=sendObject(); />
<input type=button value=返回JavaBean onclick=getBean(); /> <br />
<input type=button value=返回Object onclick=getObject(); />
<input type=button value=返回Bean集合 onclick=getBeanList(); />
<input type=button value=返回Bean数组 onclick=getBeanArray(); /> <br />
<input type=button value=返回Bean Map onclick=getBeanMap(); />
<input type=button value=发送Bean集合 onclick=sendBeanList(); />
<input type=button value=发送不带泛型限制的Bean集合 onclick=sendBeanListNoGeneric(); /> <br />
<input type=button value=发送Bean Map onclick=sendBeanMap(); />
<hr />
下面是服务器的回应: <br />
<div id=show></div>
</body>
</html>