Struts2 in action 之 Struts2高层概览

Struts 2从3000英尺俯览:MVC模式
Struts 2的高层设计遵循被实践证实的Model-View-Controller设计模式(MVC模式)。在本节中,我们将告诉你框架的哪些部分反映了MVC模式的各个关注点。MVC模式为应用到web应用中的各个关注点(concerns)提供了良好的分离。关注点的分离允许我们通过将大型软件分解为高层组件来管理它们的复杂性。MVC设计模式中有三个不同的关注点(concerns):模型、视图和控制器。在Struts 2中,这些被依次实现为action、result和FilterDispatcher。图1.3 展示了Struts2实现MVC模式来处理web应用的工作流。让我们仔细的看看图1.3.我们队MVC模式的各个关注点提供了简要的描述,然后看看对应的Struts 2组件如何来完成这些责任。


控制器 ---- FilterDispatcher
我们将从控制器开始。当我们在讨论web应用时,从这里开始谈起看上去更有意义。实际上在Struts中大量使用的MVC模式经常被称为前端控制器(front controller)MVC。这意味着该控制器在应用的前端,也是执行处理的第一个组件。这个在图1.3中可以很容易的看到。控制器的工作是将请求映射到Action上。在web应用中,进入的HTTP请求可以被认为是用户给应用下达的命令。web应用的一个基础的任务则是将这些请求路由到应用本身的一组合适的action上。控制器的职责就像是交通灯或空中交通控制器。在某些情况下,这些工作是管理方面的,当然不会是你的核心逻辑的一部分。



在Struts 2中,控制器的角色是由FilterDispatcher来实现的。该Filter的的重要作用是检测进入的每个请求然后确定哪个Struts2的action可以来处理该请求。在这里,框架为你实现所有的控制器操作。你仅仅需要通知框架哪个请求的URL映射到你的哪个action即可。这里你可以通过基于XML的配置文件或Java注解来实现。在下一章我们将为你演示这两种方式。

注意:
注意Struts2中对于web应用的零配置做了很大的努力。零配置的目标是对于应用的所有元数据,像给定的URL映射到哪个action,使用约定而不是配置。Java注解的使用在零配置模式下起来重要的作用。因为零配置没有完全的实现,当前可以使用注解和约定来减少基于XML的配置。
在第二章中的HelloWorld应用中,我们将演示Struts 2web应用的常规架构和部署细节。

模型—action
看下图1.3,很容易看出模型被反映为Struts2中的action组件。但是确切来说,模型是什么?我发现模型在MVC中是最模糊的。在某些方式下,模型是包含在应用层次中的黑盒子。其他的东西仅仅是用户接口和粘合类。模型是事物的本身。在更加技术化的词汇中,模型是应用的内部状态。状态由数据模型和业务逻辑共同组成。从高层黑盒子视图来看,数据和业务逻辑混合到一起作为应用的状态。例如,如果你登录到一个应用中,业务逻辑和来自于数据库的数据都将参与到授权的处理过程中。通常,业务逻辑将提供采用用户名和密码作为输入然后将它们与数据库中的数据进行对比的授权方法。在这种情况下,数据和业务逻辑一起来组成两个状态:已授权和未授权。数据本身和业务逻辑本身都不能独立的产生这些状态。

根据上述的所有概念,Struts 2的action扮演了两个角色。首先,action将对业务逻辑的调用封装到唯一的工作单元。第二,action作为本地数据转换的场所。现在在讨论action还为时尚早,但是在本书中我们会对此主题给于详细的讲解。在这里,大家可以这样考虑,假定应用中有任意数量的action来处理它需要提供给客户端的命令。在图1.3中可以看到,控制器在接收到请求后,必须找出该请求的映射然后决定哪个action来处理该请求。一旦它找到合适的action,控制器即将请求的处理权通过调用action来交给action。这个调用过程,由框架发起,既准备了必要的数据又会执行action的业务逻辑。当action完成它的工作后,即到了将视图显示给提交该请求的用户的时候了。到这个时候,action即完成了它的工作,将会把结果发送给Struts 2的视图组件。让我们现在来看看这个结果。

view – 结果
视图(view)是MVC模式中的展示组件。再次看下图1.3,我们看到结果将页面返回给web浏览器。该页面是向用户显示应用状态的用户界面。通常这些是常规的JSP页面、Velocity模版或其他的显示层技术。因为对于视图有大量的选择,所以视图的角色是清晰的:它将应用的状态转换为用户可以与之交互的可视化展示。随着富客户端和Ajax应用的增多,视图层的细节也变得越来越复杂,因此更加清晰的MVC分离变得更加重要。良好的MVC分层使得管理更加复杂的前端变得比较容易。

注意:
Struts 2中比较有趣的一个方面是它为新技术和新方法提供了非常方便的集成方式。Struts 2的result组件是这个的很好的一个演示。result为最终将响应输出到客户端的控制对象提供了一个清晰的封装(The result provides a clean encapsulation of handing off control of the processing to another object that will write the response to the client.)。这使得替换为另一种响应,像XML或XSLT转换,很容易的就可以集成到框架中。

如果现在你回头看看图1.3,你会发现是action负责选择最终作为响应的result。action可以选择任意数量的result。通常的选择是根据action处理后的输出来执行的,如success、error等。Struts 2内置了将大部分常见视图层技术作为result的支持。这包括JSP、Velocity、Freemarker和XSLT。另外,清晰的架构保证了更多的result类型可以构建用于处理新的相应类型。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值