DWR(Direct Web Remoting)

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

DWR 3.0 入门示例教程的更多相关文章

  1. Omnet++ 4.0 入门实例教程

    http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用. ...

  2. [转] Struts2入门示例教程

    原文地址:http://blog.csdn.net/wwwgeyang777/article/details/19078545/ 回顾Struts2的使用过程,网上搜的教程多多少少都会有点问题,重新记 ...

  3. surging+CentOS7+docker+rancher2.0 入门部署教程

    准备工作 开发环境  Visual Studio 2017 15.5 运行环境  虚拟机CentOS 7+Docker+Rancher 2.0+Consul+RabbmitMQ 项目下载地址  htt ...

  4. TensorFlow入门示例教程

    本部分的代码目前都是基于GitHub大佬非常详细的TensorFlow的教程上,首先给出链接: https://github.com/aymericdamien/TensorFlow-Examples ...

  5. haproxy2.0入门部署教程

    测试后发现,haproxy2.0和之前的版本部署有些许差异,配置文件的写法也是不同的 测试环境:Centos7.3 IP:172.16.1.227 172.16.1.228 部署httpd,页面内容为 ...

  6. jsf2入门视频 教程

    jsf2.0 入门视频 教程   需要的看下.初次录视频.还有很多需要完善. JSF交流QQ群84376982 JSF入门视频下载地址  http://pan.baidu.com/s/1jG3y4T4 ...

  7. Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1

    摘要: Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1 安装遇到问题请文末留言. 悦动智能公众号:aibbtcom AI这个概念好像突然就 ...

  8. Solr7.3.0入门教程,部署Solr到Tomcat,配置Solr中文分词器

    solr 基本介绍 Apache Solr (读音: SOLer) 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现.Apache ...

  9. 《VC++ 6简明教程》即VC++ 6.0入门精讲 学习进度及笔记

    VC++6.0入门→精讲 2013.06.09,目前,每一章的“自测题”和“小结”三个板块还没有看(备注:第一章的“实验”已经看完). 2013.06.16 第三章的“实验”.“自测题”.“小结”和“ ...

随机推荐

  1. 皆在FPGA之外

    最近做电力方面的项目,由于跨行业,所以很长一段时间都在做前期准备工作. 项目设计前应尽量做到面面俱到,否则会在项目设计中遇到下面大概率问题: 性能不满足需求,然后为了提升性能,资源又成了瓶颈: 功能设 ...

  2. 使用GDI+保存带Alpha通道的图像

    带Alpha通道的图像(ARBG)在通过GDIPlus::Bitmap::FromHBITMAP等转为GDI+位图,再存储时,透明区域会变成纯黑(也有可能是纯白?).   网上找了两段保持透明的实现代 ...

  3. idea 类注释,方法注释设置

    类头注释:打开file->setting->Editor->Filr and Code Templates->Includes->File Header 直接在右边的文件 ...

  4. 【转】Jmeter之短板以及建议解决方案

    随着JMeter的应用,发现JMeter的局限性越来越多,急需进一步扩展改进. 一.几百兆的sample 日志解析出现OutOfMemory 最近的几个项目都是Java sample 日志,应用都是高 ...

  5. Oracle通过JDBC插入数据时,自增ID如何自动增长

    一.通过触发器的方式 CREATE OR REPLACE TRIGGER tg_test BEFORE INSERT ON Userinfo FOR EACH ROW WHEN (new.userNo ...

  6. Linux上面缺少rz和sz命令

    一.centos系统没有自带rz/sz命令 yum install lrzsz 搞定! 二.对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / ...

  7. 网络 、osi 七层模型、tcp/ip 五层参考

    网络 网络的本质就是通讯,比特传输 网络拓扑 物理布局pc -- 交换机 -- 路由器逻辑布局pc -- 路由器 交换机的产生 网络之初,是通过网线互相连通到各个主机,存在的问题就是2个pc都要与服务 ...

  8. hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

    1.接入U盘,看输出打印信息并分析 (1)输出信息 自动创建设备节点 (2)用ls命令查看 这里/dev/sda表示整个U盘,/dev/sda1表示这个U盘的第一个分区. (3)手动挂载,查看文件,手 ...

  9. 【nose入门】环境搭建

    http://blog.sina.com.cn/s/blog_65a8ab5d0101fihb.html 主要分为四个模块 一 环境搭建 二 demo测试 三 参数说明 四 注意事项 一  环境搭建 ...

  10. java根据pdf模版动态生成pdf

    java根据pdf模版动态生成pdf package com.utils; import java.io.ByteArrayOutputStream; import java.io.File; imp ...