采用 Struts 应用程序的 Web 服务
在以后的开发工作中您可以扩大构建得比较好的 Struts 应用程序来支持 Web 服务。前面讲过,Struts 架构清晰地区分开了视图、控制器以及模型。模型包含所有必须的业务逻辑,从存储数据仓库中检索数据。您可以构建一个简单的 Web 服务层——称为 WSManager 层——这样的模型可以提供 Web 服务也可以订购 Web 服务。使用这种体系结构的应用程序将基于组件开发的非常好的点与万维网结合在了一起,如图4所示。
图 4. 采用 Web 服务的 Struts 应用程序
下面的部分要讨论的是这种体系结构中不同组件的详细信息,特别要密切注意 WSManager 层,因为它是此体系结构中真正新加的部分。
Struts 控制器
MVC 体系结构的控制器部分主要集中于接收客户端的请求(一般为运行 Web 浏览器的用户),决定执行哪一种业务逻辑功能来响应请求,然后负责生成下一个用户界面连接到合适的视图组件上去。在 Struts 中,控制器的主要组件就是 ActionServlet 类的一个小服务程序。
ActionServlet 负责通过 XML 文档将 URI 请求映射到特定的行为。这个文档包含了 URI 请求列表而且还告知 ActionServlet 它应该如何分配每个请求。这种方法有几个好处:
☆ 应用程序的整个逻辑流程在分级文本文件中。
☆ 这种格式的列表更容易查看与理解,尤其是对于一个很大的应用程序而言。
ActionServlet 决定了应用程序的流程。许多 Action 类都继承了 ActionServlet 。每个 Action 类:
☆ 都映射到各自独立的处理过程
☆ 通过 Struts 的 ActionController 与 Struts JSPs 相结合
☆ 作为继承 Struts中 Action 类的一个 Java 类来实现。
Struts中 Action 类调用 WSManager 类中的相关方法来使用 Web 服务。 WSManager 获取所要求的响应——或者如果有一个被解除了就会出现异常——将它回传给 Struts 控制器。
WSManager
WSManager 接收 JAX-RPC 端点的请求。将 WSManager 类中的方法调用映射到新来的客户端请求。这些新来的客户端请求是 SOAP 信息的格式。WSManager 必须实现安全认证,转变参数,在指定请求到模型服务之前,要对这些请求进行参数预处理。请求所包含的参数形式有 Java 对象,Java原始参数,XML 文档,或者甚至是 SOAP 文档分片(例如,SOAP Element 对象)。这些类型必须要转化成内部所支持的 schema(例如,预定义的 Java 数据访问对象)。
虽然 WSManager 可以很直接地处理与 Java 对象结合的参数,但它还需要采取一些附加步骤来处理 XML 文档。建议以下步骤:
1. WSManager 类应该能够通过XML Schema来验证XML文档的有效性。
2. WSManager 类接着要把 XML 文档转化成内部支持的 schema。
3. 最后 WSManager 应该分解文档并且尽可能地将它映射到域对象中去。
WSManager 实现以下任务是非常重要的:
1. 身份验证和授权使用
2. 错误处理
3. 缓存。
WSManager 也可以生成响应;这个过程由方法调用返回值的简单构造所组成。WSManager 中保留这样的功能,您可以通过缓存数据从而避免重复访问模型服务层。您还可以集中管理响应聚集以及 XML 文档转换,如果您要返回给调度者的文档必须遵守与内部 schema 不同的 schema 时,这一点就显得尤其重要。
WSManager 处理所有SOAP 请求并把它们委派到模型层所暴露的业务逻辑。如果模型服务是作为一个 EJB 层来实现,那您一样可以在 EJB 层中通过 Session Fa?ade 设计模式来实现。如果您采用这种模式执行 WSManager ,您将获得很多好处,因为 WSManager 会:
☆ 作为初始联系点来管理请求与服务
☆ 调用安全服务,包括身份验证与授权使用,从而避免任何重复的层访问。
☆ 委派业务处理(采用由 Struts 应用程序所使用的模型服务)
☆ 在 WSManager 层缓存数据避免任何不必要的数据库访问。