DWR入门
- 格式:doc
- 大小:64.00 KB
- 文档页数:6
DWR调用方式1. 什么是DWRDWR(Direct Web Remoting)是一个开源的Java框架,用于简化在Web应用程序中使用Ajax技术。
它提供了一种简单的方式来将Java代码暴露给JavaScript,并使得在客户端和服务器之间进行远程通信变得更加容易。
DWR允许开发人员通过直接调用服务端的Java方法来处理客户端的请求,而无需编写大量的JavaScript代码来处理网络通信。
这使得开发人员可以更专注于业务逻辑,而无需过多关注底层的网络细节。
2. DWR调用方式DWR提供了多种方式来进行远程调用,包括:2.1. 代理方式(Proxy)代理方式是最常见和推荐的一种DWR调用方式。
通过代理对象,我们可以直接调用服务端的Java方法,并将结果返回给客户端。
在客户端,我们需要首先创建一个代理对象,该对象负责与服务端进行通信。
我们可以使用dwr.engine命名空间下的Proxy对象来创建代理对象,并指定要调用的Java类和方法。
var proxy = new dwr.engine.Proxy();proxy.setRemoteClass(MyService);proxy.setRemoteMethod('myMethod');在上述代码中,MyService是服务端中定义的Java类,myMethod是该类中的一个方法。
然后,我们可以使用代理对象来调用服务端的方法,并处理返回的结果。
proxy.myMethod(param1, param2, {callback: function(result) {// 处理返回结果},errorHandler: function(message) {// 处理错误信息}});在上述代码中,param1和param2是传递给服务端方法的参数。
callback函数用于处理返回结果,而errorHandler函数则用于处理错误信息。
2.2. 反向Ajax方式(Reverse Ajax)反向Ajax方式是一种特殊的DWR调用方式,它允许服务端主动推送数据给客户端。
有两种方法开始DWR,简单的方式是下载WAR文件然后看看。
但是这不能帮你知道如何轻松的把DWR整合到你的web应用中,所以还是推荐你按照下面的3个步骤做:下载dwr.jar文件。
把它放到你的webapp的WEB-INF/lib目录下。
那里可能已经有很多其他的jar文件了。
需要把下面的代码加到WEB-INF/web.xml文件中。
<servlet>那部分需要和其他的<servlet>在一起,<servlet-mapping>部分也一样。
<servlet><servlet-name>dwr-invoker</servlet-name><display-name>DWR Servlet</display-name><servlet-class>uk.ltd.getahead.dwr.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>在WEB-INF目录下的web.xml旁边创建一个dwr.xml文件。
可以从最简单的配置开始:<!DOCTYPE dwr PUBLIC"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN""/dwr/dwr10.dtd"><dwr><allow><create creator="new" javascript="JDate"><param name="class" value="java.util.Date"/></create><create creator="new" javascript="Demo"><param name="class" value="your.java.Bean"/></create></allow></dwr>DWR配置文件定义了那些DWR会创建提供远程调用的Javascript类。
Dwr学习总结1.首先要导入dwr包。
2.配置web.xml文件,格式如下:其中是用来测试dwr用的,可有可无。
3.在WEB-INF下面建立一个dwr.xml文件。
实例如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "/dwr/dwr20.dtd"><dwr><allow><!-- return String --><create creator="new" javascript="ud" scope="application"> <param name="class" value="ersDAO" /><include method="ifExist"></include></create><!-- return List --><create creator="new" javascript="pd" scope="application"> <param name="class" value="dao.ProductorDAO" /><include method="getAllProByTypeId"></include><include method="getOneProById"></include></create><convert converter="bean" match="bean.Productors"><param name="include" value="pid,proName,proCount" /></convert></allow></dwr>这里主要说下create的配置<create creator="new" javascript="ud" scope="application"><param name="class" value="ersDAO" /><include method="ifExist"></include></create>这是个最简单的配置,其中Creator:属性相当于创建的实例的方法,new 就相当于生成了一个实例对象,Javascript:这个是自定义的,用于在jsp页面中引用。
dwrinvokedataaction 方法详解摘要:1.DWR简介2.dwrinvokedataaction方法概述3.参数详解4.示例代码与应用5.总结与建议正文:一、DWR简介DWR(Direct Web Remoting)是一个基于Java的远程方法调用框架,它允许在不同的Java应用程序之间直接调用方法,而无需共享任何中间对象。
DWR的核心思想是让Java对象直接在客户端运行,从而实现客户端与服务器端的无缝通信。
在本篇文章中,我们将重点介绍dwrinvokedataaction方法,它是DWR中非常重要的一个方法。
二、dwrinvokedataaction方法概述dwrinvokedataaction方法是用于在客户端调用服务器端方法的。
它接收一个Method对象作为参数,该对象包含了服务器端方法的所有信息。
在调用此方法时,DWR会自动将服务器端方法的参数转换为JSON格式,并通过Ajax请求发送到服务器。
同时,DWR还支持返回值的处理,可以将服务器端方法的返回值转换为JSON格式并返回给客户端。
三、参数详解1.Method对象:包含了服务器端方法的所有信息,如方法名、参数类型及参数值等。
2.参数值:可以是任意类型的对象,如基本数据类型、Java对象等。
需要注意的是,如果参数值为Java对象,则需要实现Serializable接口,以便在客户端和服务器之间传输。
3.异常处理:可以通过Throwable对象或Exception对象指定异常处理方式。
如果不需要处理异常,可以设置为null。
4.回调函数:可以设置一个回调函数,当服务器端方法调用成功或失败时,该回调函数会被调用。
回调函数接收一个Object参数,可以返回任何类型的值。
四、示例代码与应用以下是一个简单的示例代码,演示了如何使用dwrinvokedataaction方法调用服务器端方法:```java// 服务器端方法public class Server {public String sayHello(String name) {return "Hello, " + name;}}// 客户端代码public class Client {public static void main(String[] args) {// 创建服务器端对象Server server = new Server();// 调用服务器端方法String result = (String) DWR.invokeDataAction(server, "sayHello", "World");System.out.println(result);}}```在这个示例中,我们创建了一个简单的服务器端方法sayHello,并在客户端使用dwrinvokedataaction方法调用它。
dwr使用教程DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX 开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本 DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-logging日记操作.以上摘自open-open,它通过反射,将java翻译成javascript,然后利用回调机制,轻松实现了javascript调用Java代码。
其大概开发过程如下:1.编写业务代码,该代码是和dwr无关的。
2.确认业务代码中哪些类、哪些方法是要由javascript直接访问的。
3.编写dwr组件,对步骤2的方法进行封装。
4.配置dwr组件到dwr.xml文件中,如果有必要,配置convert,进行java和javascript类型互转。
5.通过反射机制,dwr将步骤4的类转换成javascript代码,提供给前台页面调用。
5.编写网页,调用步骤5的javascript中的相关方法(间接调用服务器端的相关类的方法),执行业务逻辑,将执行结果利用回调函数返回。
6.在回调函数中,得到执行结果后,可以继续编写业务逻辑的相关javascript 代码。
下面以用户注册的例子,来说明其使用。
(注意,本次例子只是用于演示,说明DWR的使用,类设计并不是最优的)。
1.先介绍下相关的Java类User: 用户类,public class User {//登陆ID,主键唯一private String id;//姓名private String name;//口令private String password;//电子邮件private String email;//以下包含getXXX和setXXX方法.......}UserDAO:实现User的数据库访问,这里作为一个演示,编写测试代码public class UserDAO {//存放保存的数据private static Map dataMap = new HashMap();//持久用户public boolean save(User user) {if (dataMap.containsKey(user.getId()))return false;System.out.println("下面开始保存用户");System.out.println("id:"+user.getId());System.out.println("password:"+user.getPassword());System.out.println("name:"+user.getName());System.out.println("email:"+user.getEmail());dataMap.put(user.getId(), user);System.out.println("用户保存结束");return true;}//查找用户public User find(String id) {return (User)dataMap.get(id);}}DWRUserAccess:DWR组件,提供给javascript访问的。
1.1跟我学DWR框架技术——应用DWR框架开发实现多级关联的选择框应用示例在设计数据库查询页面时,下拉菜单是经常使用的元素。
很多时候你会希望选择了下拉菜单的一项后,相应的另一下拉菜单的内容会随之改变。
这种功能可以通过刷新页面来实现,但界面显得不那么友好。
在本文介绍例子中,不需要刷新页面便可达到目的。
当在下拉菜单中选择了一个省份后,另一下拉菜单会出现该省份的一些城市供选择。
下面另外DWR实现“用户名称的实时校验”和“关联的选择框”的表单。
1.1.1构建本示例项目中的相关程序及Web页面1、在项目中再添加一个业务接口(1)提供一个接口CityManageInterface,包名称为com.px1987.dwrexampl.model(2)在该接口中提供下面的方法定义package com.px1987.dwrexampl.model;import java.util.*;public interface CityManageInterface{public boolean checkUserNameValid(String userName);public HashMap getCityNameInfo(String privanceName);}2、为该接口提供一个实现类(1)类名称为CityManageBean,包名称为com.px1987.dwrexampl.model(2)编程CityManageBean程序类该类中的checkUserNameValid方法实现对用户名称进行检查,而getCityNameInfo方法主要是实现根据“省名称”获得其对应的“城市名称”。
package com.px1987.dwrexampl.model;import java.util.HashMap;public class CityManageBean implements CityManageInterface{public CityManageBean(){}public boolean checkUserNameValid(String userName)boolean okOrNot=false;if(userName.equals("yang")) //实际应该改变为对数据库系统的访问{okOrNot=true;}else{okOrNot=false;}return okOrNot;}public HashMap getCityNameInfo(String privanceName){ //实际应该改变为对数据库系统的访问HashMap cityNameHashMap =new HashMap();if (privanceName.equals("beijing")){cityNameHashMap.put("海淀","海淀");cityNameHashMap.put("朝阳","朝阳");cityNameHashMap.put("西城","西城");cityNameHashMap.put("东城","东城");}else if (privanceName.equals("hebei")){cityNameHashMap.put("石家庄", "石家庄");cityNameHashMap.put("邯郸", "邯郸");cityNameHashMap.put("保定", "保定");cityNameHashMap.put("衡水", "衡水");}else if (privanceName.equals("henan"))cityNameHashMap.put("郑州", "郑州");cityNameHashMap.put("驻马店", "驻马店");cityNameHashMap.put("郑州1", "郑州1");cityNameHashMap.put("郑州2", "郑州2");}else if (privanceName.equals("jiangxi")){cityNameHashMap.put("南昌", "南昌");cityNameHashMap.put("九江", "九江");cityNameHashMap.put("景德镇", "景德镇");cityNameHashMap.put("吉安", "吉安");}return cityNameHashMap;}}3、将该JavaBean部署为远程JavaBean以便能够在页面中访问它(1)在我们的dwr-timeBean.xml文件中添加对它的配置项目<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "/dwr/dwr10.dtd"><dwr><allow><create creator="new" javascript="timeInfoJavaBean" scope="application"><param name="class" value="com.px1987.dwrexampl.model.TimeInfoJavaBean"/><include method="getSystemTime"/><include method="setOneTimeInfoVOBean"/></create><create creator="new" javascript="cityManageBean" scope="application"> <param name="class" value="com.px1987.dwrexampl.model.CityManageBean"/><include method="getCityNameInfo"/><include method="checkUserNameValid"/></create><convert converter="bean" match="com.px1987.dwrexampl.model.TimeInfoVOBean"> <param name="include" value="hourText,minuteText,secondText"/> </convert></allow></dwr>(2)编译该项目并再次部署本项目,在浏览器中查看其*.js文件名称:输入http://localhost:8080/DWRWebTest/dwr/index.html然后点击上面的“cityManageBean”的超链接,将出现下面的内容从而获得在页面中对该JavaBean进行远程引用时的*.js文件名称<script type='text/javascript' src='/DWRWebTest/dwr/interface/cityManageBean.js'></script>(3)也可以对我们的业务组件中的方法在线测试1)对checkUserNameValid方法在线测试2)对getCityNameInfo方法在线测试与代码中的实际返回的值保持一致。
Dwr入门操作手册DWR配置和使用设置DWR的使用是简单的:将DWR的jar文件拷入Web应用的WEB-INF/lib目录中,在web.xml中增加一个servlet声明,并创建DWR的配置文件。
DWR的分发中需要使用一个单独的jar文件。
你必须将DWR servlet加到应用的WEB-INF/web.xml 中布署描述段中去。
<servlet><servlet-name>dwr-invoker</servlet-name><servlet-class>uk.ltd.getahead.dwr.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>一个可选的步骤是设置DWR为调试模式—象上面的例子那样—在servlet描述段中将debug参数设为true。
当DWR在调试模式时,你可以从HTMl网页中看到所有的可访问的Java对象。
包含了可用对象列表的网页会出现在/WEBAPP/dwr这个url上,它显示了对象的公共方法。
所列方法可以从页面中调用,允许你,第一次,运行服务器上的对象的方法。
下图显示了调试页的样子:调试页现在你必须让DWR知道通过XMLHttpRequest对象,什么对象将会接收请求。
Dwr框架一般用在企业内部系统比较多,叫你搭建一个简单的dwr项目1.下载dwr的源文件2.新建一个web工程,将dwr用到的jar包都丢在你的lib下面3.配置过滤器,在web.xml里面写上下面的代码(全部copy)<?xml version="1.0"encoding="UTF-8"?><web-app version="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd/dtd/web-app_2_3.dtd"><servlet><servlet-name>dwr-invoker</servlet-name><display-name>DWR Servlet</display-name><description>Direct Web Remoter Servlet</description><servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-clas s><init-param><param-name>debug</param-name><param-value>true</param-value></init-param><init-param><param-name>activeReverseAjaxEnabled</param-name><param-value>true</param-value></init-param><init-param><param-name>initApplicationScopeCreatorsAtStartup</param-name><param-value>true</param-value></init-param><init-param><param-name>maxWaitAfterWrite</param-name><param-value>100</param-value></init-param><init-param><param-name>logLevel</param-name><param-value>warn</param-value></init-param><init-param><param-name>crossDomainSessionSecurity</param-name> <!-- 这个地方<param-value>false</param-value>这样写才不会出现session error的错 --><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dwr-invoker</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file></welcome-file-list></web-app>其中红色部分一定不能少,不然在运行项目的时候会出现session error 错误,自己可以试试。
DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).
一、一个简单的DWR示例。
第一步:拷贝dwr.jar包到项目的lib目录下。
第三步:添加dwr.xml文件
第四步:添加HTML页面。
第一、把java类转化为javascript类由dwr自动完成,只需简单的配置。
第二、应用起来极其简单。
开发者不要改服务器代码就可以集成。
第三、容易测试。
和webwork一样,隐藏的http协议。
第四、及强扩展性。
例如与spring集成,只需修改一点代码。
第五、性能。
就我与jason,等简单比较,dwr性能可能是最好的。
第六、自动把java对象转化为javascript对象,并且及易扩展。
四、再复杂一点,数组里面保存的是一个对象。
这些方法的参数和返回类型。
convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript 之间如何转换数据类型。
DWR自动地在Java和JavaScript表示之间调整简单数据类型。
这些类型包括Java原生类型和它们各自的封装类表示,还有String、Date、数组和集合类型。
DWR也能把JavaBean转换成JavaScript 表示,但是出于安全性的原因,要求显式的配置,<convertor>标签就是完成此功能的。
Converter="bean"属性指定转换的方式采用JavaBean命名规范,
match=""com.dwr.TestBean"属性指定要转换的javabean名称,<param>标签指定要转换的JavaBean属性。