首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

DWR(Direct Web Remoting)js调用java步骤

2012-10-30 
DWR(Direct Web Remoting)js调用java方法DWR(Direct Web Remoting)是一个用于改善web页面与java类交互的远

DWR(Direct Web Remoting)js调用java方法
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.javapackage lynn; public class User {                // 登陆ID,主键唯一        private String id;        // 姓名        private String name;        // 口令        private String password;        // 电子邮件        private String email;//各属性的get和set方法... ...UserDAO.javapackage 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" name="code"><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。

热点排行