`
esperanza
  • 浏览: 183352 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DWR 2

阅读更多

后续

1.          拦截器 uk.ltd.getahead.dwr.DWRServlet

该类拦截所有指向dwr目录下的请求,并调用Processorhandler方法进行处理,在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类的转换器,进入代码我们来看看它是如何在javascriptjava间进行转换的。打开BeanConverter代码,定位到函数

public Object convertInbound(Class paramType, InboundVariable iv, InboundContext inctx)

throws ConversionException

即是将javascript对象转换成java对象的,其中paramTypeClass类型,在上面的例子中是test.UserInboundVariable iv,是传入的值,通过iv.getValue可以得到传入的javascript值串InboundContext inctx,是入口参数上下文,用于保存转换的后java对象。因为前台传入的是一个javascriptmap类型,而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实例中,并返回。

这样就完成了javascriptjava的转换。

另一个函数

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相关资料"的压缩包中,我们可能找到了一个完整的DWR2演示项目,这个项目是为在MyEclipse环境中部署而设计的。MyEclipse是一款强大的集成开发环境(IDE),特别适合于Java EE项目的开发,包括Web应用。 ...

    dwr 2.jar dwr 2.jar

    dwr 2.jar dwr 2.jar

    dwr实战,Practical DWR 2 Projects,PDF书籍及源码

    这本书《Practical DWR 2 Projects》由Frank Zammetti撰写,旨在帮助读者深入理解和应用DWR技术。 书中可能涵盖的知识点包括: 1. **DWR基础**:介绍DWR的基本概念,如Reverse Ajax、远程对象(Remote Objects)...

    Spring 2中整合DWR 2

    ### Spring 2中整合DWR 2:详细解析与实践 #### 一、Spring与DWR简介 在探讨如何在Spring 2框架中整合DWR 2之前,我们首先需要了解这两个技术的基本概念。 - **Spring框架**:Spring是目前Java开发中最流行的开源...

    dwr2 资料

    DWR (Direct Web Remoting) 是一个开源的Java库,它允许JavaScript在浏览器端与服务器端的Java对象进行...在压缩包中的"DWR"文件可能包含了DWR 2的相关文档、示例代码或配置文件,这些都是学习和使用DWR 2的重要资源。

    dwr1+dwr2+dwr3 jar包

    这个压缩包包含了DWR的三个主要版本:DWR1.0、DWR2.0和DWR3.0的jar包,这些jar包是运行DWR应用的核心组件。 DWR1.0: DWR1.0是DWR项目的早期版本,主要目标是简化Web应用中的异步通信。在这个版本中,DWR提供了一个...

    DWR2.jar + DWR.xml + DWR2.0.dtd + Web.xml

    **DWR2.jar** 是DWR的主要库文件,包含了DWR框架的所有核心组件和实现。这个JAR文件包含了许多类,如`DWRServlet`,它是DWR与HTTP请求交互的核心组件,以及各种用于转换数据类型、安全处理和错误处理的工具类。...

    关于dwr2与spring2集成

    DWR2是DWR的一个版本,它在DWR的基础上进行了改进和扩展,提高了性能和功能。在DWR2中,与Spring2框架的集成可以让开发者充分利用Spring的依赖注入、事务管理等优势,同时利用DWR的异步AJAX能力,创建出更加灵活、...

    struts2与dwr2结合

    Struts2和DWR2是两个在Web开发中常用的开源框架,它们分别处理不同的层面:Struts2专注于MVC(模型-视图-控制器)架构的实现,而DWR(Direct Web Remoting)则用于在浏览器和服务器之间实现异步的JavaScript到Java的...

    LogViewer(DWR2)

    **标题解析:** "LogViewer(DWR2)" 指的是一个基于DWR2技术的日志查看器示例项目。DWR (Direct Web Remoting) 是一个开源的JavaScript库,它允许Web应用程序在客户端和服务器之间进行实时通信,无需使用Ajax或页面...

    DWR2学习整理资料

    2. **配置DWRServlet**:在web.xml中配置DWRServlet,指定DWR配置文件的位置,如dwrcfg.xml或dwr.xml,并可配置多个config开头的文件。 3. **debug参数**:在web.xml中可设置debug参数,开启后可测试配置的DWR方法。...

    dwr2推送Demo

    DWR2是DWR的第二个主要版本,提供了许多改进和新特性,使得开发人员能够更轻松地实现Ajax(Asynchronous JavaScript and XML)功能。 在"Dwr2推送Demo"中,我们主要关注的是DWR的实时推送功能。在传统的Web应用中,...

    Spring2_DWR2_Login

    标题 "Spring2_DWR2_Login" 暗示我们在这里讨论的是如何在 Spring 2.x 版本中集成 DWR 2.x 版本,特别是关于如何进行登录功能的实现。通常,DWR 的集成会涉及到一个 `dwr.xml` 配置文件,但在这个例子中,我们将探讨...

    dwr 2 api chm格式

    DWR 2 API是这个框架的一个关键版本,提供了丰富的功能和改进,使得开发者能够更高效地构建动态Web应用。 在"**dwr 2 api chm格式**"文档中,你可以找到关于DWR 2.0.1 API的详细说明。CHM(Microsoft Compiled ...

    Practical DWR 2 Projects

    《Practical DWR 2 Projects》是一本关于Direct Web Remoting (DWR)技术实践的书籍,对于深入了解和掌握DWR具有很高的参考价值。DWR是一种JavaScript和Java之间的开源通信库,它允许Web应用程序实现双向实时通信,...

    Spring2结合DWR2的用户注册的例子

    Spring2结合DWR2的用户注册的例子 本文将讲解如何使用Spring2框架和DWR2技术实现用户注册...通过这个例子,我们可以看出,使用Spring2框架和DWR2技术可以轻松地实现用户注册功能,提高Web应用程序的开发效率和性能。

    整合了SSH的Dwr2实例

    **整合SSH的Dwr2实例详解** 在现代Web开发中,为了实现丰富的用户交互和高效的数据传输,常常会采用各种技术栈的组合。SSH(Spring、Struts、Hibernate)是Java Web开发中的一种经典组合,提供了强大的MVC架构支持...

    Dwr2的HelloWorld

    **DWR2的HelloWorld详解** DWR (Direct Web Remoting) 是一个开源JavaScript库,它允许在浏览器和服务器之间进行直接的、实时的通信,从而实现Web应用程序的富客户端功能。DWR2是其第二个主要版本,相较于早期版本...

Global site tag (gtag.js) - Google Analytics