DWR是一个开源的类库,它允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样.
它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet(小应用程序)中获取数据.另外一方面一个JavaScript库可以帮助网站开放人员轻松地利用获取的数据来动态改变网页的内容.
DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码 .这样WEB开发人员就可以在JavaScript里使用Java代码就像它们是浏览器的本地代码(客户端代码 )一样;但是Java代码运行在WEB服务器端而且可以自由访问WEB 服务器的资源.出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用.
这个从JAVA到JavaScript的远程功能方法给DWR的用户带来 非常像传统的RPC机制,就像RMI或者SOAP一样,而且拥有运行在WEB上但是不需要浏览器插件的好处 .
DWR 不认为浏览器/WEB服务器协议是重要的,而更乐于保证编程界面的简单自然.对此最大的挑战就是把AJAX的异步特性和正常JAVA方法调用的同步特性相 结合.在异步模式下,结果数据在开始调用之后的一段时间之后才可以访问.DWR解决了这个问题,允许WEB开发人员使用一个特殊的方法参数来指定一个函 数,以便在数据返回后来回调此函数.
一、配置DWR使用注解功能
如果让dwr使用注解功能需要在web.xml进行如下配置:
- < servlet >
- < servlet-name > dwr-invoker </ servlet-name >
- < servlet-class > org.directwebremoting.servlet.DwrServlet </ servlet-class >
- < init-param >
- < param-name > debug </ param-name >
- < param-value > true </ param-value >
- </ init-param >
- <!-- 将设定注解的域对象和业务实现类放在下面列表中,中间使用逗号间隔 -->
- < init-param >
- < param-name > classes </ param-name >
- < param-value >
- com.dwr.test.Book,
- com.dwr.test. Bank,
- com.dwr.test. dao.BookDao
- </ param-value >
- </ init-param >
- </ servlet >
- < servlet-mapping >
- < servlet-name > dwr-invoker </ servlet-name >
- < url-pattern > /dwr/* </ url-pattern >
- </ servlet-mapping >
这样设置之后就可以在dwr中使用注解了,非常的方便。
二、DWR提供的注解类型
经常用到的注解主要有:@RemoteProxy、@RemoteMethod、@DataTransferObject和@RemoteProperty。
1. @RemoteProxy和@RemoteMethod
@RemoteMethod 对应于原来dwr.xml文件中的create标签,用于创建DWR所提供的远程方法;而@RemoteMethod对应于create标签中的 <include method=”"/>,用来指定所要暴露的方法名称。我们举例来说明:
- @ RemoteProxy ( name = " bankFunctions " )
- public class Bank {
- @ RemoteMethod
- public void buy () {
- // ...
- }
- }
从上面可以看出,@RemoteProxy表示这个类将用于远程方法,而使用@RemoteMethod指定所要暴露的方法,没有使用@RemoteMethod的方法将不会显示在客户端。
上面的注释使用dwr.xml表示如下:
- < ! DOCTYPE dwr PUBLIC
- " -//GetAhead Limited//DTD Direct Web Remoting 2.0//EN "
- " http://getahead.ltd.uk/dwr/dwr20.dtd " >
- < dwr >
- < allow >
- < create creator = " new " javascript = " bankFunctions " >
- < param name = " class " value = " com.dwr.test. Bank " />
- < include method = " buy " />
- </ create >
- </ allow >
- </ dwr >
如果使用Spring中的DAO或逻辑层则需要进行如下的设置:
- // BookDao
- @ RemoteProxy ( creator = SpringCreator . class ,
- creatorParams = @ Param ( name = " beanName " , value = " bookDao " ) ,
- name = " bookFunctions " )
- public class BookDao {
- @ RemoteMethod
- public void addBook ( Book book ) {
- // ...
- }
- }
通过指定@RemoteProxy中的creator类型为SpringCreator,然后在creatorParams指定对应的beanName名称。对应的dwr.xml文件如下:
- < ! DOCTYPE dwr PUBLIC
- " -//GetAhead Limited//DTD Direct Web Remoting 2.0//EN "
- " http://getahead.ltd.uk/dwr/dwr20.dtd " >
- < dwr >
- < allow >
- < create creator = " spring " javascript = " bookFunctions " >
- < param name = " beanName " value = " bookDao " />
- < include method = " addBook " />
- </ create >
- </ allow >
- </ dwr >
2. @DataTransferObject和@RemoteProperty
@DataTransferObject对应于原来dwr.xml文件中的convert标签,用于转换Java对象;@RemoteProperty则对应于convert标签中的 <param name=”include” value=”" />。
举例说明一下:
- @ DataTransferObject
- public class Book {
- @ RemoteProperty
- private int id ;
- @ RemoteProperty
- private String name ;
- public Book () {
- }
- public int getId () {
- return id ;
- }
- public void setId ( int id ) {
- this . id = id ;
- }
- public String getName () {
- return name ;
- }
- public void setName ( String name ) {
- this . name = name ;
- }
- }
@RemoteProperty可以放在JavaBean中的私有变量上面,也可以放在getXXX方法上面。另外如果想将JavaBean中所有的属性都暴露出来的话,不需要在任何属性上面添加@RemoteProperty注释就可以了。
上面的注释对应的dwr.xml文件如下:
- < ! DOCTYPE dwr PUBLIC
- " -//GetAhead Limited//DTD Direct Web Remoting 2.0//EN "
- " http://getahead.ltd.uk/dwr/dwr20.dtd " >
- < dwr >
- < allow >
- < convert converter = " bean "
- match = " com.javatang.domain.Book " >
- < param name = " include " value = " id, name " />
- </ convert >
- <!-- 或者用下面的方式也可以
- <convert converter="bean" match="com.javatang.domain.Book" />
- -->
- </ allow >
- </ dwr >
关于具体每个注释使用的方法已经所包含的参数可以参考Java Doc。使用DWR2.0的注解极大的简化了原来dwr.xml的配置,非常的方便。
总结:
针对DWR对Javabean的注解分为两类:
Object和Class
针对Class的注解使用:
@RemoteProperty 注解类为远程访问类,相等于create
@RemoteMethod 注解类为远程访问方法,相等于dwr.xml中白名单中注解的方法
注意默认的类中所有的方法为全部在黑名单中。不可作为远程访问对象的。
针对:Object使用@DataTransferObject 和@RemoteProperty注解接口
@DataTransferObject仅仅注解类对象
@RemoteProperty注解属性和方法的应用
使用远程访问类的
package com.dwr.test;
import org.directwebremoting.annotations.RemoteMethod;
import org.directwebremoting.annotations.RemoteProxy;
/**
* 注解此类为远程访问对象的应用
* @author Rabby
*
*/
@RemoteProxy(name = "DWRAnnotation")
public class DWRAnnotation {
/**
* 注解此方法为远程方法的
* @param username
* @return
*/
@RemoteMethod
public String hello(String username) {
return "Hello ," + username;
}
}
web.xml的配置信息:
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<!-- 用于测试dwr的模式 -->
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<!-- 针对注解类必须使用的远程访问对象的描述 -->
<init-param>
<param-name>classes</param-name>
<param-value>
com.dwr.test.DWRAnnotation
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
相应的jsp页面用于测试注解的使用
<head>
<script type='text/javascript'
src='/DWRAnnotation/dwr/interface/DWRAnnotation.js'></script>
<script type='text/javascript' src='/DWRAnnotation/dwr/engine.js'></script>
<script type='text/javascript' src='/DWRAnnotation/dwr/util.js'></script>
<script type="text/javascript">
function helloMessage()
{
var username=DWRUtil.getValue("username");
DWRAnnotation.hello(username,function(data)
{
DWRUtil.setValue("message",data);
});
}
</script>
</head>
<body>
UserName:
<input type="text" id="username" name="username" value="" />
<div id="message"></div>
<input type="button" onclick="helloMessage()" />
</body>
</html>
DWR写的聊天室:
http://blog.csdn.net/caterpillar_here/archive/2006/09/30/1311605.aspx
Dwr小应用:
http://blog.csdn.net/caterpillar_here/archive/2006/09/18/1239538.aspx
相关推荐
DWR+Struts+spring+hibernate的订货系统,自己添加的dwr功能
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是疯狂Java体系丛书之一,前8章基本以XHTML、JavaScript和DOM编程为主,无须任何基础即可阅读;第9章以后的内容则需要掌握Spring、Hibernate等Java ...
总结起来,"DWR+extjs+spring+hibernate"的组合是现代Web应用开发的一个强大工具集,它能够帮助开发者快速构建出交互性强、性能优异的企业级应用。通过深入理解和熟练掌握这四个技术,可以显著提升开发者的技能水平...
《DWR+Spring+Hibernate整合应用详解》 在IT领域,DWR(Direct Web Remoting)、Spring和Hibernate是三个至关重要的技术组件,它们分别在Web应用程序的远程调用、依赖注入和对象关系映射方面发挥着核心作用。将这三...
Spring+DWR+ibatis+jQuery+easyUI的框架例子. 完全开放源代码,免费学习与使用。 可以完成基本的后台主界面,报表查询,数据查询,增加,修改等功能。 如果你要做一些报表,后台功能利用这个a框架就可以很方便实现。
总的来说,这些文件共同构成了DWR2.0在Java Web应用程序中的基础架构。DWR2.jar提供了核心功能,DWR.xml定制了DWR的行为,DWR2.0.dtd保证了配置文件的正确性,而Web.xml确保了DWRServlet的正确部署和配置。通过熟练...
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是疯狂Java体系丛书之一,前8章基本以XHTML、JavaScript和DOM编程为主,无须任何基础即可阅读;第9章以后的内容则需要掌握Spring、Hibernate等Java ...
标题 "dwr+maven+jetty" 涉及到三个关键的开源技术:Direct Web Remoting (DWR),Maven,以及Jetty。这些工具在IT行业中常用于构建和部署Java Web应用程序。 1. Direct Web Remoting (DWR): DWR是一种JavaScript...
导入myeclips就可用,智能搜索功能:让用户体验感觉良好点,在输入相关的关键搜索字时就可以得知相应的记录数 Dwr+AutoComplete+pinyin4j 自动匹配(中文,拼音)
内含 ext+dwr+freemark+jasperreort+ireport+echance+oscache+velocite等技术 展示例子:http://zz563143188.iteye.com/blog/1462413 若要下载chm格式请到http://user.qzone.qq.com/563143188 程序源码下载地址10MB...
DWR+HIbernate+jquery+ajax竞拍,一个项目,开发一期
在这个“dwr+aja+oracle”的项目中,我们看到的是这三个技术的结合,构建了一个能够实时与Oracle数据库交互的Web应用程序。下面我们将深入探讨这些知识点: 1. **DWR**:DWR的主要功能是提供一个桥梁,让JavaScript...
【标题】"hibernate+dwr+spring+jstl的demo"揭示了这是一个结合了四个关键技术的示例项目,主要用于展示如何在Web开发中整合这些技术。这些技术分别是Hibernate(对象关系映射框架)、Direct Web Remoting (DWR)(一...
- 在Java类中定义对应的方法,并使用DWR注解(如`@RemoteProxy`)标记,使其暴露给JavaScript。 3. **iBatis配置** - 创建SqlMapConfig.xml文件,配置数据源、事务管理器和Mapper扫描路径。 - 编写Mapper接口和...
总的来说,"Dwr,dwr+spring学习指南"是一个涵盖DWR基本使用和与Spring框架集成的教程,旨在帮助开发者理解如何利用DWR创建动态Web应用,并通过Spring增强其功能和稳定性。通过深入学习和实践这个指南,开发者能够...
【标题】:“DWR+Hibernate+Spring未完成例子”揭示了这个压缩包中包含的是一个未完成的示例项目,该示例项目整合了Direct Web Remoting (DWR)、Hibernate ORM框架和Spring框架。这三者都是Java Web开发中的重要组件...
"dwr+spring+hibernate"是一个常见的组合,它将Direct Web Remoting (DWR),Spring框架和Hibernate ORM工具集成了一个高效、灵活的Web应用程序开发解决方案。下面我们将详细探讨这三个组件以及它们在整合中的作用。 ...
dwr+spring+struts+hibernate 整合在一起,代码写的不是很好,可以运行!
EXT + DWR + Struts + Hibernate + Spring 是一个经典的Java Web开发框架组合,它们共同构建了一个强大、灵活且高效的Web应用程序。以下是对这些技术及其在Demo中的应用的详细解释: 1. **EXT**:EXT(现称为Sencha...
《dwr3api+DWR文档.pdf》提供了关于DWR 3.x版本的详细信息,包括API参考和初级入门指南。这份文档可能涵盖了以下关键知识点: 1. **安装与配置**:如何在你的Java应用服务器上集成DWR,配置DWR的XML配置文件(dwr....