`

Dwr入门

    博客分类:
  • DWR
阅读更多

 

DWR Direct Web Remoting )是一个用于改善 Web 页面与 Java 类交互的远程服务器端 Ajax 开源框架, DWR 可以动态生成基于 Java 类的 JavaScript 代码,对于公开的每个类, DWR 帮我们做好了创建对象、发送数据、接受响应等许多繁琐的工作,大大节省了客户端代码和工作量。比如它可以将 java 程序中的某个 XxxBus 转换成 js 中的一个对象,并将 XxxBus 中的某个方法如 getXXX() 转换成 js 中的一个名为 XxxBus.getXXX() function 。同时,它可以将 java 中的值对象或其它数据包转换成 js 中的对象。

Ok ,来用 DWR 做一个 Demo

1 、首先我们需要下载 Dwr.jar ,同时因为 DWR 需要 commons logging.jar ,所以最终我们需要在 web/lib 下放入 dwr.jar commons-logging-1.0.4.jar

2 、将 Dwr 注册到 Web 容器中去,在 web.xml 中添加配置

	<!-- 配置DWR的核心Servlet -->
	<listener>
		<listener-class>org.directwebremoting.servlet.DwrListener</listener-class>
	</listener>
	<servlet>
		<!-- 指定DWR核心Servlet的名字 -->
		<servlet-name>dwr-invoker</servlet-name>
		<!-- 指定DWR核心Servlet的实现类 -->
		<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
		<!-- 指定DWR核心Servlet处于调试状态,一般部署设为false -->
		<init-param>
			<param-name>debug</param-name>
			<param-value>true</param-value>
		</init-param>
		<!-- 设置使用反向Ajax技术 -->
		<init-param>
			<param-name>activeReverseAjaxEnabled</param-name>
			<param-value>true</param-value>
		</init-param>
		<init-param>
			<param-name>jsonpEnabled</param-name>
			<param-value>true</param-value>
		</init-param>
		<!-- DWR2.0 加入了JDK5的注释(annotations).DwrServlet初始化的时候会去检查注释的类,找不到就抱错了。如果你不用annotations也可以忽略掉这个错误。不过看起来总是不爽。解决方案如下 -->
		<init-param>
			<param-name>classes</param-name>
			<param-value>java.lang.Object</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- 指定核心Servlet的URL映射 -->
	<servlet-mapping>
		<servlet-name>dwr-invoker</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>
 

 

3 、创建 dwr 配置文件( dwr.xml ,和 web.xml 同级)

         这个配置文件主要规定了 DWR 能够创建和转换的类

<!DOCTYPE dwr PUBLIC
    "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">

<dwr>

	<!-- allow部分定义了DWR能够创建和转换的类。 -->
	<!-- 每一个在类中被调用的方法需要一个<create …>有若干类型的creator,使用“new”关键字或者Spring 框架等。 -->
	<!-- new:Java用“new”关键字创造对象,是DWR默认的creator -->
	<allow>
		<!--dwr3提供的一个日志审核过滤器 -->
		<filter class="org.directwebremoting.filter.AuditLogAjaxFilter" />

		<!--在浏览器里给你创建的对象命名。避免使用JavaScript保留字。这个名字将在页面里作为js被导入 -->
		<create creator="new" javascript="service">
			<param name="class" value="com.iflytek.dwr.AjaxService" />
			<!-- exclude表示不包含sayHello,include表示包含-->
			<!-- <exclude method="sayHello" /> -->
		</create>
		<!-- 如果你在参数中传入JAVASCRIPT中的是一个对象类型,则需要转换成javascript支持的Bean类型 -->
		<convert converter="exception" match="java.lang.Exception" />
		<convert converter="bean" match="java.lang.StackTraceElement" />
	</allow>

</dwr>
 

 

注意上面的 create createor 指定的为 new ,则该类下必须要有一个无参的构造方法。

match 用于告诉 DWR 你将需要把 Java 中的哪些类转换成 JS

 

构建一个实体类 User.java

package com.iflytek.dwr;

import java.util.Date;

/**
 * @author xudongwang 2011-11-30
 * 
 *         Email:xdwangiflytek@gmail.com
 * 
 */
public class User {

	private String name = "";
	private int age;
	private Date[] appointments;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Date[] getAppointments() {
		return appointments;
	}

	public void setAppointments(Date[] appointments) {
		this.appointments = appointments;
	}

}

 后台java代码AjaxService.java

package com.iflytek.dwr;

/**
 * @author xudongwang 2011-11-29
 * 
 *         Email:xdwangiflytek@gmail.com
 * 
 */
public class AjaxService {
	public AjaxService() {
		System.out.println("执行构造方法");
	}

	public String sayHello(String yourName) {
		// 可以是访问数据库的复杂代码
		return "欢迎使用DWR应用示例,您输入的用户名为: " + yourName;
	}

	public String IsUsing(String yourName) {
		return "IsUsing方法" + yourName;
	}


	public User user = new User();

	public void doSomethingWithUser(User user) {
		System.out.println("dddddd");
		this.user = user;
		// Some Java code that does something with User user.
		System.out.println("进入到doSomethingWithUser方法里");
		System.out.println(user.getName() + "---" + user.getAge());
	}
}
 

前台代码dwr.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">


<title>DWR3.0Demo</title>
<!-- jsp文件中必须引入几个js,它们都是隐含存在的,不用考虑它们在哪儿。其中engine.js和util.js是固定的。另外的一个js的名称就是dwr.xml中配置的类名。这些js的路径基本是:app_root/dwr/....模式的,一定要写对。 -->
<script src="dwr/interface/service.js"></script>
<script src="dwr/util.js"></script>
<script src="dwr/engine.js"></script>

<script type="text/javascript">
	function firstDwr() {
		//callBackHello用来callBack返回的数据
		service.sayHello(document.myform.user.value, callBackHello1);

	}
	//这样可以指定一些额外的调用选项如指定超时,错误处理等
	function secondDwr() {
		service.IsUsing(document.myform.user.value, {
			callback : function(str) {
				alert(str);
			},
			timeout : 5000,
			errorHandler : function(message) {
				alert("Oops:" + message);
			}
		});
	}
	//关于回调函数的说明

	/* 	如果第一个或最后一个是一个函数,那么它就是回调函数,没有元数据对象,并且其他参数都是Java的方法参数。
	  另外,如果最后一个参数是一个对象,这个对象中有一个callback成员,并且它是个函数,那么这个对象就是元数据对象,其他的都是Java方法参数。
	  另外,如果第一个参数是 null ,我们就假设没有回调函数,并且其他的都是Java方法参数。尽管如此,我们会检查最后一个参数是不是null,如果是就发出警告。
	  最后如果最后一个参数是null,那么就没有callback函数。
	  另外,发出错误信号是个糟糕的请求格式。 */

	function callBackHello1(data) {
		alert(data);
	}
	function thirdDwr() {
		var myUser = {
			name : "Fred Bloggs",
			age : 42,
			appointments : [ new Date(), new Date("1 Jan 2008") ]
		};
		service.doSomethingWithUser(myUser);
	}
</script>
</head>
<body>
	<form name="myform">
		<input type="text" name="user"> <input type="button"
			name="button" value="方法1_简单的回调函数" onclick="firstDwr()"> <input
			type="button" name="button" value="方法2_调用元数据对象" onclick="secondDwr()">
		<input type="button" name="button"
			value="Creating JavaScript objects to match Java objects"
			onclick="thirdDwr()">
	</form>
</body>
</html>

 

 

以上只是简单说了一下 Dwr ,做到能够明白 Dwr 是个什么玩意,以后在项目中实践过,再做深入总结。

 

 

 

 

分享到:
评论

相关推荐

    Dwr入门操作手册Dwr

    Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr...

    dwr入门 dwr学习资料

    DWR(Direct Web Remoting)是一...通过学习这套DWR入门资料,你将能够熟练地使用DWR创建动态、交互性强的Web应用,提高开发效率,同时提升用户体验。实践中不断探索,理论与实战相结合,将助你在Web开发领域更进一步。

    dwr API dwr入门教程

    在DWR入门教程中,首先会介绍DWR的基本概念和工作原理。DWR的核心是将Java方法暴露给JavaScript,通过在服务器端创建一个称为"逆向Ajax"的通道,使得JavaScript能够调用远程服务器上的Java方法。这个过程涉及到几个...

    DWR中文文档 dwr入门 dwr.jar

    **DWR入门步骤:** 1. **引入依赖**:首先,你需要在项目中添加dwr.jar到类路径中,这将包含所有DWR运行所需的类和库。 2. **配置DWR**:在Web应用的Web-INF目录下创建dwr.xml配置文件,设置允许的远程接口和方法...

    DWR+dwr入门手册

    在"DWR+dwr入门手册"中,你将深入了解到以下几个核心知识点: 1. **DWR的基本概念**:DWR的核心是Remoting Engine,它负责在客户端JavaScript和服务器端Java之间建立通信通道。DWR提供了一套API,包括`dwr.engine`...

    DWR入门例子(一个很好的dwr入门例子)

    在这个"DWR入门例子"中,我们将深入探讨如何使用DWR进行服务器和客户端之间的数据交换。 1. **DWR基本概念** - **反向AJAX**: DWR的核心理念是反向AJAX,即由服务器主动向客户端推送数据,而不仅仅是响应客户端的...

    软件工程DWR入门教程.docx

    软件工程 DWR 入门教程 DWR(Direct Web Remoting)是一种基于 Java 的远程方法调用技术,它允许在 Web 应用程序中将 Java 对象作为远程服务暴露给客户端,客户端可以通过 Ajax 调用这些服务。下面是 DWR 入门教程...

    STRUT2 DWR 入门STRUT2 DWR 入门STRUT2 DWR 入门STRUT2 DWR 入门

    STRUT2 DWR入门教程 DWR(Direct Web Remoting)是一种开源JavaScript库,它允许在Web应用程序中实现Ajax功能,使用户界面更加动态和交互性更强。与STRUT2框架结合使用,DWR可以为Java后端提供简单且高效的远程方法...

    Dwr入门操作手册

    《DWR入门操作手册》深度解析与实践指南 一、DWR配置与使用基础 DWR,全称为Direct Web Remoting,是一种使Java对象能够直接从JavaScript调用的技术,简化了Ajax开发流程,使得前后端交互更为直接和高效。本文档...

    Dwr入门操作手册及dwr包

    **DWR(Direct Web Remoting)入门操作手册及DWR包** DWR,全称Direct Web Remoting,是一个...通过深入学习"Dwr入门操作手册"并实践使用"dwr.jar",你可以掌握如何利用DWR构建交互性更强、用户体验更好的Web应用。

    最完整的DWR入门文档及DWR使用案例

    这个“最完整的DWR入门文档及DWR使用案例”包含的资源无疑将帮助你深入理解和高效使用DWR。 首先,DWR的核心功能是提供了一种跨域的通信机制,使得前端JavaScript可以直接调用后端Java方法,就像操作本地函数一样,...

    Ajax的DWR入门例子

    3. **DWR入门步骤**: - **准备环境**:首先,需要下载DWR的jar包,如dwrc.jar,将其放入项目的lib目录下。 - **创建Web项目**:创建一个新的Web项目,例如名为sayHello。 - **编写Java类**:创建一个名为...

    DWR入门程序(1.0和3.0版本的测试工程)

    在"DWR入门程序--计算两个数之和及包含页面的例子(使用1.0版本).rar"中,我们可以看到一个简单的例子,展示了如何使用DWR 1.0进行数据交互。这个例子可能包括一个HTML页面,该页面包含一个JavaScript函数,该函数...

    dwr入门例子 返回list

    在“dwr入门例子 返回list”这个主题中,我们将深入探讨如何使用DWR从服务器返回列表数据到客户端。列表通常包含多个项目,如数据库查询结果,这些数据可以在网页上以表格或其他形式展示给用户。DWR提供了方便的方法...

    dwr实例 - dwr入门 本人开发的:小游戏 大家一起来赚钱

    DWR入门涉及以下几个关键知识点: 1. **配置DWR**:首先,你需要在项目中集成DWR,这通常包括在`web.xml`中配置DWR的Servlet,以及在项目的类路径下创建`dwr.xml`配置文件,用于声明暴露给JavaScript的Java类和方法...

    dwr入门资料,简单入门,让你轻松掌握dwr

    在"**dwr入门资料,简单入门,让你轻松掌握dwr**"的资源中,你可以期待学习到以下关键知识点: 1. **DWR的基本概念**:理解DWR的核心概念,如Remoting、Reverse Ajax和Caching,以及如何通过DWR实现浏览器与服务器...

    DWR入门教程及实例(含源代码)

    本教程“DWR入门教程及实例(含源代码)”旨在帮助初学者快速掌握DWR的基本概念和使用方法。教程内容可能包括以下几个核心知识点: 1. **DWR概述**:讲解DWR的基本理念,如何通过HTTP协议实现JavaScript与Java之间...

    个人编写的一份dwr入门源代码

    这份"个人编写的一份dwr入门源代码"是针对初学者设计的,通过五个简单示例帮助理解DWR的基本用法和功能。 1. **DWR简介**:DWR简化了AJAX开发,通过自动处理跨域问题和JSON/JavaScript对象转换,使得前端可以像调用...

    DWR入门教程之HelloWorld

    在本“DWR入门教程之HelloWorld”中,我们将逐步学习如何搭建一个简单的DWR应用,体验其基本功能。首先,我们需要了解以下关键组件: 1. **配置DWR**: 在Web应用程序的`web.xml`文件中,我们需要添加DWR的Servlet...

Global site tag (gtag.js) - Google Analytics