DWR(Direct Web Remoting)

来源:互联网 发布:淘宝商家怎么发快递的 编辑:程序博客网 时间:2024/06/05 14:53

DWR is a Java library that enables Java on the server and JavaScript in a browser to interact and call each other as simply as possible.

Dwr能让在服务器端的java代码和浏览器客户端的javascript代码尽可能简单的相互调用。

DWR is Easy Ajax for Java!

 官网:http://directwebremoting.org/dwr/index.html

 

 

一、 环境搭建

1. 新建web工程。

2. 从官网下载dwr3.0 rc2,也是当前最新版本,并引入类路径。

3. dwr依赖于logging.jar,也需要引入类路径下面。

4. 配置web.xml如下:

复制代码
   <servlet>        <servlet-name>dwr-invoker</servlet-name>        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>        <init-param>            <param-name>debug</param-name>            <param-value>true</param-value>        </init-param>    </servlet>    <servlet-mapping>        <servlet-name>dwr-invoker</servlet-name>        <url-pattern>/dwr/*</url-pattern>    </servlet-mapping>
复制代码

5. 新建一个java类,代码如下:

复制代码
package com.yokoboy.dwr.service;public class DwrDemo {    public String getHello(String name) {        return name + " 你好!";    }}
复制代码

 

6. 在web.xml 同目录下面新建dwr.xml,代码如下:

复制代码
<?xml version="1.0" encoding="UTF-8"?>  <dwr>    <allow>        <!--配置的一个演示类,javascript="Demo" 表示可以在页面中用Demo这个名称指向DwrDemo这个java类,类中的方法可以在前台调用 -->        <!-- creater="new"表示每调用一次时,都需要new一个 -->        <create creator="new" javascript="Demo">            <param name="class" value="com.yokoboy.dwr.service.DwrDemo" />        </create>                <!-- java类库类 -->        <create creator="new" javascript="MyDate">            <param name="class" value="java.util.Date" />        </create>        <!-- 测试阶段使用,运营阶段不要使用 -->        <!-- convert元素用于数据类型转换,即java类和javascript之间相互转换 -->        <convert converter="exception" match="java.lang.Exception" />        <convert converter="bean" match="java.lang.StackTraceElement" />    </allow></dwr>  
复制代码

6. 新建MyDwr.jsp文件,代码如下:

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%    String path = request.getContextPath();    String basePath = request.getScheme() + "://"            + request.getServerName() + ":" + request.getServerPort()            + path + "/";%><!DOCTYPE HTML><html><head><base href="<%=basePath%>"><title>Dwr Demo</title><script type='text/javascript' src='${pageContext.request.contextPath}/dwr/engine.js'></script><script type='text/javascript' src='${pageContext.request.contextPath}/dwr/util.js'></script><script type='text/javascript' src='${pageContext.request.contextPath}/dwr/interface/Demo.js'></script><script type='text/javascript' src='${pageContext.request.contextPath}/js/jquery1.8.js'></script><script type="text/javascript">    //此函数中可以调用java类的方法,除了java方法本身的参数外,还要将回调函数名作为参数传给java方法      function sayHello(name) {        Demo.getHello(name, dwrHandler);    }    //这是dwr的一个回调函数,data参数即java方法getHello(String name)的返回值      function dwrHandler(data) {        alert(data);    }</script></head><body>    <input>    <button onclick="sayHello($('input').val());">提交</button><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%    String path = request.getContextPath();    String basePath = request.getScheme() + "://"            + request.getServerName() + ":" + request.getServerPort()            + path + "/";%><!DOCTYPE HTML><html><head><base href="<%=basePath%>"><title>Dwr Demo</title><script type='text/javascript' src='${pageContext.request.contextPath}/dwr/engine.js'></script><script type='text/javascript' src='${pageContext.request.contextPath}/dwr/util.js'></script><script type='text/javascript' src='${pageContext.request.contextPath}/dwr/interface/Demo.js'></script><script type='text/javascript' src='${pageContext.request.contextPath}/js/jquery1.8.js'></script><script type="text/javascript">    //此函数中可以调用java类的方法,除了java方法本身的参数外,还要将回调函数名作为参数传给java方法      function sayHello(name) {        Demo.getHello(name, dwrHandler);    }    //这是dwr的一个回调函数,data参数即java方法getHello(String name)的返回值      function dwrHandler(data) {        alert(data);    }</script></head><body>    <input>    <button onclick="sayHello($('input').val());">提交</button></body></html>
复制代码

其中用到了jquery,需要自行导入。

 

发布网站,访问MyDwr.jsp即可查看效果!

 

二、说明

 1. 查看jsp源代码,最上面引入了几个js文件,实际上是不存在的,不用考虑它们在哪儿。

 2. 其中engine.js和util.js是固定的。另外的一个js的名称就是dwr.xml中配置的类名。
   这些js的路径基本是:app_root/dwr/....模式的,一定要写对。

3. 访问 “app_root/dwr” ,这是dwr本身提供了一个测试环境,可以直接执行服务器端函数中的方法。

    其中MyDate里面的函数是java.util.Date类里面的方法。

4. 打开web.xml 文件。里面配置了一个servlet,“url-pattern”配置的是“/dwr/*”,所以拦截所有已dwr开头的请求。
    url-pattern”如果改成了/ddd/*,页面中都需吧dwr该成ddd

5. 再看dwr.xml文件(这个文件名不能改,必须是dwr),里面“create了两个javascript”,再看源代码中,确实使用Demo作为实例来引用             com.yokoboy.dwr.service.DwrDemo里面的方法。 

 

参考:

  http://www.cnblogs.com/cyjch/archive/2012/02/16/2353758.html

0 0
原创粉丝点击