后续:
1. 拦截器 uk.ltd.getahead.dwr.DWRServlet
该类拦截所有指向dwr目录下的请求,并调用Processor的handler方法进行处理,在uk.ltd.getahead.dwr.impl.DefaultProcessor下,我们可以看到详细的处理过程。
if (pathInfo.length() == 0 ||pathInfo.equals(HtmlConstants.PATH_ROOT) ||
pathInfo.equals(req.getContextPath())) {
resp.sendRedirect(req.getContextPath() + servletPath + HtmlConstants.FILE_INDEX);
} else if (pathInfo.startsWith(HtmlConstants.FILE_INDEX)) {
index.handle(req, resp);
} else if (pathInfo.startsWith(HtmlConstants.PATH_TEST)) {
test.handle(req, resp);
} else if (pathInfo.startsWith(HtmlConstants.PATH_INTERFACE)){
iface.handle(req, resp);
}else if (pathInfo.startsWith(HtmlConstants.PATH_EXEC)){
exec.handle(req, resp);
} else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_ENGINE)) {
file.doFile(req, resp, HtmlConstants.FILE_ENGINE, HtmlConstants.MIME_JS);
}else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_UTIL)){
file.doFile(req, resp, HtmlConstants.FILE_UTIL, HtmlConstants.MIME_JS);
} else if (pathInfo.equalsIgnoreCase(HtmlConstants.FILE_DEPRECATED)) {
file.doFile(req, resp, HtmlConstants.FILE_DEPRECATED, HtmlConstants.MIME_JS);
} Else {
resp.sendError(HttpServletResponse.SC_NOT_FOUND);
}
通过判断request请求的servlet路径,进行处理,大家可以自己去参看,这里不详细讨论。
2. bean转换器,<convert converter="bean" match="test.User"/>
将dwr.jar解压缩,在路径ukltdgetaheaddwr下可以看到dwr.xml,这里配置了系统默认的一些转换器,
<converter id="bean" class="uk.ltd.getahead.dwr.convert.BeanConverter"/>即是刚才用到User类的转换器,进入代码我们来看看它是如何在javascript和java间进行转换的。打开BeanConverter代码,定位到函数
public Object convertInbound(Class paramType, InboundVariable iv, InboundContext inctx)
throws ConversionException
即是将javascript对象转换成java对象的,其中paramType即Class类型,在上面的例子中是test.User,InboundVariable iv,是传入的值,通过iv.getValue可以得到传入的javascript值串InboundContext inctx,是入口参数上下文,用于保存转换的后java对象。因为前台传入的是一个javascript的map类型,而map肯定是以{开始和以}结束的,于是在这个函数一开始进行了判断
if (!value.startsWith(ConversionConstants.INBOUND_MAP_START)) {
throw new IllegalArgumentException(
Messages.getString("BeanConverter.MissingOpener", ConversionConstants.INBOUND_MAP_START));
}
if (!value.endsWith(ConversionConstants.INBOUND_MAP_END)) {
throw new IllegalArgumentException(Messages.getString("BeanConverter.MissingCloser", ConversionConstants.INBOUND_MAP_START)); //$NON-NLS-1$
}
javascript中,map里各个项是用逗号连接的,如var userMap = {id:'admin',password:'123456',name:'chenbug',email:'chenbug@zj.com'};而每个项的键值对是用冒号连接的,
在convertInbound函数的接下来的处理中,即是通过分析map字串,通过paramType构造java实例(即User类),然后通过反射,将这些键值对设置到java实例中,并返回。
这样就完成了javascript到java的转换。
另一个函数
public String convertOutbound(Object data, String varname, OutboundContext outctx) throws ConversionException
即是将java对象转换为javascript对象(其实是声明和赋值语句)。
Object data ,是待转换的java对象
String varname,是javascript中的该对象的变量名
OutboundContext outctx,传出参数上下文,用于保存转换后的javascript值
StringBuffer buffer = new StringBuffer();
buffer.append("var "); //$NON-NLS-1$
buffer.append(varname);
buffer.append("={};"); //$NON-NLS-1$
这里声明了map类型的变量。
即下来来的代码即是通过反射进行变量赋值,如下
buffer.append(varname);
buffer.append('.');
buffer.append(name);
buffer.append('=');
buffer.append(nested.getAssignCode());
buffer.append(';');
大家可以自己去参看更多的代码。
3.dwr本身提供了一个测试环境,大家在配置完后,可以在IE中输入地址http://localhost/testApp/dwr/index.html,看到配置的各DWR组件,并进行相关测试。
分享到:
相关推荐
在这个"DWR2相关资料"的压缩包中,我们可能找到了一个完整的DWR2演示项目,这个项目是为在MyEclipse环境中部署而设计的。MyEclipse是一款强大的集成开发环境(IDE),特别适合于Java EE项目的开发,包括Web应用。 ...
dwr 2.jar dwr 2.jar
这本书《Practical DWR 2 Projects》由Frank Zammetti撰写,旨在帮助读者深入理解和应用DWR技术。 书中可能涵盖的知识点包括: 1. **DWR基础**:介绍DWR的基本概念,如Reverse Ajax、远程对象(Remote Objects)...
### Spring 2中整合DWR 2:详细解析与实践 #### 一、Spring与DWR简介 在探讨如何在Spring 2框架中整合DWR 2之前,我们首先需要了解这两个技术的基本概念。 - **Spring框架**:Spring是目前Java开发中最流行的开源...
DWR (Direct Web Remoting) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行...在压缩包中的"DWR"文件可能包含了DWR 2的相关文档、示例代码或配置文件,这些都是学习和使用DWR 2的重要资源。
这个压缩包包含了DWR的三个主要版本:DWR1.0、DWR2.0和DWR3.0的jar包,这些jar包是运行DWR应用的核心组件。 DWR1.0: DWR1.0是DWR项目的早期版本,主要目标是简化Web应用中的异步通信。在这个版本中,DWR提供了一个...
**DWR2.jar** 是DWR的主要库文件,包含了DWR框架的所有核心组件和实现。这个JAR文件包含了许多类,如`DWRServlet`,它是DWR与HTTP请求交互的核心组件,以及各种用于转换数据类型、安全处理和错误处理的工具类。...
DWR2是DWR的一个版本,它在DWR的基础上进行了改进和扩展,提高了性能和功能。在DWR2中,与Spring2框架的集成可以让开发者充分利用Spring的依赖注入、事务管理等优势,同时利用DWR的异步AJAX能力,创建出更加灵活、...
Struts2和DWR2是两个在Web开发中常用的开源框架,它们分别处理不同的层面:Struts2专注于MVC(模型-视图-控制器)架构的实现,而DWR(Direct Web Remoting)则用于在浏览器和服务器之间实现异步的JavaScript到Java的...
**标题解析:** "LogViewer(DWR2)" 指的是一个基于DWR2技术的日志查看器示例项目。DWR (Direct Web Remoting) 是一个开源的JavaScript库,它允许Web应用程序在客户端和服务器之间进行实时通信,无需使用Ajax或页面...
2. **配置DWRServlet**:在web.xml中配置DWRServlet,指定DWR配置文件的位置,如dwrcfg.xml或dwr.xml,并可配置多个config开头的文件。 3. **debug参数**:在web.xml中可设置debug参数,开启后可测试配置的DWR方法。...
DWR2是DWR的第二个主要版本,提供了许多改进和新特性,使得开发人员能够更轻松地实现Ajax(Asynchronous JavaScript and XML)功能。 在"Dwr2推送Demo"中,我们主要关注的是DWR的实时推送功能。在传统的Web应用中,...
标题 "Spring2_DWR2_Login" 暗示我们在这里讨论的是如何在 Spring 2.x 版本中集成 DWR 2.x 版本,特别是关于如何进行登录功能的实现。通常,DWR 的集成会涉及到一个 `dwr.xml` 配置文件,但在这个例子中,我们将探讨...
DWR 2 API是这个框架的一个关键版本,提供了丰富的功能和改进,使得开发者能够更高效地构建动态Web应用。 在"**dwr 2 api chm格式**"文档中,你可以找到关于DWR 2.0.1 API的详细说明。CHM(Microsoft Compiled ...
《Practical DWR 2 Projects》是一本关于Direct Web Remoting (DWR)技术实践的书籍,对于深入了解和掌握DWR具有很高的参考价值。DWR是一种JavaScript和Java之间的开源通信库,它允许Web应用程序实现双向实时通信,...
Spring2结合DWR2的用户注册的例子 本文将讲解如何使用Spring2框架和DWR2技术实现用户注册...通过这个例子,我们可以看出,使用Spring2框架和DWR2技术可以轻松地实现用户注册功能,提高Web应用程序的开发效率和性能。
**整合SSH的Dwr2实例详解** 在现代Web开发中,为了实现丰富的用户交互和高效的数据传输,常常会采用各种技术栈的组合。SSH(Spring、Struts、Hibernate)是Java Web开发中的一种经典组合,提供了强大的MVC架构支持...
**DWR2的HelloWorld详解** DWR (Direct Web Remoting) 是一个开源JavaScript库,它允许在浏览器和服务器之间进行直接的、实时的通信,从而实现Web应用程序的富客户端功能。DWR2是其第二个主要版本,相较于早期版本...