1.3 Struts 2的MVC实现

MVC设计模式有3个关注点:模型、视图和控制器。在Struts 2中,它们分别通过JavaBean、Result和FilterDispatcher(Struts 2.0的前端控制器为FilterDispatcher,Struts 2.1及以上版本的前端控制器为StrutsPrepareAndExecuteFilter,接下来以FilterDispatcher为例进行讲解)及Action来实现。图1.3展示了Struts 2处理Web应用请求过程的MVC模式实现。

图1.3 Struts 2 MVC模式实现

接下来简要介绍Struts 2各组件如何履行MVC各关注点的职责。

● 前端控制器——FilterDispatcher

前端控制器的工作是将不同的请求映射到具体处理的Action。前端控制器管理着请求的处理,其工作具有管理性质,但并不属于核心业务逻辑的一部分。

在Struts 2中,前端控制器的角色是由FilterDispatcher来扮演的,这个重要的对象是一个过滤器,它检查每一个传来的请求,决定用哪个Struts 2的Action处理这个请求。程序员不用管这个控制器是怎么实现的,只需要告诉控制器哪个请求URL映射到哪个Action即可。可以通过XML配置文件来完成这个任务,本章后半部分将演示具体的做法。

● 控制器——Action

Struts 2的Action组件有两个作用:它将业务逻辑调用封装到一个单独的工作单元中;同时它也是一个数据传输的场所。

前端控制器在收到客户端请求之后,通过映射来决定哪个Action处理这个请求。一旦找到了适当的Action,前端控制器会调用这个Action,并将请求处理的控制权转交给它。Action配合领域模型完成它的工作之后,将返回一个代表实际视图的逻辑字符串。前端控制器根据该字符串找到实际的视图处理组件,将结果视图呈现给用户。

● 视图——Result

视图是MVC模式的呈现组件。回顾图1.3可以发现,视图向Web浏览器返回了页面。这个页面是用户浏览界面,向用户呈现应用程序的状态。这里的Result是一个用于生成页面的组件,并非一定是JSP页面,也可以是其他表现层技术呈现的页面。

Result组件是可以扩展的,用户可以自定义Result类型及处理方式,使Struts 2可以应对新的响应类型。

● 模型——JavaBean

这里的模型指的是领域模型,它们是符合JavaBean规范的系列实体类。