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 应用编程接口来查询公司或公共注册表上的服务描述。