DWR配置的深层小析

简介:
在dwr.xml配置文件中,allow的子标签convert标签用于配置DWR中参数传递中用到的非基本的对象类型。基本类型有数值型,字符串,简单数组等。如果配有javascript属性,则该对象类型可以显式地在所有用到DWR的JS代码里创建出来,如var sb = new StringBuffer();这样的代价就是所有用到DWR的页面都需要下载该对象的JAVASCRIPT构造函数(由DWR创建),增加了DWR生成的JS文件尺寸。而DWR生成的JS是动态生成的,无法被CACHE,所以性能影响颇大。如果不加javascript属性,可以用var sb = new Object()来实现该数据对象的创建,然后隐式地对属性进行赋值。
allow的子标签create标签用于配置公开的业务对象(或其中指定的函数接口),creator是spring表示用Spring的bean来提供业务对象,beanName参数(create下的param标签)指定具体bean的名字;creator是new时,表示用JAVA类默认构造函数来生成对象来实现DWR对方法的JAVASCRIPT转换,name属性通常为class,而对应值则是类的全路径。create下任意多个的include子标签用method属性指定公布成javascript函数的接口名字,如果没指定include,则默认所有public方法都会被公布成javascript函数,所以这会增加DWR创建的JS文件尺寸(基本每个函数多3-4行javascript代码)。
signatures标签用于声明公开的业务对象方法的调用细节,对DWR的转换目前没看出有什么影响。
<dwr> 
  <allow> 
<convert converter="bean" match="java.lang.StringBuffer" javascript=”StringBuffer”/> 
<create creator="new" javascript="ClassHelper" scope="request"> 
           <param name="class" value="com.companya.projectb.ClassHelper"/> 
</create> 
<create creator="spring" javascript="HandlerImpl" > 
           <param name="beanName" value="handlerImpl"></param> 
           <include method="addStringBuffer"/>             
</create> 
</allow>
  <signatures> 
  <![CDATA[ 
  import java.util.List; 
  import java.lang.StringBuffer;
  HandlerImpl.addStringBuffer(List<StringBuffer>, String[][], boolean ); 
  ]]> 
  </signatures> 
</dwr>
附DWR生成的JS样例:
projectb/dwr/interface/HandlerImpl.js 
//如果StringBuffer有javascript属性声明,则下列构造函数存在。
if (typeof StringBuffer != "function") { 
  var StringBuffer = function() { 
     this.action = null; 
    this.id = null; 
    this.createTime = null; 
    this.lastModifiedTime = null; 
   } 

// Provide a default path to dwr.engine 
if (dwr == null) var dwr = {}; 
if (dwr.engine == null) dwr.engine = {}; 
if (DWREngine == null) var DWREngine = dwr.engine; 
if (HandlerImpl == null) var HandlerImpl = {}; 
HandlerImpl._path = '/projectb/dwr'; 
//For every issued interface. 每个公布的接口方法调用。
pcaEmailHandler.addStringBuffer = function(p0, p1, p2, callback) { 
  dwr.engine._execute(pcaEmailHandler._path, 'pcaEmailHandler', 'addEmail', p0, p1, p2, p3, callback); 
}
 

本文转自 dannyy1026 51CTO博客,原文链接:
http://blog.51cto.com/dannyyuan/338229
相关文章
|
应用服务中间件 容器
分析servlet最深层的源码读懂servlet如何实现
分析servlet最深层的源码读懂servlet如何实现
61 0
|
2月前
|
前端开发 JavaScript 持续交付
Web应用开发的方法
Web应用开发的方法
26 1
|
3月前
|
开发者 搜索推荐 Java
超越传统:JSF自定义标签库如何成为现代Web开发的个性化引擎
【8月更文挑战第31天】JavaServer Faces(JSF)框架支持通过自定义标签库扩展其内置组件,以满足特定业务需求。这涉及创建`.taglib`文件定义标签库及组件,并实现对应的Java类与渲染器。本文介绍如何构建和应用JSF自定义标签库,包括定义标签库、实现标签类与渲染器逻辑,以及在JSF页面中使用这些自定义标签,从而提升代码复用性和可维护性,助力开发更复杂且个性化的Web应用。
68 0
|
5月前
|
人工智能 自然语言处理 知识图谱
HUSKY:一个优化大语言模型多步推理的新代理框架
HUSKY是开源语言代理,专注复杂任务处理,如数字、表格及知识推理。通过多步计划和专家模型执行,它能迭代解决问题。在多模态任务中,即使使用小型模型,HUSKY也能匹敌GPT-4。训练涉及教师模型创建解决方案轨迹,以泛化处理广泛任务。在数值、表格和知识推理任务上表现出色,通过整合高效模型,HUSKY展示了在复杂推理领域的潜力。
94 3
|
6月前
|
机器学习/深度学习 SQL 人工智能
Web LLM 实验:间接注入
Web LLM 实验:间接注入
|
6月前
|
JSON 前端开发 Java
SpringMVC的架构有什么优势?——视图与模型(二)
SpringMVC的架构有什么优势?——视图与模型(二)
|
6月前
|
人工智能 自然语言处理 前端开发
基于AI分词模型,构建一个简陋的Web应用
前言 内容纯属个人经验,若有不当或错误之处,还请见谅,欢迎指出。 文中大致介绍了,如何快捷地使用PaddleHub服务化部署一个简单的AI模型,并简单包装成一个Web应用的过程。
118 0
|
XML 小程序 Java
深度长文回顾web基础组件 (一)
深度长文回顾web基础组件 (一)
152 0
|
Java 应用服务中间件 Spring
深度长文回顾web基础组件 (二)
深度长文回顾web基础组件 (二)
134 0
|
存储 编解码 应用服务中间件
深度长文回顾web基础组件 (三)
深度长文回顾web基础组件 (三)
126 0