DWR(Direct Web Remoting)js调用java方法

本文介绍了一个使用DWR(Direct Web Remoting)实现的示例项目,包括配置web.xml、创建User和UserDAO类、配置dwr.xml、编写HTML页面以及DWR与Spring的整合过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DWR(Direct Web Remoting)是一个用于改善web页面与java类交互的远程服务器端Ajax开源框架。(JavaScript访问java类中的方法)

1. 配置web.xml
<!-- 配置dwr处理器 -->
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>


2. 完成需要被调用的类,即被调用者
User.java

package lynn;



public class User {



// 登陆ID,主键唯一

private String id;

// 姓名

private String name;

// 口令

private String password;

// 电子邮件

private String email;

//各属性的get和set方法

... ...

UserDAO.java

package lynn;



import java.util.HashMap;

import java.util.Map;



public class UserDAO {

// 存放保存的数据

private static Map<String, User> dataMap = new HashMap<String, User>();



// 持久用户

public boolean save(User user) {

if (dataMap.containsKey(user.getId()))

return false;

System.out.println("下面开始保存用户");

System.out.println("id:" + user.getId());

System.out.println("password:" + user.getPassword());

System.out.println("name:" + user.getName());

System.out.println("email:" + user.getEmail());

dataMap.put(user.getId(), user);

System.out.println("用户保存结束");

return true;

}



// 查找用户

public User find(String id) {

return (User) dataMap.get(id);

}

}


3.配置dwr.xml
<?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="DWRUserAccess">

<param name="class" value="lynn.DWRUserAccess" />

</create>



<convert converter="bean" match="lynn.User" />

</allow>

</dwr>


1)<allow>标签中包括可以暴露给javascript访问的东西。

2)<create>标签中指定javascript中可以访问的java类,并定义DWR应当如何获得要进行远程的类的实例。

creator="new"属性指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获得实例,其他的还有spring方式,通过与IOC容器Spring进行集成来获得实例等等。javascript=" DWRUserAccess"属性指定javascript代码访问对象时使用的名称,即所要生产的js的名称,必须与html中导入的js名称一致。

<param>标签指定要公开给javascript的java类名。

<include>标签指定要公开给javascript的方法。不指定的话就公开所有方法。

<exclude>标签指定要防止被访问的方法。

3)<creator>标签负责公开用于Web远程的类和类的方法,<convertor>标签则负责这些方法的参数和返回类型。

convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript之间如何转换数据类型。DWR自动地在Java和JavaScript表示之间调整简单数据类型。这些类型包括Java原生类型和它们各自的封装类表示,还有String、Date、数组和集合类型。DWR也能把JavaBean转换成JavaScript 表示,但是出于安全性的原因,要求显式的配置,<convertor>标签就是完成此功能的。converter="bean"属性指定转换的方式采用JavaBean命名规范,match="lynn.user"属性指定要转换的javabean名称,标签指定要转换的JavaBean属性。

4.完成html,即调用者
test.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE>DWR测试</TITLE>

<meta http-equiv=Content-Type content="text/html; charset=gb2312">

<script src="dwr/engine.js"></script>

<script src="dwr/util.js"></script>

<script src="dwr/interface/DWRUserAccess.js"></script>

</HEAD>

<SCRIPT LANGUAGE="JavaScript">

function saveFun(data) {

if (data) {

alert("注册成功!");

} else {

alert("登陆ID已经存在!");

}

}



function OnSave() {



var userMap = {};

userMap.id = regForm.id.value;

userMap.password = regForm.password.value;

userMap.name = regForm.name.value;

userMap.email = regForm.email.value;

DWRUserAccess.save(userMap, saveFun);

}



function findFun(data) {

if (data == null) {

alert("无法找到用户:" + queryForm.id.value);

return;

}

alert("找到用户,nid:" + data.id + ",npassword:" + data.password + ",nname:"

+ data.name + ",nemail:" + data.email);

}



function OnFind() {

DWRUserAccess.find(queryForm.id.value, findFun);

}

</SCRIPT>

<BODY>

<B>用户注册</B>

<br>

------------------------------------------------

<Br>

<form name="regForm">

登陆ID:

<input type="text" name="id">

<br>

口 令:

<input type="password" name="password">

<br>

姓 名:

<input type="text" name="name">

<br>

电子邮件:

<input type="text" name="email">

<br>

<input type="button" name="submitBtn" value="提交" onclick="OnSave()">

<br>

</form>



<br>

<br>

<B>用户查询</B>

<br>

------------------------------------------------

<Br>

<form name="queryForm">

登陆ID:

<input type="text" name="id">

<br>

<input type="button" name="submitBtn" value="提交" onclick="OnFind()">

<br>

</form>

<br>

</BODY>

</HTML>


1)必须导入

<script src="dwr/engine.js"></script>

<script src="dwr/util.js"></script>

<script src="dwr/interface/DWRUserAccess.js"></script>

其中engine.js和util.js都在dwr-2.0.3-src.zip的java/org/dwrwebremoting/目录下。DWRUserAccess.js是自动生产的,注意路径必须是*/interface/*.js。

2)调用java方法

function saveFun(data) {

if (data) {

alert("注册成功!");

} else {

alert("登陆ID已经存在!");

}

}



function OnSave() {



var userMap = {};

userMap.id = regForm.id.value;

userMap.password = regForm.password.value;

userMap.name = regForm.name.value;

userMap.email = regForm.email.value;

DWRUserAccess.save(userMap, saveFun);

}


DWR组件名称.调用的java方法名称(方法参数,方法的返回值)

5.DWR和Spring的整合
需要更改的地方:

1)Web.xml中添加

<!--初始化WebApplicationContext-->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>

/WEB-INF/applicationContext.xml

</param-value>

</context-param>

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>


注意applicationContext.xml的路径

2)applicationContext.xml中配置bean

<bean id="DWRUserAccess" class="lynn.DWRUserAccess"></bean>

3)修改dwr.xml

<dwr>

<allow>

<create creator="spring" javascript="DWRUserAccess">

<param name="beanName" value="DWRUserAccess" />

</create>



<convert converter="bean" match="lynn.User" />

</allow>

</dwr>


creator的值可以是new、spring、struts。

<param>标签配置被调用的bean。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值