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类型可以构建用于处理新的相应类型。
分享到:
相关推荐
《Struts2 in Action》中文版是一本深入探讨Struts2框架的专业书籍,该书不仅提供了详尽的理论知识,还包含了大量的实战案例,对于希望掌握Struts2框架的开发者来说,是一本不可或缺的参考书。 ### Struts2框架概览...
1.3.2 Struts 2概览:MVC模式 10 1.3.3 Struts 2的工作原理 12 1.4 小结 14 第2章 初识Struts 2 16 2.1 声明性架构 16 2.1.1 两种配置 16 2.1.2 声明架构的两种方式 17 2.1.3 智能默认值 20 2.2 简单的HelloWorld...
通过以上内容概览,可以看出《Struts2 In Action》不仅涵盖了Struts2框架的基础知识,还包括了许多高级主题和实战案例。对于想要深入学习并应用Struts2的开发者来说,这本书无疑是一个宝贵的资源。
《Manning Struts in Action 2 edition》是一本深度探讨Struts 2框架的专业书籍,由Donald Brown、Chad Michael Davis和Scott Stanlick三位作者共同撰写。本书旨在为读者提供全面且深入的理解,帮助开发者掌握Struts...
### Struts2讲义知识点概览 #### 一、Struts2的历史与发展 - **Struts框架的发展历程**: - Struts最初版本发布于2000年,是Java Web开发领域的一个重要里程碑。 - 随着时间的发展和技术的进步,Struts逐渐暴露...
### Struts in Action2 关键知识点总结 #### 1. Struts 概览与起源 - **Struts** 是一个基于 Java 的 Web 开发框架,它遵循 MVC(Model-View-Controller)设计模式,用于构建可扩展且易于维护的企业级应用程序。 -...
### Struts 2 in Action — 关键知识点概览 #### 一、Struts 2框架简介 - **标题概述**:“Manning.Struts.2.in.Action”这本书是关于Struts 2框架的一本实用电子书,由Donald Brown、Chad Michael Davis以及Scott ...
2. **Struts 2 - 2.swf** - 可能涉及了Struts2的配置,如struts.xml配置文件的结构和作用,如何配置Action类、结果类型(Result Types)、全局结果(Global Results),以及常量配置(Constants Configuration)。...
### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC模式中,Model代表数据模型(业务逻辑),View代表用户界面,而Controller负责...
### Struts2 知识点概览 #### Struts2 概述与来历 - **Struts2**是由Apache组织维护的一款开源MVC框架,主要应用于Java Web开发领域。其定位仅作为表现层(MVC)框架,专注于处理前端用户交互逻辑。 - **Struts1**...
### Struts In Action中文版知识点概述 #### 一、引言 - **书籍基本信息**: - **书名**:《Struts In Action》中文版 - **作者**:Ted Husted - **译者**:Eric Liu(铁手) - **最后修订日期**:2005年7月11...