扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
不断发展的 Java 编程语言和 Sun 公司的 J2EE 规范使得遵守各类准则的软件开发者们能够创建出分布式计算应用程序,这些应用程序在以前只能通过相关属性工具才可实现。这样,当某些开发团体要选择在 Java 平台中实现新系统时,其他团体就会通过另外的技术来创建、提高并维护应用程序,然后将它们集成到已有的各类分布式应用程序中去。这种情形就引起了互操作性的竞争。新应用程序与旧应用程序如何交互呢?答案就是:Web 服务。Web 服务是程序设计新的圣杯。它们能够共享并协调分散的各类计算资源。
在本文中,您将了解实现此目的的一种方法。您将看到如何在与 Web 服务相结合的开放源码 Structs 框加的基础上来构建应用程序。在开始之前您必须了解一些 J2EE 与 Web 服务的相关知识。这里,我将简要地介绍下 Structs 架构与模型-视图-控制器(MVC)。
MVC 模式:分离开发角色
MVC 设计模式很清楚的划定了程序员与设计者的角色界限。换句话说,从商业逻辑上拆解了数据。这种模式是让设计者集中于设计应用程序的显示部分,而开发者则集中于开发驱动应用程序功能所需的组件。
MVC 模式有好几种变异,不过它们都是基于相同的基础结构:应用程序的数据模型 (Model),代码显示(View),以及程序控制逻辑( Controller) 是存在其中的独立但能相互间通信的组件。模型组件描述并处理应用程序数据。视图指的是用户接口;它反映的是模型数据并把它递交给用户。控制器是将视图上的行为(例如,按下 Submit 按钮)映射到模型上的操作(例如,检索用户详细信息)。模型更新后,视图也被更新,用户就能够完成更多行为。MVC 模式使代码易懂而且使代码更容易重用;另外,在很多工程中视图经常要被更新,MVC 模式将模型和控制器与这些所做的更改独立开来。
图 1 MVC 模式概要
Struts:基于 MVC 的坚固框架
Struts 是 MVC 模式基础上构建 Web 应用程序的一种开放源码框加。Structs 鼓励在 MVC 模式上构建应用程序而且提供大多数 Web 应用程序所共有的服务。
在 Struts 应用程序中,您可以构建模型层,这样业务逻辑与数据检索逻辑重用就很容易了。这层负责运行应用程序的业务逻辑,获取相关数据(例如,运行 SQL 命令或者读取平面文件)。
Struts 鼓励在模型-视图-控制器设计范例基础上构建应用程序。Structs 提供自己的控制器组件(ActionController 类)并与其他技术相结合来提供模型与视图。对于模型(Model 类), Struts 能与任何标准的数据访问技术相结合,包括 EJB、JDBC 以及 Object-Relational Bridge。对于视图(ActionForm 类),Struts 在 JSP 环境以及其他描述系统中运行的很好。图 2 阐明了基于 Structs 应用程序的逻辑流程。
图 2. Struts 应用程序的逻辑流
简单粗糙的 Web 服务体系结构
构建 Web 服务最简单的途径就是将单个操作与单个企业服务结合起来,如图 3 所示。在这种设计方法中,实现业务逻辑的服务与实现数据检索的服务是混合在一起的。
图 3. 简单粗糙的 Web 服务体系结构
这样的一种 Web 服务可以很容易从已有的业务组件中开发出来。然而,它有很多的缺点:对用户没有单个签名点,提供者与订阅者连接不够紧,业务逻辑没有重用。简而言之,对于一个连贯的解决方案来说这并不是一个非常好的体系结构。
在 MVC 模式基础上来实现 Web 服务解决方案会更好点。在后续部分,您将看到如何使用 Structs 来做到这一点。我将通过 WSManager 层来详述现有的 Structs 架构,这一层展示了采用 Web 服务的模型服务方法。
采用 Struts 应用程序的 Web 服务
在以后的开发工作中您可以扩大构建得比较好的 Structs 应用程序来支持 Web 服务。前面讲过,Structs 架构清晰地区分开了视图、控制器以及模型。模型包含所有必须的业务逻辑,从存储数据仓库中检索数据。您可以构建一个简单的 Web 服务层(称为 WSManager 层)这样的模型可以提供 Web 服务也可以订购 Web 服务。使用这种体系结构的应用程序将基于组件开发的最佳点与万维网结合在了一起,如 图 4所示。
图 4. 采用 Web 服务的 Struts 应用程序
下面的部分要讨论的是这种体系结构中不同组件的详细信息,特别要密切注意 WSManager 层,因为它是此体系结构中真正新加的部分。
Struts 控制器
MVC 体系结构的控制器部分主要集中于接收客户端的请求(一般为运行 Web 浏览器的用户),决定执行哪一种业务逻辑功能来响应请求,然后负责生成下一个用户界面连接到合适的视图组件上去。在 Structs 中,控制器的主要组件就是 ActionServlet 类的一个小服务程序。
ActionServlet 负责通过 XML 文档将 URI 请求映射到特定的行为。这个文档包含了 URI 请求列表而且还告知 ActionServlet 它应该如何分配每个请求。这种方法有几个好处:
应用程序的整个逻辑流程在分级文本文件中。
这种格式的列表更容易查看与理解,尤其是对于一个很大的应用程序而言。
ActionServlet 决定了应用程序的流程。许多 Action 类都继承了 ActionServlet 。每个 Action 类:
都映射到各自独立的进程
通过 Struts 的 ActionController 与 Structs JSPs 相结合
作为继承 Struts中 Action 类的一个 Java 类来实现。
Struts中 Action 类调用 WSManager 类中的相关方法来使用 Web 服务。 WSManager 获取所要求的响应(或者如果有一个被解除了就会出现异常)将它回传给 Structs 控制器。
WSManager
WSManager 接收 JAX-RPC 端点的请求。将 WSManager 类中的方法调用映射到新来的客户端请求。这些新来的客户端请求是 SOAP 信息的格式。WSManager 必须实现安全确定性,转变参数,在指定请求到模型服务之前,要对这些请求进行参数预处理。请求所包含的参数形式有 Java 对象,Java原始参数,XML 文档,或者甚至是 SOAP 文档分片(例如,SOAP Element 对象)。这些类型必须要转化成内部所支持的 schema(例如,预定义的 Java 数据访问对象)。
虽然 WSManager 可以很直接地处理与 Java 对象结合的参数,但它还需要采取一些附加步骤来处理 XML 文档。建议以下步骤:
WSManager 类必须能够确定新来的 XML 文档而不是它的 schema.
WSManager 类接着要把 XML 文档转化成内部支持的 schema.
最后 WSManager 应该分解文档并且尽可能地将它映射到域对象中去。
WSManager 实现以下任务是非常重要的:
身份验证和授权使用
错误处理
缓存
WSManager 也可以生成响应;这个过程由方法调用返回值的简单构造所组成。WSManager 中保留这样的功能,您可以通过缓存数据从而避免重复访问模型服务层。您还可以集中管理响应聚集以及 XML 文档转换,如果您要返回给调度者的文档必须遵守与内部 schema 不同的 schema 时,这一点就显得尤其重要。
WSManager 处理所有新来的 SOAP 请求并授权它们连接到出现在模型服务中的业务逻辑。如果模型服务是作为一个 EJB 层来实现,那您一样可以在 EJB 层中通过 Session Façade 设计模式来实现。如果您采用这种模式执行 WSManager ,您将获得很多好处,因为 WSManager 会:
作为初始联系点来管理请求与服务
调用安全服务,包括身份验证与授权使用,从而避免任何重复的层访问。
授权业务处理(采用由 Structs 应用程序所使用的模型服务)
在 WSManager 层缓存数据避免任何不必要的数据库访问。
发布者:展示 Web 服务
在 WSManager 类中执行的每一个公共方法都将作为一种 Web 服务发布出来。换句话说,您要为这些类发布一种 Web 服务描述 。Web 服务描述是由服务的 Web 服务描述语言(Web Services Description Language,WSDL)描述与由它所引用的任何 XML schema 所组成。(WSDL 是描述服务的标准语言。)
您可以在公共注册表或在企业内的公司注册表上发布 Web 服务描述。您还可以发布 XML schema,这些是由相同公司或公共存储器上的 Web 服务所定义的。 Java Web 服务客户端采用 JAXR 应用编程接口来查询公司或公共注册表上的服务描述。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者