1. 简介
DWR 是Direct Web Remoting 的简称.可以通过脚本直接调用java方法.
和其他代理框架相比,DWR后台严格限制必须以java为后台.
有相当完善的文档支持
网址: http://getahead.ltd.uk/dwr/
2. 环境搭建与配置
1. 从 http://getahead.ltd.uk/dwr/ 下载dwr.jar
2. web.xml 文件中 DWR Servlet的配置
<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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
DWRServlet 的 debug参数的选项:
1.true : 可以通过我们就可以http://server:port/webapp/dwr/ 查看,当前有哪些类可以供javascript调用
2.false :部属到实际应用时记得要设置为false
3. 编写后台的java类
package com.rbi.stady;
public class DwrTestServiceImpl {
public String getMessage(String name){
return "Hello "+name;
}
}
4. DWR配置文件
默认文件: WEB-INF\下的dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="dwrTest">
<param name="class" value="com.rbi.stady.DwrTestServiceImpl" />
</create>
</allow>
</dwr>
5. HTML添加DWR的js和自动生成的后台代码
1.<script type="text/javascript"
src="<%=request.getContextPath()%>/dwr/engine.js"></script>
2.<scripttype="text/javascript" src="<%=request.getContextPath()%>/dwr/interface/dwrTest.js"></script>
6. js的调用
dwrTest.getMessage(‘Jack’,getDataFun)
function getDataFun(data){
…………
}
3. DWR配置文件
1. 类的配置:
1.远程调用类的配置
<create creator="new" javascript="dwrTest" scope="request">
<param name="class" value="com.rbi.stady.DwrTestServiceImpl" />
<include method="checkUser" />
<!--<exclude method="..."/>-->
</create>
<create>标签:
creator (必须项)值范围:new,spring,scripted
1.1x 版本后新增 none, jsf,struts,pageflow
scope (可选项)值范围 : "application", "session"(*1), "request" 和"page"。默认page
<param>标签:
<create>标签为”new”时值为“class” value值为类路径
“spring”时值为“beanName” value值为bean的配置名称
<include>和<exclude>标签:method=”方法名”
有此标签或二者选其一
无: 所有方法都可访问
<include>:此列表的方法可访问,不在其内的不可访问
<exclude>:此列表的方法不可访问,不在其内的可访问
安全上比较好的设计是使用" include "而不是" exclude"。
2.Bean的配置
<convert
converter="bean"
match="example.Fred"/>
<param
name="include"
value="property1, property2"/>
<!--<param
name="exclude"
value="property1, property2"/> -->
</convert>
<param>标签设定限制属性同方法只不过用逗号隔开.
如果要允许转换一个包或者子包下面的所有类,可以这样写:
<convert converter="bean" match="your.full.package.*"/>
显而易见,这样写是允许转换所有的JavaBean:
<convert converter="bean" match="*"/>
2. 返回的变量:
1. 基本的类型:
boolean, byte, short, int, long, float, double, char, java.lang.Boolean, java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Float, java.lang.Double, java.lang.Character, java.math.BigInteger, java.math.BigDecimal 和 java.lang.String
2. 日期类型:与javascript里的Date对应.包括: java.util.Date, java.sql.Date, java.sql.Times or java.sql.Timestamp
3. 自定义的Bean
<convert converter="bean" match="com.rbi.entity.User"/>
4. List,Set类型.
返回客户端为数组.若返回的为对象数组,该对象必须在配置文件中有定义Bean
5. Map 类型.
返回的类型如同对象
如: 服务器 返回的Map内容如下:Map map = new HashMap();
map.put(“no1”,user1);map.put(“no2”,user2);
客户端js对取得的data取内容里的值:
var data1 = data[‘no1’]; var data2 = data.no2;
6. 返回void类型时回调函数无参数
3. 传入参数:
1. 基本类与日期型自定义Bean同上.
2. List,Set类型
Bean的属性还是,远程调用类的方法都要通过<signatures>标签,有其他的参数要有逗号隔开
<signatures>
<![CDATA[
import java.util.List;
import com.rbi.stady.DwrTestServiceImpl;
import com.rbi.entity.User;
import com.rbi.entity.Address;
DwrTestServiceImpl
.getUsersNames(List<User>);
User.setAddresses(List<Address>);
]]>
</signatures>
4. Servlet参数传递
做web应用的时候,常常要取得用户身份,或者取得一些Servlet上下文变量和应用环境等. 我们通常获取ServletContext,request, response等来取得这些值。DWR提供了两个办法解决这些问题
1、使用DWR的一个静态的API,不推荐。
2. DWR会自动注入这些servlet变量,这些变量只包括以下的五个:
HttpServletRequest
HttpServletResponse
HttpSession
ServletContext
ServletConfig
5. 与公司框架结合的问题
1. Spring 与 struts 集成的方式
方法1
1.1. 通过struts 配置文件的 plug-in 初始化spring实例
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property
property="contextConfigLocation" value="/../application-….xml " />
</plug-in>
1.2. 两种方式配置action
(a). action 继承 org.springframework.web.struts.DispatchActionSupport
配置文件采用struts的配置方式.通过getWebApplicationContext()方法取得 WebApplicationContext 再通过WebApplicationContext方法
getBean(“beanName”);
(b)action继承
org.springframework.web.struts.ActionSupport
配置文件采用spring的配置方式.
<bean name=”/actionName.do”
class=” package.className”>
<property name=”propertyName”>
<ref bean=”springBeanName”/>
</property>
</bean>
方法2
2.1 通过web.xml初始化spring实例
<servlet>
<servlet-name>context</servlet-name>
<servlet-class> org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
或
<listener>
<listener-class>
org.springframework.web.context
.ContextLoaderListener
</listener-class>
</listener>
配置context-param
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/…/application-….xml,
</param-value>
</context-param>
2.2 action 继承
org.springframework.web.struts.DispatchActionSupport
2. 公司项目采用的方式: 方法1à 1.1+1.2(a)
问题 : 通过 plug-in 标签的方式,在其他监听器,过滤器的访问成问题
dwr 配置spring Bean无法生成
解决办法:采取 方法 2.1+1.2(a)
6. engine.js
1.超时的处理(设置的单位为豪秒):
a.全局的设置: DWREngine.setTimeout(1000);默认为0,为0时就是超时不处理
b.单个远程调用的设置:
remoteClass
. Method (参数,{callback:jsfun,timeout:100000})
2.错误的处理:
a. 全局的设置:DWREngine.setErrorHandler(jsfun);
b. remoteClass
.method(参数, {
callback: jsfun,
errorHandler:function(errorString, exception) { ... }
});
3.批量的处理:
一次性提交到服务器
DWREngine.beginBatch();
remoteClass1.method (参数, jsfun);
remoteClass2.method (参数, jsfun);
DWREngine.endBatch();
4. 异步调用:
DWREngine.setOrdered(boolean)默认为false;
严格按照发送的顺序返回。DWR在旧的请求安全返回以后才去发送新的请求。把这个设置为true会减慢你的应用程序,如果一个消息丢失,浏览器就会没有响应。
5. 请求前处理
DWREngine.setPreHook(jsfun)
在DWR调用之前设置执行一个函数(但是这个函数无参数)例如让按钮不可用.
6. 请求后处理
DWREngine.setPostHook(jsfun) 在DWR调用之后要执行的函数.如按钮可用.
分享到:
相关推荐
【DWR (Direct Web Remoting)】是一个开源库,允许在浏览器和服务器之间进行实时的、异步的JavaScript到Java的调用,使得Web应用可以像桌面应用一样运行。DWR使得前端可以直接调用后端的Java方法,提高用户体验。在...
EXT JS通常与服务器端技术如Spring、DWR(Direct Web Remoting)等配合使用,实现数据的动态交互。DWR允许在客户端JavaScript和服务器端Java之间进行直接调用,极大地简化了异步数据交换。 文件名“extdwrgrid”...
Direct Web Remoting (DWR) 是一个强大的Java库,它使得JavaScript能够直接调用Java方法,极大地简化了前后端之间的交互过程。然而,在实际开发过程中,经常遇到的一个问题是JS文件的引用路径问题,特别是当JS文件...
标题 "用SSH2+DWR做的表格" 描述了如何结合使用两个技术——Spring Security (SSH2) 和 Direct Web Remoting (DWR) 创建一个实时更新的表格展示系统。在这个场景中,SSH2主要负责应用的安全性和控制层的管理,而DWR...
在IT行业中,DWR(Direct Web Remoting)是一种流行的JavaScript库,它允许Web应用程序与服务器进行异步通信,实现类似Ajax的功能。DWR的核心特性是它能够使JavaScript直接调用Java方法,就像调用本地函数一样,从而...
最后,`dwr.jar`是Direct Web Remoting的简称,是一个开源的Java库,它允许在客户端JavaScript和服务器端Java之间进行实时、双向通信。DWR使得开发者可以像调用本地JavaScript函数一样调用服务器端的方法,极大地...
这个功能的实现通常涉及到前端技术,如JavaScript和HTML,以及后端的DWR(Direct Web Remoting)技术。DWR允许在浏览器和服务器之间进行实时的、安全的、无需插件的Ajax通信,使得用户可以在不刷新整个页面的情况下...
《实用DWR 2项目:专家视角下的Java技术》是一本深入探讨Direct Web Remoting(简称DWR)在Web 2.0应用开发中的实践与技巧的专业书籍。DWR是一种强大的Ajax库,它允许服务器端Java代码直接调用客户端JavaScript函数...
动态数据交换(Direct Web Remoting,简称DWR)是一种JavaScript和Java之间的远程调用技术,允许Web应用程序在客户端和服务器之间进行实时交互。在“dynamic.rar”这个压缩包中,我们可能找到了一个关于使用DWR实现...
本文档旨在介绍如何在Struts、Spring、Hibernate(通常简称SSH)框架基础上集成DWR(Direct Web Remoting),以实现前后端更为流畅的交互。通过本指南,读者将能够掌握从环境搭建到功能实现的全过程,特别适合于初学...
在IT行业中,动态Web渲染(Direct Web Remoting,简称DWR)是一种JavaScript库,它允许在客户端JavaScript和服务器端Java之间进行实时、安全的交互,无需页面刷新。DWR使得Web应用可以拥有类似桌面应用的用户体验,...
Direct Web Remoting (DWR) 是一个开源Java库,它允许Web应用程序在浏览器和服务器之间进行异步交互,实现JavaScript与服务器端Java对象的直接调用。DWR简化了Ajax开发,使得前端开发者可以轻松地调用后台服务,而...
在描述中提到了两个关键组件:DWR(Direct Web Remoting)和JFreeChart,它们分别在系统中扮演着重要角色。 首先,Struts2是Action-based MVC(Model-View-Controller)框架,它简化了Java Web应用的开发,通过提供...
7. **DWR(Direct Web Remoting)**:文件“dwr.jar”和“dwr.xml”可能与此框架相关,DWR允许在浏览器和服务器之间进行实时的、异步的通信,使得JavaScript可以调用服务器端的方法,增强了Web应用的交互性。...
标题中的“dwr”指的是Direct Web Remoting,它是一个开源的Java库,允许Web应用程序进行JavaScript和服务器端Java代码之间的直接交互。这个技术使得在浏览器和服务器之间进行复杂的数据交换变得更加简单,无需处理...
Direct Web Remoting(简称DWR)是一种开源的JavaScript库,它使得从客户端调用服务器端的Java方法变得如同调用本地JavaScript函数一样简单。本教程旨在帮助初学者快速掌握如何将DWR整合到现有的Web应用程序中,特别...
除了基本的Ajax技术,还有许多框架和库,如DWR(Direct Web Remoting),它简化了Ajax的使用,提供了与Java服务器端交互的能力,允许开发者在客户端直接调用服务器端的方法,而无需手动处理XMLHttpRequest对象。...
DWR(Direct Web Remoting)是一种JavaScript库,它允许Web应用程序在客户端和服务器之间进行实时的、双向的通信,无需刷新页面。而Struts2(S2)是基于MVC(Model-View-Controller)设计模式的Java Web应用框架,它...
1. **DWR (Direct Web Remoting)**: DWR是一款开源的Java库,它允许在浏览器和服务器之间进行实时的、双向的通信,即Ajax(Asynchronous JavaScript and XML)通信。DWR简化了JavaScript与Java对象之间的交互,使得...