《2022年Flex和Java应用程序的架构 .pdf》由会员分享,可在线阅读,更多相关《2022年Flex和Java应用程序的架构 .pdf(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Flex 和 Java 应用程序的架构客户端 /服务器架构Flex 和 Java 应用程序使用一个多层架构,其中的应用程序层是 Flex 应用程序,业务或应用程序层是Java EE 服务器和代码,数据层则是数据库。 您可以像普通Java 应用程序一样编写后端代码、为对象建模、定义数据库、使用Hibernate 或 EJB 3 等对象关系框架、编写用于查询和操作这些对象的业务逻辑。业务层必须可以从Flex 应用程序通过HTTP 进行访问,它将用于移动演示层与数据层之间的数据。典型的HTML 应用程序包含多个页面, 当用户在页面之间导航时,必须传递应用程序数据,这样应用程序本身(它包含的页面和功能
2、集)可以保持状态。相对而言,Flex 应用程序在本质上有状态。 Flex 应用程序嵌入一个HTML 页面,用户不会离开该页面并且页面由Flash Player 渲染。Flex 应用程序可以动态更改视图, 在后台向服务器异步发送和检索数据,更新应用程序界面,但不会离开该界面 (请参阅图1) (与 XMLHttpRequest API 使用 JavaScript 提供的功能相似)。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 21 页 - - - - - - - - - 图
3、 1.客户端 / 服务器架构。客户端 / 服务器通信Flex 应用程序可以使用直接套接字连接或更常见的HTTP 与后端服务器通信。 Flex 框架有三个通过HTTP 与服务器通信的远程过程调用API :HTTPService 、WebService 和RemoteObject 。它们三个包起Flash Player 的 HTTP 连接性,而后者则使用浏览器的HTTP 库。 Flex 应用程序无法直接连接到远程数据库。您使用HTTPService 对 JSP 或 XML 文件、 RESTful Web 服务或通过HTTP 返回文本的其他服务器文件发出HTTP 请求。您为返回的数据指定端点URL
4、、listener 函数(当HTTPService 请求返回成功或失败响应时调用的回调函数)以及数据类型(一旦Flex 应用程序收到后,应当将它转换为哪种数据结构)。您可以将待处理的数据指定为原始数据文本,分配到 String 变量或转换为XML 、E4X 或传统的ActionScript 对象。如果回到JSON,您可以使用Adobe Flex corelib*类包将 JSON 对象反序列化为ActionScript 对象。要对基于名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2
5、页,共 21 页 - - - - - - - - - SOAP 的 Web 服务器发出调用,您可以使用HTTPService API 或更专用的WebService API ,后者会将SOAP 格式的文本自动序列化和反序列化为ActionScript 数据类型或反之。发出远程过程调用的第三个选项是使用RemoteObject API。它对服务器端Java 类的方法发出Flash Remoting 请求,该类通过 HTTP 返回二进制Action Message Format。尽可能使用Flash Remoting , 它的二进制数据传输格式使应用程序载入数据的速度比XML 、JSON 或 SO
6、AP 等更冗长、基于文本的格式快 10 倍(请参阅图2)。有关AMF 与其他基于文本的序列化技术的对比,请参阅James Ward 的 Census RIA Benchmark 应用程序 *。图 2.Flex 和 Java 的连接方法。Flash Remoting Flash Remoting 是客户端和服务器端功能的组合,它们为从Flash Platform 应用程序访问服务器端对象共同提供了一个调用和响应模型, 仿佛它们是本地对象一样。 它在 ActionScript 和名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精
7、心整理 - - - - - - - 第 3 页,共 21 页 - - - - - - - - - 服务器端数据类型之间提供透明的数据传输、序列化为Action Message Format (AMF)、反序列化以及客户端与服务器之间的数据编组。Flash Remoting 使用 Flash Player 中的内建客户端功能和某些服务器中的内建服务器端功能(如ColdFusion 和 Zend ),但必须安装在其他服务器上(例如,BlazeDS*或 LiveCycle Data Services*安装在Java EE 服务器上, WebORB 或FluorineFX 安装在.NET 服务器上,
8、Zend Framework 或amfphp 安装在PHP 服务器上,等等)。有关BlazeDS 和LiveCycle Data Services 的更多详细信息,请参阅Flex 和Java 应用程序的构建技术一文。BlazeDS 和 LiveCycle Data Services 使用基于消息的框架在客户端和服务器之间来回发送数据。它们提供Remoting 、Proxying 和 Messaging 服务,并为LiveCycle 提供附加的Data Management 服务。Flex 应用程序向服务器发送请求,请求将传递到服务器上的端点。请求从端点传递到MessageBroker ,这是
9、BlazeDS 和 LiveCycle Data Services 引擎,它负责处理所有请求并将它们通过一系列Java 对象传递到目标包含要调用的方法的Java 类(请参阅图3)。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 21 页 - - - - - - - - - 图 3.Flash Remoting 架构。AMF AMF 是一种二进制格式,它用于序列化ActionScript 对象并促进 Flash Platform 应用程序与远程服务之间通过Internet
10、进行的数据交换。 Adobe 发表该协议;最新的是针对ActionScript 3 的 AMF 3 规范 *。此处 包含一些表格,其中列出了从ActionScript 转换为Java 以及从Java 转换为ActionScript 的数据类型映射。对于自定义类型或强类型对象,公共属性(包括使用get 和 set 方法定义的那些属性) 经过序列化,作为一般对象的属性从Flex 应用程序发送到服务器,或从服务器发送到Flex 应用程序。要实现相应的客户端与服务器端对象之间的映射,您在Java 和ActionScript 类中使用相同的属性名,然后在ActionScript 类中, 使用Remote
11、Class 元数据标签创建一个直接映射到Java 对象的 ActionScript 对象。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 21 页 - - - - - - - - - 以下是一个示例Employee ActionScript 类, 它映射到服务器上的服务包中的服务器端Employee Java DTO 。package valueobjects.Employee Bindable RemoteClass(alias=services.Employee) p
12、ublic class Employee public var id:int; public var firstName:String; public var lastName:String; (.) 安装 BlazeDS 或 LiveCycle Data Services 要将 Flash Remoting 与 BlazeDS 或 LiveCycle Data Services 一起使用,您需要安装和配置必要的服务器端文件。对于BlazeDS, 您可以将它作为一个WAR 文件下载,并部署为Web 应用程序或统包解决方案。统包下载包含一个可随时使用的Tomcat 版本,其中已部署和配置Blaz
13、eDS WAR 文件以及各种范例应用程序。同样,对于LiveCycle Data Services ,安装程序允许您选择与一台集成Tomcat 服务器一起安装LiveCycle 或是作为LiveCycle Data Services Web 应用程序进行安装。无论哪种情况,都会创建一个名为blazeds 或 lcds(通常后跟一个版本号) 的 Web 应用程序。 您可以使用自己的Java 代码修改并构建这个应用程序,或者通过一种更典型的方法,即复制blazeds 或 lcds Web 应用程序包含的JAR 文件和配置文件,名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
14、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 21 页 - - - - - - - - - 然后将它们添加到服务器上的现有Java Web 应用程序(请参阅图 4)。图 4. 必需的BlazeDS 或 LiveCycle Data Services 文件。修改 web.xml 如果将这些文件复制到其他Web 应用程序,您还需要修改web.xml 文件,为HttpFlexSession 定义一个会话监听器,并为 MessageBroker 定义一个servlet 映射,它会处理所有请求并将它们传递到正确的服务器端Java 端点。您可以从原始b
15、lazeds 或 lcds Web 应用程序web.xml 文件复制粘贴它们。 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 21 页 - - - - - - - - - flex.messaging.HttpFlexSession MessageBrokerServlet MessageBrokerServlet flex.messaging.MessageBrokerServlet services.configuration.file /WEB-INF/flex/
16、services-config.xml 1 MessageBrokerServlet /messagebroker/* 您也可以复制粘贴RDSDispatchServlet 的映射(并取消注释) ,它与 Flash Builder 4 的数据服务创建功能一起用于RDS 访问,该功能将检查服务器端类并生成相应的客户端代码。有关Adobe 应用程序建模技术的更多详细信息,请参阅文章Flex 和 Java 应用程序构建技术 以及教程 使用 Flash Builder 4 构建连接到BlazeDS Remoting 目标的Flex 应用程序 。 RDSDispatchServlet RDSDispat
17、chServlet flex.rds.server.servlet.FrontEndServlet useAppserverSecurity false 10 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 21 页 - - - - - - - - - RDSDispatchServlet /CFIDE/main/ide.cfm 查看 services-config.xml 对于 Flash Remoting ,客户端会向服务器发送一个待处理的请求,然后服务器将包含结果的
18、响应返回给客户端。您通过修改Web 应用程序的/WEB-INF/flex/ 文件夹中的services-config.xml 和 remoting-config.xml 文件,配置这些请求。services-config.xml 文件定义了发出请求时可使用的不同通道。每个通道定义指定了请求使用的网络协议和消息格式,以及服务器上消息的交付端点。 基于 Java 的端点以协议特定方式分解消息,然后将消息以Java 形式传递到MessageBroker ,后者将它们发送到相应的服务目标(接下来将说明如何定义它们)。 (.) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
19、 - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 21 页 - - - - - - - - - 定义目标在 remoting-config.xml 文件中,您将定义MessageBroker 传递消息的目标(对Java 类的命名映射)。您使用一个无参数构造函数将source属性设置为完全限定的Java POJO 类名,该构造函数位于一个源路径中,一般通过将它放入Web 应用程序的 /WEB-INF/classes/ 目录或/WEB-INF/lib/ 目录中的JAR 文件做到这一点。 可以访问Java 命名和目录接口(JNDI) 中存储的EJB 和其
20、他对象,方法是对目标调用方法,该方法是在 JNDI 中查找对象并调用其方法的服务facade 类。您可以访问无状态或有状态Java 对象,方法是将scope属性设置为 application 、session 或 request(默认)。对引用的服务器端对象的实例化和管理由BlazeDS 或 LiveCycle Data Services 负责。 services.EmployeeService application 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 2
21、1 页 - - - - - - - - - 您也可以为各个目标指定通道。 最后,在 Flex 应用程序中定义RemoteObject 实例时,您将使用这些目标。 安全性在许多应用程序中, 对部分或全部服务器端资源的访问必须限制为特定用户。许多Java EE 应用程序使用容器管理的安全性,其中对Realm 执行用户验证(验证用户)和用户授权(决定用户可以访问什么通常基于角色),Realm 是一个现有的用户名、密码和用户角色存储。在Java EE 服务器上将Realm 配置为关系数据库、 LDAP 目录服务器、 XML 文档或配置为使用特定验证和授权框架。要将 Flex 应用程序与Java EE
22、安全性框架集成在一起,从而适当地限制对服务器端资源的访问,您可以将安全性信息添加到BlazeDS 或 LiveCycle Data Services 配置文件(以下提供详细信息),然后,通常在Flex 应用程序中创建一个表单,使用它从用户那里获取登录凭据,再传递给待验证的服务器。对于所有后续请求,用户凭据会自动传递到服务器。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 21 页 - - - - - - - - - 修改 services-config.xml 在 Bl
23、azeDS 或 LiveCycle Data Services services-config.xml 文件中,您需要在标签中为您的应用程序服务器指定“login command”。BlazeDS 和 LiveCycle Data Services 提供以下登录命令: TomcatLoginCommand(用于Tomcat 和JBoss)、JRunLoginCommand、WeblogicLoginCommand、WebSphereLoginCommand、OracleLoginCommand。它们都在 XML 文件中定义,您只需对相应项取消注释即可。您还需要定义一个安全性限制,将它指定为使用
24、基本或自定义验证,如果需要,还可以指定一个或多个规则。要使用Tomat 或JBoss 进行自定义验证, 您还需要向Web 应用程序另外添加一些类,用于同Jave EE 应用程序服务器使用的安全性框架集成,并修改几个配置文件。此处*提供更多详细信息。 false Custom employees managers . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 21 页 - - - - - - - - - 修改 remoting-config.xml 接下来,您需要在
25、目标定义中引用安全性限制: services.EmployeeService 您也可以为所有目标定义默认安全性限制和/ 或将访问权限制为特定方法可使用不同的安全性限制。默认通道my-amf 使用 HTTP 。您可以将一个或多个目标更改为使用my-secure-amf 通道,该通道使用HTTPS: . 在 services-config.xml 文件中定义my-secure-amf: 将代码添加到Flex 应用程序名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 21 页
26、- - - - - - - - - 它涵盖了服务器端设置。现在,如果要使用自定义验证,您需要在 Flex 应用程序中创建一个表单,用于从用户那里检索用户名和密码,然后通过调用ChannelSet.login()方法并监听其result和fault事件,将这些凭据传递到服务器。result事件表明登录(验证)成功完成,fault事件表明登录失败。凭据适用于通过相同 ChannelSet 连接的所有服务。对于基本验证,您不必向Flex 应用程序添加任何内容。当应用程序第一次尝试连接到目标时,浏览器会打开一个登录对话框。您的应用程序现在可以像之前那样向服务器目标发出Flash Remoting 请求
27、,但现在每个请求会自动发出用户凭据(对于基本和自定义验证) 。如果目标或目标的方法指定的授权角色与登录的用户不符, 调用将返回一个fault事件。要删除凭据并注销用户,可使用ChannelSet.logout()方法。Flex 应用程序架构您已学会如何在服务器端设置Flash Remoting 以及如何使用Flex 定义 RemoteObject 实例,我们现在看看如何构建一个应用程序来使用这个对象。使用事件一个典型的Flex 应用程序包含用于定义用户界面的MXML 代码以及用于逻辑的ActionScript 代码。 像 JavaScript 及浏览名师资料总结 - - -精品资料欢迎下载 -
28、 - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 21 页 - - - - - - - - - 器 DOM 对象一样,它们通过事件和事件处理函数连接在一起。要使用应用程序中的RemoteObject ,您需要定义实例、调用服务器端远程目标的方法、为result和fault事件指定回调函数,并在其中使用服务器返回的数据进行一些操作。这里有一个简单的应用程序,它从一个数据库检索员工数据,并在一个Flex DataGrid 组件中显示这些数据。初始化应用程序后,将调用服务器上的remoting-config.xml 文件
29、中定义的employeeService 目标的getEmployees()方法,如果服务器成功返回数据,将填充变量employees,如果请求出于任何原因失败,警告框中将显示一条消息。数据绑定用于将employees变量绑定到 DataGrid 的dataProvider属性。 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 21 页 - - - - - - - - - 使用 RemoteObject 时,可以在服务层级定义result和fault处理程序: 在方法层级
30、: 或根据每个调用: 使用数据绑定名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 21 页 - - - - - - - - - 数据绑定是Flex 框架的一个强大部分,当数据更改时,它允许您更新用户界面, 并且不必明确注册和编写事件监听器完成该操作。 在之前的应用程序代码中,employees变量定义前的Bindable标签是一个编译器指令;编译该文件时,会自动生成ActionScript 代码,这样每当employees变量改变时,将广播事件。Bindablepriv
31、ate var employees:ArrayCollection; DataGrid 的dataProvider属性赋值中的花括号实际会生成代码,用于监听employees变量的变化,当它更改时,将相应地更新DataGrid 视图。 在这个应用程序中,employees最初为空并且DataGrid 中不显示数据,但从服务器成功检索到数据并填充employees后,将更新 DataGrid 以显示员工数据。使用视图状态要在运行时对用户界面动态做出更极端的更改,如添加、删除、移动或修改组件,可使用Flex 视图状态 *。对于每个Flex 视图或组件,可以定义多个状态;对于视图中的每个对象,可以定
32、义应当将它包含在哪个状态中、它的外观以及它在状态中应该做什么。将组件的currentState属性设置为某个已定义状态的名称,即可在不同状态之间切换。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 21 页 - - - - - - - - - 使用 MXML 组件当应用程序逐渐变大时, 您需要将逻辑细分为多个ActionScript 类包,将视图细分为不同的MXML 文件 (称为MXML 组件)。每个 MXML 组件扩展一个现有组件, 并且只能包含在一个应用程序中, 但
33、不能独立运行。 要使用MXML 编写的组件, 您将该组件的一个实例 (它的类名与其文件名相同)实例化并包含正确的命名空间,以便编译器可以找到它。以下是MXML 组件 Masterview 的代码,它被保存为com.adobe.samples.views 包中的MasterView.mxml。 Event(name=masterDataChange,type=flash.events.Event) 以下是实例化并使用那个自定义MasterView 组件的应用程序的代码。 广播事件要构建松耦合组件,您需要为组件(它的公开成员)定义一个公共 API 和/ 或如以上MasterView 代码示例所示定
34、义并广播自定义事件。Event元数据用于将事件作为该组件的API 的一部分进行定义,并指定它广播的事件对象的类型。 Event(name=masterDataChange,type=flash.events.Event) 当组件中发生一些事件时(在本例中,DropDownList change事件),组件将创建并广播元数据中指定事件对象类型的实例。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 21 页 - - - - - - - - - this.dispatchEv
35、ent(new Event(masterDataChange); 实例化这个自定义组件的代码此时可以注册监听这个自定义事件,并注册一个事件处理程序。 像这样定义并广播自定义事件的松耦合组件是Flex 应用程序的核心构造块。 事实上,这是 Flex 框架本身的组件的构建方式。有关广播自定义事件的更多信息,请观看视频使用 Flash Builder 4 定义 Flex 4 中的事件 *。创建模块默认情况下,所有代码将编译到一个SWF 文件中。如果您的SWF 文件变得很大或是包含只有特定用户可能使用的功能,您可以使用 模块*将应用程序分为多个SWF 文件,它们在运行时可以由主应用程序动态载入和卸载。
36、要创建模块, 您创建一个扩展 Module 类的类(使用MXML 的 ActionScript ),然后编译它。要在运行时将模块动态载入一个应用程序,可使用标签或ModuleLoader 类的方法。使用微型架构它涵盖了应用程序构建的基础知识,但随着您的应用程序越变越大,您希望通过一些方法来组织文件、集中应用程序数据和数据服务、处理所有组件之间的通信。要这样做,您可以使用企业应用程序开发领域多年来久经考验的各种设计模式构建自己的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,
37、共 21 页 - - - - - - - - - Flex 应用程序。事实上,许多特定于Flex 的微型架构已经开发完成并且不断完善。最早并且最知名的莫过于Cairngorm*,这是一个开放源代码微型架构,它使用命令和授权、 前端控制程序、一个单例数据模型、一个单例服务存储和一个事件分发器。其他常用框架包括Pure MVC* 、Mate* 、Parsley* 、Swiz* 和Spring ActionScript*。有关这些框架和其他框架的更多信息,请参阅 Adobe 开发人员中心的Flex 架构。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 21 页 - - - - - - - - -