CN105260179A - 一种实现flex与servlet交互的方法 - Google Patents
一种实现flex与servlet交互的方法 Download PDFInfo
- Publication number
- CN105260179A CN105260179A CN201510616330.8A CN201510616330A CN105260179A CN 105260179 A CN105260179 A CN 105260179A CN 201510616330 A CN201510616330 A CN 201510616330A CN 105260179 A CN105260179 A CN 105260179A
- Authority
- CN
- China
- Prior art keywords
- class
- servlet
- assembly
- request message
- flex
- 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
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种实现flex与servlet交互的方法,该方法包括:客户端上的flex组件发送请求报文至服务器上的servlet组件;其中,所述servlet组件为公共servlet组件;所述servlet组件从所述请求报文中提取类名和方法名,利用java反射机制动态加载实际的业务处理类,调用所述业务处理类对应的业务处理方法获得处理结果,并将所述处理结果进行封装后生成报文结果,向所述flex组件返回所述报文结果;所述flex组件接收所述报文结果。该方法实现在不改变已有代码结构的条件下满足新功能模块的扩展,实现OCP原则。
Description
技术领域
本发明涉及计算机应用技术领域,特别是涉及一种实现flex与servlet交互的方法。
背景技术
目前,flex可以通过HTTPService发送请求与后台java进行交互,请求中包含的xml报文封装了交互所需要的参数,后台servlet在接收到get/post请求后,解析xml报文中的参数,调用需要的处理类及方法,并将调用结果进行封装响应,flex解析后台返回的结果进行页面展示或者其他操作。这种传统的基于HTTPService进行交互一般有两种方式,一种是不同的业务需求由不同的servlet进行处理,这种方式下需要定义并配置多个servlet进行实现,会产生大量的重复操作,比如对请求信息的解析,对响应信息的封装等,不利于代码的后期维护。flex指代客户端上的flex组件,servlet指代服务器上的servlet组件。
另一种方式是使用公共servlet接收请求,公共servlet能够处理不同种类的业务需求,在servlet内部通过传递的参数判断进行不同的处理类及方法的调用,这种方式虽然满足了代码唯一性的条件,但是在存在新增请求时即实现模块扩展时,需要不断修改判断条件,需要在servlet中增加额外的处理类方法调用,需要修改servlet,来完成新增请求的处理,即完成servlet的功能扩展,不满足程序设计的OCP(Open-ClosedPrinciple,开闭原则),软件设计中的开闭原则的意思是一个软件实体应当对扩展开放,对修改关闭。也就是说,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,换句话说就是,应当可以在不必修改源代码的情况下改变这个模块的行为。所以在使用公共servlet的交互方式中,该交互方式不满足程序设计的OCP原则。
发明内容
本发明的目的是提供一种实现flex与servlet交互的方法,以实现在不改变已有代码结构的条件下满足新功能模块的扩展,实现OCP原则。
为解决上述技术问题,本发明提供一种实现flex与servlet交互的方法,该方法包括:
客户端上的flex组件发送请求报文至服务器上的servlet组件;其中,所述servlet组件为公共servlet组件;
所述servlet组件从所述请求报文中提取类名和方法名,利用java反射机制动态加载实际的业务处理类,调用所述业务处理类对应的业务处理方法获得处理结果,并将所述处理结果进行封装后生成报文结果,向所述flex组件返回所述报文结果;
所述flex组件接收所述报文结果。
优选的,所述请求报文为xml报文,所述xml报文中含有元素<class></class>和元素<method></method>,元素<class></class>和元素<method></method>分别指定实际处理请求的业务处理类和业务处理方法。
优选的,所述请求报文中包括所述servlet组件的映射地址url。
优选的,所述servlet组件从所述请求报文中提取类名和方法名,包括:
所述servlet组件在doPost/doGet方法中解析请求报文,从请求报文中提取出实际处理的类名称、方法名称以及类型为Element的业务参数。
优选的,所述servlet组件从所述请求报文中提取类名和方法名,包括:
所述servlet组件通过调用Class.forName()方法从请求报文中获取处理类定义class,并通过class.getInstance()方法创建类实例;
所述servlet组件根据class.getMethod()方法和请求报文中传递的方法名称获取要调用的方法定义method。
优选的,所述servlet组件利用java反射机制动态加载实际的业务处理类,调用所述业务处理类对应的业务处理方法获得处理结果,包括:
所述servlet组件通过method.invoke()方法、类实例以及业务参数,调用实际的业务处理方法进行业务处理并返回结果。
优选的,所述客户端上的flex组件发送请求报文至服务器上的servlet组件之后,还包括:
若请求报文需要进行拦截操作,所述servlet组件通过doPost/doGet方法对所述请求报文进行统一的拦截处理。
优选的,所述拦截操作包括验证请求、计算请求花费时长、记录日志或者请求相应参数转换。
本发明所提供的一种实现flex与servlet交互的方法,客户端上的flex组件发送请求报文至服务器上的servlet组件;其中,所述servlet组件为公共servlet组件;所述servlet组件从所述请求报文中提取类名和方法名,利用java反射机制动态加载实际的业务处理类,调用所述业务处理类对应的业务处理方法获得处理结果,并将所述处理结果进行封装后生成报文结果,向所述flex组件返回所述报文结果;所述flex组件接收所述报文结果。可见,该方法利用Java反射机制,直接通过类名和方法名调用实际的业务处理类及处理方法,完成请求报文的响应,实现flex与servlet之间的交互,这样在存在新的请求报文时,仍然只需要依据该请求报文中的类名及方法名,采用Java反射机制调用实际业务处理类和处理方法,不需要在交互过程中对新增请求进行判断,不需要修改判断条件,无需对servlet进行更改,就能完成flex与servlet之间的交互,实现servlet能够对新的请求报文进行处理,即servlet实现新功能的扩展,所以该交互方法实现在不改变已有代码结构的条件下满足新功能模块的扩展,实现OCP原则。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明所提供的一种实现flex与servlet交互的方法的流程图。
具体实施方式
本发明的核心是提供一种实现flex与servlet交互的方法,以实现在不改变已有代码结构的条件下满足新功能模块的扩展,实现OCP原则。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,图1为本发明所提供的一种实现flex与servlet交互的方法的流程图,该方法包括:
S11:客户端上的flex组件发送请求报文至服务器上的servlet组件;
其中,servlet组件为公共servlet组件。请求报文为xml报文,xml报文中含有元素<class></class>和元素<method></method>,元素<class></class>和元素<method></method>分别指定实际处理请求的业务处理类和业务处理方法。请求报文中包括servlet组件的映射地址url。
S12:servlet组件从请求报文中提取类名和方法名,利用java反射机制动态加载实际的业务处理类,调用业务处理类对应的业务处理方法获得处理结果,并将处理结果进行封装后生成报文结果,向flex组件返回所述报文结果;
其中,servlet组件在doPost/doGet方法中解析请求报文,从请求报文中提取出实际处理的类名称、方法名称以及类型为Element的业务参数。servlet组件通过调用Class.forName()方法从请求报文中获取处理类定义class,并通过class.getInstance()方法创建类实例,servlet组件根据class.getMethod()方法和请求报文中传递的方法名称获取要调用的方法定义method。Servlet组件通过method.invoke()方法、类实例以及业务参数,调用实际的业务处理方法进行业务处理并返回结果。
其中,Java的反射机制是指java在运行状态时可以动态加载、探知和使用在编译期间没有加载的类,即在运行时可以通过类名称获取其完整构造,生成对象实体并调用其方法。利用此机制实现在运行时根据flex组件请求动态加载处理类并调用处理方法的过程。
S13:flex组件接收报文结果。
可选的,客户端上的flex组件发送请求报文至服务器上的servlet组件之后,还包括:若请求报文需要进行拦截操作,servlet组件通过doPost/doGet方法对请求报文进行统一的拦截处理。其中,拦截操作包括验证请求、计算请求花费时长、记录日志或者请求相应参数转换。需要说明的是,flex组件简称为flex,servlet组件简称为servlet,即flex指代客户端上的flex组件,servlet指代服务器上的servlet组件,公共servlet指代服务器上的公共servlet组件。
具体的,该方法包含三个角色:公共servlet、flex和实际的业务处理类。其中,flex发送的请求由公共servlet进行受理,servlet在接收到请求后,根据请求报文中传递的类名称和方法名称,动态加载实际的业务处理类,调用处理方法,并将处理结果封装返回flex。利用反射机制实现flex与后台servlet交互的模型如下:
(1)约定flex与后台交互的报文,在xml报文中增加元素<class></class>和<method></method>分别指定实际处理请求的业务类及方法,约定如果不配置method元素,则默认调用业务类中的doHandler方法。
(2)定义公共servlet类,在doPost/doGet方法中首先解析请求中传递的xml报文,在xml报文中提取出实际处理的类名称、方法名称以及类型为Element的业务参数。
(3)根据步骤(2)中获取的类名称,servlet通过调用Class.forName()方法获取处理类定义class,并通过class.getInstance()方法创建类实例。根据class.getMethod()方法和请求传递的方法名称可以获取要调用的方法定义method,最后,通过method.invoke()方法、类实例以及步骤(2)中获得的业务参数,调用实际的业务处理方法进行业务处理并返回结果。
(4)定义实际的业务处理类,类中包含的处理方法均以Element类型为入参,如果需要支持不包含<method>元素的处理请求,类中需要定义名称为doHandler的处理方法。
(5)在flex发送请求时配置请求的url指向步骤(2)定义的servlet,配置xml报文中的class与method元素内容为步骤(4)中定义的类名与方法名。
(6)在servlet的doPost/doGet方法中可以统一调用程序耗时计算或者日志记录方法进行请求的拦截处理。
详细的,该方法实现操作如下:
首先,定义公共Servlet,在其doPost/doGet方法中实现请求报文的解析、通过反射调用处理类及方法、相应报文的封装。具体代码如下:
其中,doGet方法与doPost方法处理类似,也可直接在doGet方法中调用doPost方法实现功能。
然后,定义实际的业务处理类,包含默认的处理方法以及特定名称的处理方法,具体代码如下:
接着,在flex发送请求时配置如下:
配置请求的url为上述定义公共servlet的过程中定义的servlet,指定请求与返回的报文均为xml格式。代码如下:
varhttp:HTTPService=newHTTPService();
http.contentType="application/xml";
http.url="gateServlet";
http.method="POST";
http.resultFormat="xml";
配置xml报文中的处理类名和方法名为上述定义实际业务处理类的过程中定义的类与方法。代码如下:
最后,通过以上配置,servlet在接收到flex发送的请求后,会调用ProcessA类中的methodA方法进行处理,如果需要调用doHandler方法,则可以修改报文中method元素的值,或者直接不配置method元素。
这样,如果需要进行功能扩展,使用其他处理类处理业务实现,可以直接将实现的处理类名及方法名配置在flex发送的xml报文中,servlet不需要做任何修改或配置。并且,如果需要对请求进行拦截处理,比如验证请求、计算请求花费时长、记录日志、请求响应参数转换等功能,都可以直接在servlet中进行统一的调用实现。
综上,本发明所提供的一种实现flex与servlet交互的方法,客户端上的flex组件发送请求报文至服务器上的servlet组件;其中,servlet组件为公共servlet组件;servlet组件从所述请求报文中提取类名和方法名,利用java反射机制动态加载实际的业务处理类,调用所述业务处理类对应的业务处理方法获得处理结果,并将所述处理结果进行封装后生成报文结果,向flex组件返回所述报文结果;flex组件接收所述报文结果。可见,该方法利用Java反射机制,直接通过类名和方法名调用实际的业务处理类及处理方法,完成请求报文的响应,实现flex与servlet之间的交互,这样在存在新的请求报文时,仍然只需要依据该请求报文中的类名及方法名,采用Java反射机制调用实际业务处理类和处理方法,不需要在交互过程中对新增请求进行判断,不需要修改判断条件,无需对servlet进行更改,就能完成flex与servlet之间的交互,实现servlet能够对新的请求报文进行处理,即servlet实现新功能的扩展,所以该交互方法实现在不改变已有代码结构的条件下满足新功能模块的扩展,实现OCP原则。
并且,若请求报文需要进行拦截操作,servlet通过doPost/doGet方法对所述请求报文进行统一的拦截处理,实现为公共操作提供统一的拦截处理,比如解析请求报文、封装请求报文、日志统计等等,提高了代码的可复用性以及可维护性。
以上对本发明所提供的一种实现flex与servlet交互的方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (8)
1.一种实现flex与servlet交互的方法,其特征在于,包括:
客户端上的flex组件发送请求报文至服务器上的servlet组件;其中,所述servlet组件为公共servlet组件;
所述servlet组件从所述请求报文中提取类名和方法名,利用java反射机制动态加载实际的业务处理类,调用所述业务处理类对应的业务处理方法获得处理结果,并将所述处理结果进行封装后生成报文结果,向所述flex组件返回所述报文结果;
所述flex组件接收所述报文结果。
2.如权利要求1所述的方法,其特征在于,所述请求报文为xml报文,所述xml报文中含有元素<class></class>和元素<method></method>,元素<class></class>和元素<method></method>分别指定实际处理请求的业务处理类和业务处理方法。
3.如权利要求1所述的方法,其特征在于,所述请求报文中包括所述servlet组件的映射地址url。
4.如权利要求1所述的方法,其特征在于,所述servlet组件从所述请求报文中提取类名和方法名,包括:
所述servlet组件在doPost/doGet方法中解析请求报文,从请求报文中提取出实际处理的类名称、方法名称以及类型为Element的业务参数。
5.如权利要求4所述的方法,其特征在于,所述servlet组件从所述请求报文中提取类名和方法名,包括:
所述servlet组件通过调用Class.forName()方法从请求报文中获取处理类定义class,并通过class.getInstance()方法创建类实例;
所述servlet组件根据class.getMethod()方法和请求报文中传递的方法名称获取要调用的方法定义method。
6.如权利要求5所述的方法,其特征在于,所述servlet组件利用java反射机制动态加载实际的业务处理类,调用所述业务处理类对应的业务处理方法获得处理结果,包括:
所述servlet组件通过method.invoke()方法、类实例以及业务参数,调用实际的业务处理方法进行业务处理并返回结果。
7.如权利要求1至6中任意一项所述的方法,其特征在于,所述客户端上的flex组件发送请求报文至服务器上的servlet组件之后,还包括:
若请求报文需要进行拦截操作,所述servlet组件通过doPost/doGet方法对所述请求报文进行统一的拦截处理。
8.如权利要求7所述的方法,其特征在于,所述拦截操作包括验证请求、计算请求花费时长、记录日志或者请求相应参数转换。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510616330.8A CN105260179A (zh) | 2015-09-24 | 2015-09-24 | 一种实现flex与servlet交互的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510616330.8A CN105260179A (zh) | 2015-09-24 | 2015-09-24 | 一种实现flex与servlet交互的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105260179A true CN105260179A (zh) | 2016-01-20 |
Family
ID=55099883
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510616330.8A Pending CN105260179A (zh) | 2015-09-24 | 2015-09-24 | 一种实现flex与servlet交互的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105260179A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656805A (zh) * | 2018-09-28 | 2019-04-19 | 阿里巴巴集团控股有限公司 | 用于业务分析的代码链路的生成方法、装置及业务服务器 |
CN111443901A (zh) * | 2018-12-27 | 2020-07-24 | 北京奇虎科技有限公司 | 一种基于Java反射的业务扩展方法及装置 |
WO2021218069A1 (zh) * | 2020-04-27 | 2021-11-04 | 平安科技(深圳)有限公司 | 基于场景动态配置的交互处理方法、装置、计算机设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2003065144A2 (de) * | 2002-01-30 | 2003-08-07 | Abb Patent Gmbh | Verfahren zum empfang und zur weiterleitung beliebiger client-anfragen in einem client/serversystem |
CN102799424A (zh) * | 2012-06-12 | 2012-11-28 | 上海雷腾软件有限公司 | 一种敏捷式高效分层服务器端的接口架构 |
CN103544016A (zh) * | 2013-10-28 | 2014-01-29 | 珠海许继芝电网自动化有限公司 | 一种基于java反射技术的服务注册配置方法及系统 |
CN103713982A (zh) * | 2014-01-26 | 2014-04-09 | 飞狐信息技术(天津)有限公司 | 对远程服务的返回结果进行监测的方法和装置 |
CN104821954A (zh) * | 2015-03-27 | 2015-08-05 | 中国海洋大学 | 一种跨平台远程过程调用方法 |
-
2015
- 2015-09-24 CN CN201510616330.8A patent/CN105260179A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2003065144A2 (de) * | 2002-01-30 | 2003-08-07 | Abb Patent Gmbh | Verfahren zum empfang und zur weiterleitung beliebiger client-anfragen in einem client/serversystem |
CN102799424A (zh) * | 2012-06-12 | 2012-11-28 | 上海雷腾软件有限公司 | 一种敏捷式高效分层服务器端的接口架构 |
CN103544016A (zh) * | 2013-10-28 | 2014-01-29 | 珠海许继芝电网自动化有限公司 | 一种基于java反射技术的服务注册配置方法及系统 |
CN103713982A (zh) * | 2014-01-26 | 2014-04-09 | 飞狐信息技术(天津)有限公司 | 对远程服务的返回结果进行监测的方法和装置 |
CN104821954A (zh) * | 2015-03-27 | 2015-08-05 | 中国海洋大学 | 一种跨平台远程过程调用方法 |
Non-Patent Citations (1)
Title |
---|
刘瑾 等: "基于Java 代理和HTTP 协议的RMI 框架的实现", 《现代计算机》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656805A (zh) * | 2018-09-28 | 2019-04-19 | 阿里巴巴集团控股有限公司 | 用于业务分析的代码链路的生成方法、装置及业务服务器 |
CN109656805B (zh) * | 2018-09-28 | 2022-01-25 | 创新先进技术有限公司 | 用于业务分析的代码链路的生成方法、装置及业务服务器 |
CN111443901A (zh) * | 2018-12-27 | 2020-07-24 | 北京奇虎科技有限公司 | 一种基于Java反射的业务扩展方法及装置 |
CN111443901B (zh) * | 2018-12-27 | 2024-02-09 | 三六零科技集团有限公司 | 一种基于Java反射的业务扩展方法及装置 |
WO2021218069A1 (zh) * | 2020-04-27 | 2021-11-04 | 平安科技(深圳)有限公司 | 基于场景动态配置的交互处理方法、装置、计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106776313B (zh) | 一种模拟服务的方法、装置及集中管理平台 | |
CN109002362B (zh) | 一种服务方法、装置、系统以及电子设备 | |
US10326864B2 (en) | Dynamic orchestration of microservices | |
CN111290865A (zh) | 一种服务调用方法、装置、电子设备和存储介质 | |
CN109815025B (zh) | 一种业务模型调用方法、装置及存储介质 | |
CN102591724B (zh) | 消息交互方法及装置 | |
CN108512748A (zh) | 一种微服务网关的实现方法 | |
CN104572099B (zh) | 基于组件和中间件的低耦合框架数据处理方法及系统 | |
CN104301401A (zh) | 一种基于快速服务封装的移动应用平台 | |
US7519972B2 (en) | Real-time multi-modal business transformation interaction | |
CN105893055A (zh) | 流程引擎平台化触发方法 | |
CN105260179A (zh) | 一种实现flex与servlet交互的方法 | |
Bo et al. | Development of Web-Telecom based hybrid services orchestration and execution middleware over convergence networks | |
Sadjadi et al. | Using transparent shaping and web services to support self-management of composite systems | |
CN103561113B (zh) | Web Service接口的生成方法及装置 | |
US9537931B2 (en) | Dynamic object oriented remote instantiation | |
CN114416314A (zh) | 一种基于api网关的服务编排方法 | |
CN106844156A (zh) | 智能建筑综合管理平台系统中wcf通信消息拦截方法 | |
CN107291455B (zh) | 一种基于工厂模式实现转账业务的方法及系统 | |
Pop et al. | A cyber-physical systems oriented platform using web services | |
CN102075646B (zh) | 呼叫中心设备控制系统及方法 | |
CN106775719B (zh) | 基于移动终端的跨平台的轻量数据库封装方法及系统 | |
Cheng et al. | Context-aware web services orchestration for multimedia conference process management | |
Hughes et al. | A loosely-coupled binding model for Wireless Sensor Networks | |
CN114124508B (zh) | 一种应用登录方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160120 |