CN103020062A - 一种基于xml rpc的前端与服务器的交互实现 - Google Patents
一种基于xml rpc的前端与服务器的交互实现 Download PDFInfo
- Publication number
- CN103020062A CN103020062A CN2011102825715A CN201110282571A CN103020062A CN 103020062 A CN103020062 A CN 103020062A CN 2011102825715 A CN2011102825715 A CN 2011102825715A CN 201110282571 A CN201110282571 A CN 201110282571A CN 103020062 A CN103020062 A CN 103020062A
- Authority
- CN
- China
- Prior art keywords
- xml
- rpc
- storehouse
- data
- service
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种基于XML RPC的前端与服务器的交互方式,包括一套封装良好的JS库、XML转换引擎、服务调用器和面向服务层的API接口;JS库,用于完成页面表单数据到XML格式的转换以及RPC回调结果绑定到表单;XML转换引擎,用于将XML格式的对象文本转成对应的内存对象以及将内存对象转成XML格式文本;服务调用器,用于接收页面AJAX请求,解析XML请求参数,找到对应的服务ID和服务方法并调用它;面向服务层的API接口,用于服务层从内存中取到从页面传递过来的且经过了XML转换引擎转换过的业务对象。
Description
技术领域
本发明涉及WEB应用领域,特别是涉及一种基于XML RPC的前端与服务器的交互实现。
背景技术
随着社会信息化程度越来越高,在IT领域也涌现出了越来越多的新技术,传统的基于B/S的系统也开始迅速走出历史舞台,WEB应用已成为中流砥柱。然而信息化高度发展的今天也面临着一些需要急需解决的问题,如何快速构建企业应用和提高开发效率就是其中的一个典型问题。想要在信息化领域中具有强大竞争力,低成本的、高效率的快速构建技术对公司的发展有着至关重要的作用。与之相反的是当前不少软件开发商宁愿一心埋头忙着赶进度,也不愿意在这些方便多做一些工作。他们大多都面临这样的问题:在不同的项目中做着相同的事情。这种方式不仅不能提高软件质量,生产效率也极其低下。事实上,尽管各种企业应用的需求不尽相同,代码实现也千差万别,但毋庸置疑的是,其中存在的共性也非常多。如果通过某种有效的方法,把这些共性提取出来,并能够灵活应对各种不同的需求变化,这样就会使WEB应用的开发效率大大提高,同时增加WEB应用架构的灵活性。
B/S架构正越来越成为企业应用的主流模式,市场规模每年都在快速增长。然而与这种快速发展不匹配的是WEB开发效率仍然处于较低的水平。
发明内容
本发明所要解决的技术问题是提供一种基于XML RPC的前端与服务器的交互实现,通过将这种通用的功能流程化、抽象化,以降低程序开发人员的工作量,使他们从繁琐的表单数据处理、服务层获取和重组请求数据中解脱出来。
为实现上述发明目的,本发明提供一套封装良好的JS库。
所述JS库,用于:转换表单数据到XML格式以及RPC调用结果到表单的绑定。支持的场景包括:
如果表单数据对应一个业务对象,那么可以通过JS库将单个表单直接转成一个XML。
如果表单数据对应多个业务对象且他们存在父子关系,那么通过JS库可以将单个表单直接转成一个有父子关系的XML。
如果页面使用了Grid组件,那么通过JS库可以将单个Grid直接转成一个XML。
如果页面使用了JSON数据,那么通过JS库也可直接将JSON数据转成一个XML。
本发明还提供XML转换引擎。
所述XML转换引擎,用于:将XML格式的对象文本转成对应的内存对象以及将内存对象转成XML格式文本。
本发明还提供面向服务层的API接口。
所述面向服务层的API接口,用于:服务层从内存中取到从页面传递过来的且经过了XML转换引擎转换过的业务对象。
本发明还提供服务调用器。
所述服务调用器,用于:接收页面AJAX请求,解析XML请求参数,找到对应的服务ID和服务方法并调用它。
另外,本发明还提供一种将RPC回调结果绑定到表单的方法。
所述面向服务层的API接口,用于:如果RPC返回的数据为一个业务对象,那么可以直接通过JS库将它绑定到对应的表单上。
如果RPC返回的数据为一个List或Array,那么可以直接通过JS库将它绑定到select表单元素或JS的Array对象。
如果RPC返回的数据为一个Map,那么可以直接通过JS库将它绑定到select表单元素或JS对象。
由上述方案可以看出,本发明通过使用一套封装良好的JS API来收集页面表单数据,并生成XML文本,如果表单数据存在父子关系也能自动转换。XML转换引擎在收到AJAX请求发来的XML数据时,将解析该文本以形成相应的业务对象,如果XML数据存在父子关系那么也将生成具有父子关系的业务对象。从XML解析出服务ID和服务方法后,使用反射机制调用服务方法。服务方法通过一个RequestContext对象来从请求中获取业务数据(通常是表单数据,事实上这些业务数据已经被XML转换引擎转成了业务对象),这也是为服务层提供的唯一API, 使用这个对象中的方法就可以方便的取到上面提到的业务对象了。服务方法返回的结果也将被XML转换引擎转成XML格式,页面上仅需要使用JS进行适当的绑定就可以完成数据的展现。
整个过程都没有涉及任何零散的数据,开发人员只需要记住几个常用的API函数,这样极大的提供了开发效率,同时该发明也充分利用了AJAX的异步性和局部刷新等特性来提高应用程序的性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中涉及的操作流程;
图2为本发明系统架构图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供一种基于XML RPC的前端与服务器的交互方式,所述系统包括一套封装良好的JS库、XML转换引擎、服务调用器和面向服务层的API接口。
所述JS库的实现方式如下:
XML RPC的API主要完成两方面的功能:表单数据到XML的转换和RPC调用返回数据的表单绑定。
其定义的API接口和例子如下:
1.XmlRpc.Formatter.getXml(“formName”),将整个表单数据转成一个XML文档。
2.XmlRpc.Formatter.addBean(“people”).getXml(),将整个表单中标识有属性“attachTo=people”的元素转成XML文档。
3.XmlRpc.Formatter.addBean(″people″).addChildBean(″address″),建立父子关系,并转成XML文档。
4.XmlRpc.Formatter.addBean(″customer″).addGridBean(″orders″,″order″).getXml(),实现一对多的关系。
5.ajax.remoteCall(″rpc://ServiceID:method″,[map],function(reply)
{
/*回调处理*/
}),ajax为XmlRpc的一个实例,该远程方法将通过AJAX方式发送RPC调用。
6.XmlRpc.Form.bindForm(“formName”,reply.getResult()),这里的reply和5中的一致,这个API用于数据绑定,一般在回调函数中处理。
(注:这里attachTo是自定义的HTML元素属性,它的值为一类业务对象的别名,用它来指明该HTML元素应该绑定到哪类业务对象——XML转换引擎根据这个信息将元素对应的值注入到业务对象的相应属性中。)
下面是一个XML文档格式例子:
所述XML转换引擎的实现方式如下:
转换引擎主要包含下面几个组件:
1.Converters
当需要从XML转换对象或是将对象转换成XML时,XML转换引擎会将具 体的工作移交给与之相应的converter。转换引擎包括许多常见类型converter,包括基本类型,字符串,集合,数组,空,日期等。它还包含有一个默认的转换器,是在没有其他的转换器相匹配的时候使用。使用反射来自动生成XML对象中的所有领域。如果一个对象由其他对象组成,转换器可能委托给其他的转换器。
2.Drivers(Writer and Reader)
XML转换引擎实际上是对底层XML数据的一种抽象,这种抽象允许XML解析器直接从流中读取XML或直接操作结构化数据(如DOM)。其内部提供了缓存机制,可以有效防止重解析带来的开销。此外,它还支持目前主流的XML解析库。
3.Context
当XML转换引擎序列化或反序列化对象时,它将创建一个MarshallingContext或UnmarshallingContext对象,这些context对象应用对象图的遍历,并将具体的转换工作交给相应的converter来处理。
4.Facade
为了API用户可以方便的访问XML转换引擎,在设计上使用了facade模式,使用它来为整个模块提供一个统一的入口。通过整个入口就可以完成所有转换相关的工作。
所述服务调用器实现方式如下:
从请求传过来的XML数据中包含有服务名和服务方法,XML解析器获取这些信息后lookup缓存,如果在缓存中有对应的服务对象则使用反射机制调用它的服务方法;如果服务对象没有在缓存中,那么需要解析配置service.properties或spring配置文件,这些配置文件中包含了服务的具体信息,如服务名称、服务类等。出于性能方面的考虑,被解析处理的服务对象将被保存在缓存中。
所述面向服务层的API接口实现如下:
为了保证整个系统维持高内聚松耦合的设计理念,在系统的API设计上也做了一些详细的工作。所有公用的细节都被封装在框架之中,业务开发人员不需要了解这些琐碎的细节,他们只需要关注他们要实现的具体业务。为了保证服务层能够便捷的取到请求数据,系统对业务程序员公布了一个Requestcontext接口,该接口的API函数如下:
1.public final Object getBean(Class<?>key),获取内存中的由XML转 换引擎生成的业务对象。
2.public final void populateBeanFromHttpRequestParameter(Object bean),直接将请求参数key/value对转成相应的业务对象。
3.public final void populateBeanFromHttpRequestSessionAttr(Object bean),直接将session中key/value对转成相应的业务对象。
4.public final void populateBeanFromApplicationAttr(Object bean),直接将application中key/value对转成相应的业务对象。
5.public Map getSession(),获取session中的key/value对。
6.public Map getCookie(),获取cookie中的key/value对。
7.public Map getParameter(),获取请求参数中的key/value对。
8.public final Map getApplication(),获取ServletContext对象中的key/value对。
9.public final HttpServletRequest getHttpRequest(),获取请求对象。
10.public final ServletContext getServletContext(),获取Servlet上下文对象。
11.public final HttpSession getHttpSession(),获取session对象。
从上面的API可以看出,业务程序员能够使用这一接口获取所有与请求相关的数据,最重要的是他们不需要再一个一个的操作零散的数据。因为,这些请求数据要么已经被XML转换引擎转成了业务对象(使用getBean获取),要么可以根据实际情况使用populate*系列API函数手动注入请求数据到指定的业务对象中。
由上可见,本发明提供的一种基于XML RPC的前端与服务器的交互实现,有以下优点。
(1)使用方便,降低成本,提高效率
系统为前端和服务器端都提供了良好的API接口,这些API实际帮助业务程序员摆脱重复繁杂的工作。事实上,这些接口都是源于对流程的梳理和固化,并从中抽取公共的操作集。不论业务属于哪个领域接口都可以重用,很显然这样能够很大程度上提高开发效率,减低成本。
(2)应用范围广
本发明是基于B/S模式设计的,符合当前软件的发展方向,加之,不涉及任何业务的场景,所有的封装都是基于通用功能,只是对操作流程进行梳理和固化,所有基于WEB的应用都可以使用。由于提供了便捷、清晰的API接口,业务程序员可以快速上手,易于推广。
(3)高性能
本发明将性能指标作为一个重要的考量标准,并从多个角度进行性能方面的优化。前端采用AJAX技术来发送XML表单数据,AJAX固有的异步特性和局部刷新能力有力的保证了服务请求性能。服务器端使用了服务配置文件预装载和服务对象的缓存,使得在反射调用中具有更快的反应速度。此外,在XML转换引擎中使用了XML数据的缓存机制,有效防止了XML重复解析带来的开销。
通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本发明可借助不同开发语言平台的方式来实现,因为目前不同平台开发商针对某项技术都自己的不同实现,所以关键是能够理解本发明所体现的整合思路和强调的设计理念。
对于系统实施例而言,由于其基本相应于方法实施例,所以相关之处参见方法实施例的部分说明即可。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
在本申请所提供的实施例中,应该理解到,所揭露的系统和方法,在没有超过本申请的精神和范围内,可以通过其他的方式实现。当前的实施例只是一种示范性的例子,不应该作为限制,所给出的具体内容不应该限制本申请的目的。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (4)
1.一种基于XML RPC的前端与服务器的交互方式,其特征在于,包括:
一套封装良好的JS库、XML转换引擎和面向服务层的API接口;
所述JS库,用于:完成页面表单数据到XML格式的转换以及RPC回调结果绑定到表单;
所述XML转换引擎,用于:将XML格式的对象文本转成对应的内存对象以及将内存对象转成XML格式文本;
所述面向服务层的API接口,用于:服务层从内存中取到从页面传递过来的且经过了XML转换引擎转换过的业务对象。
2.一种将表单数据转成XML的方法,其特征在于,包括:
如果表单数据对应一个业务对象,那么可以通过JS库将单个表单直接转成一个XML;
如果表单数据对应多个业务对象且他们存在父子关系,那么通过JS库可以将单个表单直接转成一个有父子关系的XML;
如果页面使用了Grid组件,那么通过JS库可以将单个Grid直接转成一个XML;
如果页面使用了JSON数据,那么通过JS库也可直接将JSON数据转成一个XML。
3.一种将RPC回调结果绑定到表单的方法,其特征在于,包括:
如果RPC返回的数据为一个业务对象,那么可以直接通过JS库将它绑定到对应的表单上;
如果RPC返回的数据为一个List或Array,那么可以直接通过JS库将它绑定到select表单元素或JS的Array对象;
如果RPC返回的数据为一个Map,那么可以直接通过JS库将它绑定到select表单元素或JS对象。
4.一种对象和XML互转的方法,其特征在于,包括:
灵活易用:在更高的层次上提供简单、灵活、易用的统一接口,API用户不需要了解底层实现细节;
无需映射:大多数对象都可以在无需映射的情况下进行转换;
高速稳定:设计时力求达到的最重要的指标是解析速度快、占用内存少,以使之能够适应于大的对象处理或是对信息吞吐量要求高的情况;
清晰易懂:采用反射机制得到无冗余信息的XML信息;所生成的XML文本格式清晰,便于阅读;
无需修改:完全转换包括private和final类型在内的全部内部字段;支持非公有类和内部类,类可以没有缺省的构造函数;
灵活转换:转换策略是可以定制的,允许用户自定义特殊类型的对象如何以XML格式存储。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011102825715A CN103020062A (zh) | 2011-09-20 | 2011-09-20 | 一种基于xml rpc的前端与服务器的交互实现 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011102825715A CN103020062A (zh) | 2011-09-20 | 2011-09-20 | 一种基于xml rpc的前端与服务器的交互实现 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103020062A true CN103020062A (zh) | 2013-04-03 |
Family
ID=47968678
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011102825715A Pending CN103020062A (zh) | 2011-09-20 | 2011-09-20 | 一种基于xml rpc的前端与服务器的交互实现 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103020062A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103546476A (zh) * | 2013-10-30 | 2014-01-29 | 北京华胜天成科技股份有限公司 | 页面组件之间的消息传递方法及系统 |
CN105335310A (zh) * | 2014-06-05 | 2016-02-17 | 阿里巴巴集团控股有限公司 | 一种接口定义方法和数据传输方法及装置 |
CN106407399A (zh) * | 2016-09-21 | 2017-02-15 | 郑州云海信息技术有限公司 | 一种基于xml_rpc服务的云资源检索方法及系统 |
CN106569789A (zh) * | 2015-10-13 | 2017-04-19 | 北京国双科技有限公司 | 任务提交的方法和装置 |
CN109002362A (zh) * | 2017-06-06 | 2018-12-14 | 阿里巴巴集团控股有限公司 | 一种服务方法、装置、系统以及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050166209A1 (en) * | 1998-03-23 | 2005-07-28 | Webmethods | XML remote procedure call (XML-RPC) |
CN101694618A (zh) * | 2009-09-01 | 2010-04-14 | 卡斯柯信号有限公司 | 适用于ajax框架的模型层与视图层数据自动映射方法 |
CN102014028A (zh) * | 2010-12-22 | 2011-04-13 | 浪潮(北京)电子信息产业有限公司 | 一种集群监控方法及系统 |
-
2011
- 2011-09-20 CN CN2011102825715A patent/CN103020062A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050166209A1 (en) * | 1998-03-23 | 2005-07-28 | Webmethods | XML remote procedure call (XML-RPC) |
CN101694618A (zh) * | 2009-09-01 | 2010-04-14 | 卡斯柯信号有限公司 | 适用于ajax框架的模型层与视图层数据自动映射方法 |
CN102014028A (zh) * | 2010-12-22 | 2011-04-13 | 浪潮(北京)电子信息产业有限公司 | 一种集群监控方法及系统 |
Non-Patent Citations (3)
Title |
---|
刘一童: "使用XStream实现Java对象与XML转换", 《促进企业信息化进程-第九届中国JAVA技术及应用交流大会文集》, 1 December 2006 (2006-12-01), pages 57 - 61 * |
无墨来点睛: "Form表单的XML化", 《HTTP://WWW.CNBLOGS.COM/CATPRAYER/ARCHIVE/2010/10/26/1861405.HTML》, 26 October 2010 (2010-10-26), pages 1 - 4 * |
朱蕾 等: "基于XML-RPC协议的网页数据交换技术研究", 《科技信息(科学教研)》, no. 1, 1 January 2008 (2008-01-01), pages 65 - 54 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103546476A (zh) * | 2013-10-30 | 2014-01-29 | 北京华胜天成科技股份有限公司 | 页面组件之间的消息传递方法及系统 |
CN105335310A (zh) * | 2014-06-05 | 2016-02-17 | 阿里巴巴集团控股有限公司 | 一种接口定义方法和数据传输方法及装置 |
CN105335310B (zh) * | 2014-06-05 | 2020-05-08 | 阿里巴巴集团控股有限公司 | 一种接口定义方法和数据传输方法及装置 |
CN106569789A (zh) * | 2015-10-13 | 2017-04-19 | 北京国双科技有限公司 | 任务提交的方法和装置 |
CN106569789B (zh) * | 2015-10-13 | 2020-06-12 | 北京国双科技有限公司 | 任务提交的方法和装置 |
CN106407399A (zh) * | 2016-09-21 | 2017-02-15 | 郑州云海信息技术有限公司 | 一种基于xml_rpc服务的云资源检索方法及系统 |
CN109002362A (zh) * | 2017-06-06 | 2018-12-14 | 阿里巴巴集团控股有限公司 | 一种服务方法、装置、系统以及电子设备 |
CN109002362B (zh) * | 2017-06-06 | 2021-12-24 | 创新先进技术有限公司 | 一种服务方法、装置、系统以及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103019684B (zh) | 一种基于动态模板的配置业务页面的方法 | |
US20180321989A1 (en) | Late Connection Binding for Bots | |
CN111580820B (zh) | 一种小程序生成方法和装置 | |
US20170371508A1 (en) | Menu management method, server, and system | |
CN101984438B (zh) | 一种在线自助建站、创建应用服务与开发在线软件的方法 | |
CN104484216A (zh) | 服务接口文档和在线测试工具生成方法、装置 | |
CN102902745B (zh) | 一种地理信息web服务集成方法 | |
CN102938776A (zh) | 基于ajax技术的动态页面处理系统 | |
CN103020062A (zh) | 一种基于xml rpc的前端与服务器的交互实现 | |
CN103077185A (zh) | 一种基于对象的自定义扩展信息的方法 | |
DE112011102129T5 (de) | Sicherheitsmodell für Abläufe, die sichere Fremddienste zusammenführen | |
CN101334872B (zh) | 基于Web服务的电子公文交换方法 | |
US9557880B2 (en) | Shared user interface services framework | |
CN103546476A (zh) | 页面组件之间的消息传递方法及系统 | |
CN104135536A (zh) | 一种基于json数据协议的Web管理系统数据交互方法 | |
CN203086514U (zh) | 移动开放交互系统 | |
CN103713901A (zh) | 单据的展示方法和系统 | |
CN109241384A (zh) | 一种科研信息的可视化方法及装置 | |
CN101901404A (zh) | 网络竞赛平台 | |
CN104320396A (zh) | 数据交互装置和方法 | |
CN102364920B (zh) | 一种基于Android系统的远程操作方法和系统 | |
CN101895547A (zh) | 一种基于不确定服务的推荐系统及方法 | |
CN102831150A (zh) | 浏览器与本地应用的交互方法、系统及终端 | |
CN105912723A (zh) | 一种自定义字段的存储方法 | |
CN103561113A (zh) | Web Service接口的生成方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130403 |