首先在项目WEB-INF/web.xml下添加dwr的servlet,把dwr.jar包放到classpath下
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<!--debug参数为true当启动项目访问http://localhost:8080/[YOUR-WEBAPP]/dwr/生成测试方法-->
<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>
配置dwr.xml文件(配置一个后台被调用的类(多个方法)和一个自己的javabean convert)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting
2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<allow>
<!--
creator属性是必须的,常用的值有new和static
new :用new关键字创建服务器端(remote)java对象,这时java对象必须提供有一个无参构造函数
static:用静态方法‘getInstance()’获得class实例
javascript属性也是必须的,会根据java class在浏览器端生成js相应的对象,所以避免使用js关键字
-simple demo
<create javascript="jdate" creator="new">
<param name="class" value="java.util.Date" />
</create>
如上配置,如果在客户端调用jdate.getDay(),则会在服务器端调用java.util.Date类的getDay()方法
-->
<create creator="new" javascript="firstDemo" scope="page">
<!--
param:class,指定要远程调用的java类全路径
当creator为static时,可以配置param:instanceMethodName指定获取实例的方法(default是‘getInstance’)
-->
<param name="class" value="com.cao.dwr.FirstDemo" />
<include method="sayHello,getUser,addUser,arrayInfo,intArrayInfo,list" />
</create>
<!--
convert元素是dwr的主要工作部分,负责client和server的数据转换
1.当java方法调用结束时,需要将java了的return type映射成客户端JavaScript
可以接受的对象
2.当客户端发出请求时,需要将JavaScript的参数类型转换成对应的java类型参数
dwr对于大多数类型(primitives,string,simple objects)都已经内置好了,
你不需要在用<convert>进行配置,
在默认情况下就可以使用,具体配置在dwr.jar包的org.directwebremoting/dwr.xml配置文件中,内容如下
基本类型
<convert converter="primitive" match="boolean"/>
<convert converter="primitive" match="byte"/>
<convert converter="primitive" match="short"/>
<convert converter="primitive" match="int"/>
<convert converter="primitive" match="long"/>
<convert converter="primitive" match="float"/>
<convert converter="primitive" match="double"/>
<convert converter="primitive" match="char"/>
简单类
<convert converter="primitive" match="java.lang.Boolean"/>
<convert converter="primitive" match="java.lang.Byte"/>
<convert converter="primitive" match="java.lang.Short"/>
<convert converter="primitive" match="java.lang.Integer"/>
......
常用类
<convert converter="string" match="java.lang.String"/>
<convert converter="date" match="java.util.Date"/>
<convert converter="date" match="java.sql.Date"/>
<convert converter="date" match="java.sql.Time"/>
<convert converter="date" match="java.sql.Timestamp"/>
<convert converter="date" match="java.util.Calendar"/>
<convert converter="url" match="java.net.URL"/>
数组(看不懂)
<convert converter="array" match="[Z"/>
<convert converter="array" match="[B"/>
<convert converter="array" match="[S"/>
......
集合
<convert converter="collection" match="java.util.Collection"/>
<convert converter="map" match="java.util.Map"/>
dom(应该不常用)
<convert converter="dom" match="org.w3c.dom.Node"/>
<convert converter="dom" match="org.w3c.dom.Element"/>
......
servlet(这些servlet对象,客户端js是访问不到的,但是在服务端java
类方法中存在如下类型的参数,
同样可以获取servlet对象,js不用传递该参数)
<convert converter="servlet" match="javax.servlet.ServletConfig"/>
<convert converter="servlet" match="javax.servlet.ServletContext"/>
<convert converter="servlet" match="javax.servlet.http.HttpServletRequest"/>
<convert converter="servlet" match="javax.servlet.http.HttpServletResponse"/>
<convert converter="servlet" match="javax.servlet.http.HttpSession"/>
很多类型转换器都已经存在了,我们配置转换器的时候一般是
在转换我们自己写的bean的时候,经常用到。
match属性指定需要转换的类,converter指定转换器类型,javascript属性在客户端对应的js对象
配置转换器就是为了对传递的参数进行转换,如在client端生成一个js对象
var x = new userBean();x.uname='xx';x.age=20;
把x当做参数传递,到后台就会封装成com.cao.dwr.UserBean的
一个实例对象
-->
<convert match="com.cao.dwr.UserBean" converter="bean" javascript="userBean">
<!-- include可以调用的bean方法 -->
<param name="include" value="uname,age"></param><!-- exclude -->
</convert>
</allow>
</dwr>
后台被调用的类
public class FirstDemo {
public String sayHello(String name){
System.out.println("first dwr invoke");
return "Hello,"+name;
}
//模拟根据id查询内容,返回一个java bean对应到页面为一个js对象
public UserBean getUser(String id){
System.out.println("用户id:"+id);
UserBean user = new UserBean();
user.setUname("bird");
user.setAge(22);
user.setBirth(new Date());
return user;
}
//从页面获取一个对象bean信息
public String addUser(UserBean usr){
String usrInfo = usr.getUname()+" "+usr.getAge()+" "+usr.getBirth();
System.out.println(usrInfo);
return "add success";
}
//获取StringArray参数
public String[] arrayInfo(String[] arr){
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
return arr;
}
//获取intArray参数,并返回该int[]转换成js的数组
public int[] intArrayInfo(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
return arr;
}
//获取集合参数,指定泛型位一个bean,再返回js的数组
public List<UserBean> list(List<UserBean> list){
for(int i=0;i<list.size();i++){
//System.out.println(((UserBean)list.get(i)).getAge());
System.out.println(list.get(i).getUname());
}
return list;
}
}
测试页面(hello.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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'hello.jsp' starting page</title>
<!-- engine.js和util.js一般都引入,可以通过访问
http://localhost:8080/[YOUR-WEBAPP]/dwr/获取
-->
<script type='text/javascript' src='/Test/dwr/engine.js'></script>
<script type='text/javascript' src='/Test/dwr/util.js'></script>
<!-- fistDemo.js是对应后台类的一个js,在dwr.xml中配置 -->
<script type='text/javascript' src='/Test/dwr/interface/firstDemo.js'></script>
<!-- 引入jquery操作方便 -->
<script type='text/javascript' src='/Test/js/jquery-1.3.2.js'></script>
<script type="text/javascript">
function sayHello(){
var name= $("#name").val();
//调用后台的对应类的sayHello方法,参数为输入的
firstDemo.sayHello(name,function(data){
alert(data);
})
}
$(function(){
$("#checkUser").click(function(){
var uid = $("#uid").val();
firstDemo.getUser(uid,function(data){
//返回的对象为一个js对象,因为convert中配置javascript=“user”可以用该对象接受
var user = data;
alert(user.age);
})
})
})
$(function(){
$("#addUser").bind("click",function(){
var usr = new userBean();
usr.uname="bird";
usr.age="23";
usr.birth = new Date();
//传递一个js对象根据配置的bean convert会被转换成对应的javabean
firstDemo.addUser(usr,function(data){
alert(data);
})
})
})
$(document).ready(function(){
$("#strArr").click(function(){
var myArr = ['hello','world'];//传递数组
firstDemo.arrayInfo(myArr,function(data){
for(var i=0;i<data.length;i++){
alert(data[i]);
}
})
})
})
$(document).ready(function(){
$("#intArr").click(function(){
var myArr = [1,2];
firstDemo.intArrayInfo(myArr,function(data){
for(var i=0;i<data.length;i++){
alert(data[i]);
}
})
})
})
$(document).ready(function(){
$("#list").click(function(){
var u1 = new userBean();
u1.uname='one';
u1.age=20;
//用来测试集合,因为对应的js没有集合类型,用数组代替
var myArr = [u1,{uname:'two',age:20}];
firstDemo.list(myArr,function(data){
for(var i=0;i<data.length;i++){
alert(data[i].uname);
}
})
})
})
</script>
</head>
<body>
<form action="">
用户名:<input type="text" name="name" id="name">
<button onclick="sayHello()" >say hello </button>
<hr>
<p>获取用户信息</p>
用户id:<input type="text" id="uid" name="uid" /><button id="checkUser">查询用户信息</button>
<br><hr>
<button id="addUser">添加用户</button>
<button id="strArr">字符串数组</button>
<button id="intArr">整型数组</button>
<button id="list">list集合</button>
<div id="domContainor"></div>
</form>
</body>
</html>
分享到:
相关推荐
在"Dwr demo - Dwr简单使用"这个项目中,你可以通过以下步骤了解和学习DWR的基本用法: 1. **环境准备**:首先确保你有Eclipse IDE,并且已经安装了Java Development Kit (JDK)。由于DWR是一个Java库,所以你需要一...
在这个"DWR Demo"中,我们将会探讨如何使用DWR框架来处理和展示常见的数据结构,如List、Set和Map。 首先,让我们深入了解DWR的核心功能。DWR允许Java方法直接被JavaScript调用,就像它们是本地函数一样,无需手动...
NULL 博文链接:https://plane.iteye.com/blog/337379
这个"**dwr demo 反向推送 导向推送**"是一个示例项目,展示了如何利用DWR来实现反向推送技术,也称为服务器推送。这种技术允许服务器主动地将数据推送到客户端,而不需要客户端不断地发起请求。 在传统的HTTP协议...
DWRDemo.rar_DEMO_dwr Demo是一个关于DWR的实际应用示例,它可以帮助我们理解DWR的工作原理和如何在项目中集成DWR。 **1. DWR的基本概念** DWR的核心是远程方法调用(Remote Method Invocation, RMI),但它是在Web...
DWR(Direct Web Remoting)是一个web远程调用框架,利用这个框架可以让AJAX变得很简单,通过DWR可以在客户端通过JavaScript直接调用服务器的Java方法并返回值给JavaScript,整个过程就好像通过本地客户端调用一样,...
在这个“dwr demo ajax”项目中,我们可能找到了一个关于如何使用DWR实现Ajax功能的示例。 首先,`pom.xml`是Maven项目的配置文件,它定义了项目的依赖关系和构建设置。在这个项目中,`pom.xml`可能会包含DWR库和...
在"DWR Demo Src"这个压缩包中,包含了DWR的示例源代码,这些代码可以帮助开发者理解和学习如何在实际项目中应用DWR。以下是一些关键的知识点: 1. **DWR的基本概念**: - **Remoting**:DWR的核心功能是远程调用...
下面是对DWR及其在`dwr_demo_test`中的应用进行的详细解释。 1. **DWR的基本概念**: DWR的核心功能是提供一种安全、高效的机制,让JavaScript可以调用Java对象的方法。这涉及到几个关键组件: - **Reverse AJAX*...
DWR(Direct Web Remoting)是一个Java库,用于在Web应用程序中实现实时的客户端-服务器通信。这个"DWRDemo.rar"是一个包含DWR框架应用示例的压缩包,主要展示了如何利用DWR来实现页面的异步刷新功能,以及一个简单...
在这个"**dwr实现的服务器推demo**"中,我们看到一个实例,展示了如何利用DWR的技术来实现实时的、无需刷新的服务器推送功能。 服务器推是一种技术,它允许服务器主动地将数据发送到客户端,而不需要客户端(通常是...
**DWR(Direct Web Remoting)修正Demo版** DWR是一种开源JavaScript库,它允许Web应用程序在客户端和服务器之间进行实时通信,无需刷新页面。DWR使得开发人员能够轻松地在浏览器中调用服务器端的Java方法,就像...
使用Spring集成struts2、ibatis、poi实现的增删改查功能,包括采用jquery实现的无刷新查询机分页、dwr实现的两级联动、以及采用poi动态将数据库数据导出成excel,本demo采用mysql数据库,附有建表sql,项目导入...
这个"一个简单DEMO"是关于如何使用DWR在实际项目中实现功能的示例。在这个DEMO中,我们可以期待学习到以下几个关键知识点: 1. **DWR的基本概念**:DWR允许JavaScript直接调用服务器端的Java方法,使得Web应用能够...
在"**dwr-demo**"项目中,我们可以通过以下几个关键知识点来理解DWR的工作原理和应用: 1. **配置DWR**: 在Java项目中集成DWR通常需要在`web.xml`文件中配置DWR的servlet,例如`DWRServlet`。配置包括设置映射路径...
### Spring使用Annotation整合DWR知识点解析 #### 一、概览 在现代Web开发中,Direct Web Remoting(简称DWR)是一种简化Ajax应用开发的技术,它允许JavaScript直接调用服务器端的Java方法,而无需编写复杂的XML...
**DWR(Direct Web Remoting)框架学习指南** DWR,全称为Direct Web Remoting,是一种在Web应用程序中实现客户端与服务器端之间直接通信的技术。它允许JavaScript在浏览器端直接调用Java方法,实现了真正的Ajax...
这个“ajax的dwr框架的一个简单的demo”是一个示例项目,用于展示如何在Web应用程序中集成DWR以实现异步数据通信。 在Java开发中,DWR提供了方便的API,使得JavaScript可以调用服务器端的Java方法,而无需传统的...
通过这个简单的DWR demo,你可以学习到如何设置DWR环境,编写可被JavaScript调用的Java方法,以及在客户端进行调用的JavaScript代码编写。这将帮助你理解DWR的工作原理,并为构建更复杂的交互式Web应用打下基础。