`
ctojxzsycztao
  • 浏览: 78689 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

DWR 初始,返回字符串&对象&列表与SPRING集成处理,带实例(CTO)

    博客分类:
  • DWR
阅读更多

DWR(全称:Direct Web Remoting)是一个JavaEE模型的一个AJAX框架,通过配置和指定回调JavaScript函数并可直接调用服务端后台业务方法,

并得到是一个WEB远程调用框架.利用DWR框架可以让AJAX开发变得更加简单.DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返

回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR3.0添加许多特性如:支持Dom

Trees的自动配置,支持Spring(通过配置可直接远程调用,从Spring Bean中获取业务对象),更好浏览器支持,还支持一个可选的commons-

logging日记操作.

该项目主页:http://www.getahead.ltd.uk/dwr/
目前该项目的正式版3.0以发布,可以到些去选择需要的版本进行下载:
http://directwebremoting.org/dwr/download.html
有了包那么下面我们来实现一个简单的例子来说明在实际应用中的方法,首先我按四大步来划分
1、调用服务端后台业务对象返回字符串
2、调用服务端后台业务对象并返回一个 Bean 对象
3、调用服务端后台业务对象返回列表
4、与SPRING进行集成,并同时实现以上3项同样业务
实现部分:
新建一个WEB工程,将下载的dwr.jar拷到项目的lib目录中,能后在WEB-INF目录下新建一个dwr.xml 文件,在web.xml 中添加一个DWR的请求控制

,接下来我会对dwr.xml中进行配置生成业务对象方式,我将不会加以注释详细说明,详细说明我将放在文章的最后面

<servlet>
	<servlet-name>dwr</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</servlet-name>
	<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

 再添加一个Users.java

package com.dwrtest.service;

/**
 * <p>
 * 创 建 人:ChenTao
 * <p>
 * 创建日期:2009-5-26 上午9:04:44
 * <p>
 */
public class Users {
	
	private Integer userId;
	
	private String userName;
	
	private String password;
	
	//get... set... 方法略
}

 上面二个文件在全局中都会使用到,下面声明将不对这二个文件描述
好了我们先来实现第一步:
一、返回字符串
先新建一个Dao.java

package com.dwrtest.dao.impl;

import java.util.ArrayList;
import java.util.List;

import com.dwrtest.dao.IDao;
import com.dwrtest.service.Users;

public class Dao implements IDao{
	
	public String login1(String userName, String password) {
		if("ctojxzsycztao".equals(userName) && "ctojxzsycztao".equals(password)){
			return "登录成功!";
		}
		return "登录失败!";
	}
}

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

package com.dwrtest.service;

import com.dwrtest.dao.IDao;
import com.dwrtest.dao.impl.Dao;

/**
 * <p>
 * 创 建 人:ChenTao
 * <p>
 * 创建日期:2009-5-26 上午09:38:51
 * <p>
 */
public class DwrService {

	private IDao dao = new Dao();

	public IDao getDao() {
		return dao;
	}

	public void setDao(IDao dao) {
		this.dao = dao;
	}
	public String login1(String userName,String password){
		return dao.login1(userName, password);
	}
}

 修改dwr.xml 文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
<dwr>
	<allow>
		<create creator="new" javascript="dwrService">
			<param name="class" value="com.dwrtest.service.DwrService"/>
		</create>
	</allow>
</dwr>

 最后创建一个dwrStr.jsp

<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Dwr Test</title>
	<script type="text/javascript" src="dwr/util.js"></script>
	<script type="text/javascript" src="dwr/engine.js"></script>
	<script type="text/javascript" src="dwr/interface/dwrService.js"></script>
	<script type="text/javascript">
		<!--\\
		function login(){
		     dwrService.login1(document.getElementById("userName").value,document.getElementById

("passWord").value,cellBackStr);
		}

		// 处理返回的字符串
		function cellBackStr(str){
			DWRUtil.setValue("div",str);
		}
		-->
	</script>
	<style type="text/css">
	<!--
		.FONT{font-size : 12px;}
	-->
	</style>
  </head>
  <body>
  <div id="div" class="FONT"></div>
     <table border=0 class="FONT">
     	<tr>
     		<td class="FONT">userName:</td>
		<td class="FONT"><input type="text" id="userName" name="userName"></td>
     	</tr>
     	<tr>
     		<td class="FONT">passWord:</td>
		<td class="FONT"><input type="text" id="passWord" name="passWord"></td>
     	</tr>
     	<tr>
     		<td colspan=2>
     			<input type="button" value="login" onclick="login();">
     		</td>
     	</tr>
     </table>
  </body>
</html>

 
大家看到上面的实现和配置都非常简单,易懂、易学,现在我们来看下第二步

二、返回Bean对象

首先在 Dao.java 与 DwrService.java文件中添加一个方法 login2
Dao.java 中的 login2 方法

public Users login2(String userName, String password) {
	if ("ctojxzsycztao".equals(userName) && "ctojxzsycztao".equals(password)) {
		Users users = new Users();
		users.setUserId(1);
		users.setUserName("chentao");
		users.setPassword("chentao");
		return users;
	}
	return null;
}

 DwrService.java 中的login2方法

public Users login2(String userName, String password) {
	return dao.login2(userName, password);
}

 同样需要修改 dwr.xml 文件,修改后的内容如下:

<dwr>
	<allow>
		<create javascript="dwrService" creator="new">
			<param name="class" value="dwrService" />
		</create>
		<convert converter="bean" match="com.dwrtest.service.Users">
			<param name="include" value="userId,userName,password"/>
		</convert>
	</allow>
</dwr>

 最后再抒写一个 dwrBean.jsp 文件:

<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Dwr Test</title>
	<script type="text/javascript" src="dwr/util.js"></script>
	<script type="text/javascript" src="dwr/engine.js"></script>
	<script type="text/javascript" src="dwr/interface/dwrService.js"></script>
	<script type="text/javascript">
		<!--\\
		function loginRObject(){
			dwrService.login2(document.getElementById("userName").value,document.getElementById

("passWord").value,cellBackBean);
		}

		// 处理返回的实体对象
		function cellBackBean(bean){
			DWRUtil.setValue("div","用户名:"+bean.userName+"\n 密  码:"+bean.password);
		}
		-->
	</script>
	<style type="text/css">
	<!--
		.FONT{
			font-size : 12px;
		}
	-->
	</style>
  </head>
  <body>
  <div id="div" class="FONT"></div>
     <table border=0 class="FONT">
     	<tr>
     		<td class="FONT">userName:</td>
		<td class="FONT"><input type="text" id="userName" name="userName"></td>
     	</tr>
     	<tr>
     		<td class="FONT">passWord:</td>
		<td class="FONT"><input type="text" id="passWord" name="passWord"></td>
     	</tr>
     	<tr>
     		<td colspan=2>
     			<input type="button" value="login" onclick="loginRObject();">
     		</td>
     	</tr>
     </table>
  </body>
</html>

 运行下看看吧!
三、返回列表对象
同样我们先来修改Dao.java 和 DwrService.java 二个文件添加方法 listByUsersAll:
Dao.java:

public List<Users> listByUsersAll() {
	List<Users> list = new ArrayList<Users>();
	Users users = new Users();
	users.setUserId(1);
	users.setUserName("chentao");
	users.setPassword("chentao");
	list.add(users);
	users = new Users();
	users.setUserId(2);
	users.setUserName("chen");
	users.setPassword("chen");
	list.add(users);
	return list;
}

 DwrService.java:

public List<Users> listByUsersAll() {
 return dao.listByUsersAll();
}

 同样修改dwr.xml 文件:

<dwr>
 <allow>
  <create javascript="dwrService" creator="new">
   <param name="class" value="dwrService" />
  </create>
  <convert converter="bean" match="com.dwrtest.service.Users">
   <param name="include" value="userId,userName,password"/>
  </convert>
 </allow>
 <signatures>
  <![CDATA[ 
   import java.util.List;
   import com.dwrtest.service.DwrService;
   import com.dwrtest.service.Users;
  ]]>
 </signatures>
</dwr>

 
同样需要写一个JSP来显示 dwrList.jsp

<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Dwr Test</title>
	<script type="text/javascript" src="dwr/util.js"></script>
	<script type="text/javascript" src="dwr/engine.js"></script>
	<script type="text/javascript" src="dwr/interface/dwrService.js"></script>
	<script type="text/javascript">
		<!--\\
		function rList(){
			dwrService.listByUsersAll(cellBackList);
		}
		// 处理返回的列表对明
		function cellBackList(list){
			var div = document.getElementById("div");
			var str = "";
			str = "<table>";
			str += "<tr><td class='FONT'>用户ID</td><td class='FONT'>用户名</td><td class='FONT'>密码</td</tr>";
			for(var i in list){
				var bean = list[i];
				str += "<tr><td class='FONT'>"+bean.userId+"</td><td class='FONT'>"+bean.userName+"</td><td 

class='FONT'>"+bean.password+"</td</tr>";
			}
			str += "</table>";
			div.innerHTML = str;
		}
		-->
	</script>
	<style type="text/css">
	<!--
		.FONT{
			font-size : 12px;
		}
	-->
	</style>
  </head>
  <body>
  	<div id="div" class="FONT"></div>
     	<input type="button" value="返回列表" onclick="rList();">
  </body>
</html>

 实现基本上以完成:运行下看看吧!
四、与SPRING集成
接下来我将来介绍下与SPRING集成的一些方法:我们首先需要加入SPRING LIB 到工程目录下,在 MyEclipse 中可直接添加SPRING环境,修改

DwrService.java 中的 Dao 创建方式:

private IDao dao;

public IDao getDao() {
	return dao;
}

public void setDao(IDao dao) {
	this.dao = dao;
}

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-

beans-2.0.xsd">
	<bean id="dao" class="com.dwrtest.dao.impl.Dao">
	</bean>
	<bean id="dwrService" class="com.dwrtest.service.DwrService">
		<property name="dao" ref="dao"></property>
	</bean>
</beans>

 最后需要修改dwr.xml:修改后的dwr.xml如下:

<dwr>
	<allow>
		<!-- creator指明为该实体由spring来创建, param 则指向的是applicationContext.xml 的的 bean id -->
		<create javascript="dwrService" creator="spring">
			<param name="beanName" value="dwrService" />
		</create>
		<convert converter="bean" match="com.dwrtest.service.Users">
			<param name="include" value="userId,userName,password"/>
		</convert>
	</allow>
	<signatures>
		<![CDATA[ 
			import java.util.List;
			import com.dwrtest.service.DwrService;
			import com.dwrtest.service.Users;
		]]>
	</signatures>
</dwr>

 可以看到修改后的dwr.xml 与前面的有所不同 在 create 元素中属性creator值改成spring ,参数param 也改为了 beanName,下面就着重来介

绍下该文件:
dwr:为配置文件的根元素
allow:该元素中包含了暴露给javascript访问的东西
create:标签中指定javascript中可以访问的java类,并定义DWR应当如何获得要进行远程的类的实例。
 creator="new"属性指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获得实例,
 其他的还有spring方式,通过与IOC容器Spring进行集成来获得实例等等。
 javascript="dwrService"表示实体转换成javascript语言后以这个来命名,页面中可以通过该名进行引用
 <param>标签指定要公开给javascript的java类名。
 <include>标签指定要公开给javascript的方法。不指定的话就公开所有方法。
 <exclude>标签指定要防止被访问的方法。

convert:<creator>标签负责公开用于Web远程的类和类的方法,
 <convertor>标签则负责这些方法的参数和返回类型。
 convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript之间如何转换数据类型。
 DWR自动地在Java和JavaScript表示之间调整简单数据类型。这些类型包括Java原生类型和它们各自的封装类表示,
 还有String、Date、数组和集合类型。DWR也能把JavaBean转换成JavaScript 表示,但是出于安全性的原因,
 要求显式的配置,<convertor>标签就是完成此功能的。converter="bean"属性指定转换的方式采用JavaBean命名规范,
 match="com.dwrtest.service.Users"属性指定要转换的javabean名称,<param>标签指定要转换的JavaBean属性。
singnatures:标签是用来声明java方法中List、Set或者Map参数所包含的确切类,以便java代码作出判断。

在JSP中使用时需要先对dwr提供的二个JS和生成的一个JS进行引用

 <script type="text/javascript" src="dwr/util.js"></script>
 <script type="text/javascript" src="dwr/engine.js"></script>
 <script type="text/javascript" src="dwr/interface/dwrService.js"></script>

  其中 dwrService.js 为引用由DWR通过配置生成的JS文件

 

下面附带示例程序源代码,有需要的可以下载看看

分享到:
评论

相关推荐

    DWR 初始,返回字符串&对象&列表

    在DWR中,"返回字符串&对象&列表"是指DWR接口可以处理多种类型的数据返回。下面将详细介绍DWR如何处理这些不同类型的数据: 1. **返回字符串**: 在DWR中,如果你的Java方法返回一个字符串,这个字符串会直接在...

    DWR示例与spring集成

    - **Spring集成示例**:说明如何配置DWR与Spring的集成,以及如何在JavaScript中调用Spring的Bean。 通过理解并实践这些示例,开发者可以更好地掌握DWR的使用,并将其应用于实际的Web应用中,实现高效、便捷的前后...

    DWR与SPRING 集成

    标题 "DWR与SPRING 集成" 涉及到的是两个在Web开发中常用的开源框架——Direct Web Remoting (DWR) 和 Spring。DWR允许在浏览器和服务器之间进行实时、异步的数据交换,而Spring是Java企业级应用的全面解决方案,...

    dwr+spring实例

    综上所述,"DWRSpring实例"是一个很好的学习资源,可以帮助我们理解DWR如何与Spring框架集成,以及如何在实际项目中实现动态的、基于Ajax的Web应用。通过研究和实践这个例子,开发者可以提升自己在构建富互联网应用...

    dwr与spring集成的方式

    ### dwr与spring集成的方式 #### 一、引言 DWR(Direct Web Remoting)是一种简化Ajax开发的Java框架,允许在客户端直接调用服务器端的Java方法,从而简化了传统的JavaScript编程复杂度。Spring作为一款流行的企业...

    Spring与DWR集成

    **Spring与DWR集成** Spring框架是Java领域中极为重要的轻量级应用框架,它提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、事务管理等,用于简化企业级应用开发。Direct Web Remoting (DWR) 是一个开源...

    Spring DWR配置实例

    5. **Spring与DWR集成**:Spring提供了与DWR集成的便捷方式,例如使用`SpringDWRController`,它可以自动处理Spring bean到DWR的映射。你也可以自定义控制器来更精细地控制这个过程。 6. **JavaScript使用**:DWR...

    dwr+spring集成配置

    **DWR(Direct Web Remoting)与Spring框架的集成配置** DWR(Direct Web Remoting)是一个开源的Java库,允许在Web应用程序中实现Ajax功能,使得JavaScript可以直接调用服务器端的Java方法,实现了浏览器与服务器...

    dwr与spring整合

    通过上述步骤,我们可以实现DWR与Spring的无缝集成,使得前端能够便捷地调用后端的业务逻辑,提高应用的交互性和响应速度。同时,Spring的管理功能可以帮助我们更好地组织和维护代码,提升项目的可维护性。

    dwr+hibernate+spring 集成 实例

    本实例探讨的是Direct Web Remoting (DWR)、Hibernate和Spring三大技术的集成应用。这三者都是Java世界中的明星组件,各自在不同领域发挥着重要作用。 DWR是一款开源的JavaScript库,它允许Web应用程序在客户端和...

    Spring 集成 Dwr 文件上传

    将Spring与Dwr集成,可以实现强大的客户端与服务器端交互,特别是在处理文件上传和下载功能时,这种集成尤为重要。 文件上传功能在Web应用中非常常见,如用户上传个人头像、提交文档等。传统的HTTP协议不支持文件的...

    Spring与DWR结合

    **Spring与DWR结合** Spring框架是Java领域中广泛使用的轻量级应用框架,它提供了依赖注入、面向切面编程、事务管理等核心功能,帮助开发者构建可维护性高、可扩展性强的企业级应用程序。而Direct Web Remoting ...

    关于dwr2与spring2集成

    `SpringContextLoader`则是连接Spring和DWR的桥梁,它使得DWR可以访问Spring的应用上下文,从而找到并实例化需要暴露给客户端的Java对象。 以下是一个基本的Spring配置示例: ```xml &lt;bean id="dwrConfig" class=...

    dwr和spring集成简单例子

    将DWR与Spring集成,可以方便地实现富客户端应用,提高用户体验。 在这个"Dwr和Spring集成简单例子"中,我们将探讨如何将这两个强大的工具结合在一起,以便在Web应用中创建动态、交互性强的用户界面。 首先,我们...

    DWR与SPRING,DWR与STRUTS2的整合

    1. **配置DWR Spring集成**:在Spring配置文件中定义DWR相关的bean,如`DWRConfig`和`SpringContextUtil`,以便让DWR能够访问Spring的bean。 2. **Spring托管的Java类暴露给JavaScript**:通过Spring的`@Service`或...

    Spring与DWR集成教程

    在本文中,我们将深入探讨Spring与DWR集成的原理、配置过程以及实际应用。 首先,DWR是一个Java EE框架,它使得JavaScript能够与服务器进行异步交互,仿佛在本地执行函数一样。DWR的核心机制是通过Servlet监听特定...

    dwr经典实例(9个常用实例)

    10. **集成框架**: DWR可以很好地与Spring、Struts等主流Java Web框架集成,提供更强大的功能。 9个经典实例可能包括以下内容: - 基本的AJAX调用:展示如何使用DWR进行简单的服务器端方法调用。 - 实时数据显示:...

    将dwr集成到spring mvc(dwr的配置是基于xml)

    在Spring MVC框架中集成DWR,可以进一步提升用户体验,因为Spring MVC专注于处理控制器逻辑,而DWR则负责客户端与服务器之间的通信。 集成DWR到Spring MVC的过程主要包括以下几个步骤: 1. **引入依赖**:首先,你...

    DWR+Spring下拉框联动实例

    **DWR+Spring 下拉框联动实例** DWR(Direct Web Remoting)是一个开源的Java框架,它使得JavaScript和服务器端的Java代码可以进行实时交互,实现AJAX(Asynchronous JavaScript and XML)功能,而无需编写复杂的...

    dwr2.0 spring 3.0 整合示例

    在这个"DWR 2.0 Spring 3.0 整合示例"中,我们将探讨如何将DWR与Spring框架集成,以实现高效的前后端交互。整合DWR和Spring的主要目标是利用Spring的管理能力来处理DWR的bean,同时利用DWR的动态JavaScript生成能力...

Global site tag (gtag.js) - Google Analytics