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能让在server端的java代码和浏览器client的javascript代码尽可能简单的相互调用。

DWR is Easy Ajax for Java!

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

 

 

一、 环境搭建

1. 新建webproject。

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本身提供了一个測试环境,能够直接运行server端函数中的方法。

    当中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里面的方法。


DWR入门实例(二)的更多相关文章

  1. Eclipse插件开发_学习_02_GEF入门实例

    一.前言 这一节,我们将会创建一个GEF入门实例 二.新建RCP项目 1. New 一个 Plug-in Project 2.输入项目名 项目名:com.ray.gef.helloworld 3.Co ...

  2. mybatis 详解(二)------入门实例(基于XML)

    通过上一小节,mybatis 和 jdbc 的区别:http://www.cnblogs.com/ysocean/p/7271600.html,我们对 mybatis有了一个大致的了解,下面我们通过一 ...

  3. 无废话ExtJs 入门教程二十一[继承:Extend]

    无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...

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

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

  5. CMake入门(二)

    CMake入门(二) 最后更新日期:2014-04-25 by kagula 阅读前提:<CMake入门(一)>.Linux的基本操作 环境: Windows 8.1 64bit英文版.V ...

  6. Asp.Net MVC2.0 Url 路由入门---实例篇

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  7. Bootstrap入门(二十八)JS插件5:工具提醒

    Bootstrap入门(二十八)JS插件5:工具提醒 工具提示在使用过程中比较常见,但是实现起来有些麻烦,而bootstrap则很好地解决了这个问题. 我们来写一个简单的实例 先引入CSS文件和JS文 ...

  8. Bootstrap入门(二十三)JS插件1:模态框

    Bootstrap入门(二十三)JS插件1:模态框 1.静态实例 2.动态实例 3.模态框的尺寸和效果 4.包含表单的模态框 模态框经过了优化,更加灵活,以弹出对话框的形式出现,具有最小和最实用的功能 ...

  9. Apache Mina入门实例

    一.mina是啥 ApacheMINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的 ...

随机推荐

  1. Spring实战笔记2---Bean的装配

    创建应用对象之间协作关系的行为通常成为装配,该篇的主要内容有两个,一个Spring装配Bean的几种方式以及Spring表达式,事实上这两者是分不开的,在Spring中,对象无需自己负责查找或者创建与 ...

  2. TP 控制器扩展_initialize方法实现原理

    参考网址:http://gongwen.sinaapp.com/article-59.html 控制器扩展接口 系统Action类提供了一个初始化方法_initialize接口,可以用于扩展需要,_i ...

  3. 软考之CPU的寻址方式

    在复习软考的时候,发现CPU的内部工作原理这一部分的内容挺重要的,现对CPU的寻址方式进行了一下总结.以下就来一一介绍一下. 我们都知道一个指令分为操作码和地址码两部分.操作码确定指令的类型.地址码确 ...

  4. Java equals 和 hashcode 方法

    问题 面试时经常会问起字符串比较相关的问题, 总结一下,大体是如下几个: 1.字符串比较时用的什么方法,内部实现如何? 2.hashcode的作用,以及重写equal方法,为什么要重写hashcode ...

  5. pygame系列_箭刺Elephant游戏

    这个游戏原名为:Chimp,我们可以到: http://www.pygame.org/docs/tut/chimp/ChimpLineByLine.html 获取到源码和详细的源码讲解 下面是我对游戏 ...

  6. maven 打包 时出现非法字符: /65279错误

    maven 打包 时出现非法字符: /65279错误 碰到的一个问题: 使用下面的命令给工程打包时, maven mvn clean package -Ptest01 -Dmaven.test.ski ...

  7. Spring中Quartz动态设置cronExpression

    字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN- ...

  8. ByteBuffer的allocate和allocateDirect

    在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类.ByteBuffer提供了两种静态实例方式: public stati ...

  9. Node.js : 我只需要一个店小二

    刚刚开始接触Node.js时, google了很多文章,但发现大部分都是泛泛的介绍安装,配置,以及介绍几个小例子 有一种雾里观花的感觉,所以非常困惑,不知道Node.js到底解决了什么问题,它的优势到 ...

  10. NET 分布式架构开发项目实战

    .NET 分布式架构开发项目实战 从头到尾,一步一步讲述一个真实的项目实战,关注点主要是架构的思考和实现,以及如何解决平时项目遇到的一些问题. 同时也司公布源代码. 如何构建高性能,稳定SOA应用之- ...