更多内容可以访问我的个人博客。
MVC基本概念
MVC将一个应用的输入、处理和输出流程按照Model(模型)、View(视图)和Controller(控制器)三部分进行分离,这样一个应用就可以划分成模型层、视图层和控制层3个层。这三层之间以最少的耦合来协同工作,从而提高了应用系统的可扩展性和可维护性。对于程序员来说,可以更加高效和灵活的完成代码编写。
1.模型层
模型层代表的是企业数据和其对应的业务逻辑,它控制着对数据的处理和更新。通常,模型和现实世界对数据的处理非常相似,这就要求程序开发人员对模型的设计与现实世界应基本相近。模型层接受视图层(通过控制层传送到)的请求数据,并返回最终的处理结果,以更新视图层。
2.视图层
视图层实际上是模型层中的各个模型的具体表现形式。它通过模型得到企业数据,然后再根据需要来显示它们。虽然视图层对数据不做处理,而是将数据直接传送给控制层,但它必须保持着与模型层的数据模型的一致性,即当模型层的数据发生变化时,视图层必须随之变化。
3.控制层
控制层在MVC结构中连接模型层和视图层,起到了纽带的作用。它将视图层的交互信息进行过滤等处理后,再传送到模型层相应的业务逻辑处理程序进行处理。
MVC特点:
低耦合性。架构分三层,降低了层与层之间的耦合,提高了程序的可扩展性。
一个模型可对应多个视图。可提高代码的可维护性,一旦模型发生变化,方便维护。
模型返回的数据与显示逻辑分离。各层只需负责自己的任务,不用去管其他层的任务。
有利于工程化管理。代码可复用,降低了软件开发周期。
Struts2概述
-
到目前为止,Struts框架拥有两个主要的版本,分别是Struts 1.x和Struts 2.x版本,它们都是遵循MVC思想的开源框架。
-
Struts 1是真正意义上的MVC模式,发布后受到了广大程序开发人员的认可。性能高效、松耦合、低侵入永远是开发人员追求的理想状态,而Struts1在这些方面又恰恰存在着不足之处。在这种情况下,全新的Struts2框架应运而生,它弥补了Struts 1框架中存在的缺陷和不足,并且还提供了更加灵活与强大的功能。
-
要注意的是,Struts 2框架并不是Struts 1的升级版,而是一个全新的框架,在体系结构上与Struts 1也存在着较大的差距。它将Struts技术与WebWork技术完美的结合起来,拥有非常广泛的使用前景。
Struts2工作流程
① 用户发出一个HttpServletRequest请求
② 这个请求经过一系列的过滤器Filter来传送。
③ 调用FilterDispatcher。FilterDispatcher是控制器的核心,它通过询问ActionMapper来确定该请求是否需要调用某个Action。如果需要调用某个Action,则FilterDispatcher就把请求转交给ActionProxy处理。
④ ActionProxy通过配置管理器Configuration Manager询问框架的配置文件struts.xml,从而找到需要调用的Action类。
⑤ ActionProxy创建一个ActionInvocation的实例,该实例使用命名模式调用。在Action执行的前后,ActionInvocation实例根据配置文件加载与Action相关的所有拦截器Interceptor。
⑥ 一旦Action执行完毕,ActionInvocation实例根据struts.xml文件中的配置找到相对应的返回结果,通常是一个JSP或者FreeMarker的模板。
⑦ 最后,HttpServletResponse响应通过web.xml文件中配置的过滤器返回。
- 从Struts 2的角度理解MVC
在Struts 2中,模型层对应业务逻辑组件,它通常用于实现业务逻辑及与底层数据库的交互等。视图层对应视图组件,通常是指JSP页面,但也适用于其他视图显示技术,如Velocity或者Excel文档。控制层对应系统核心控制器和业务逻辑控制器。系统核心控制器为Struts 2框架提供的FilterDispatcher,它是一个起过滤作用的类,能根据请求自动调用相应的Action。而业务逻辑控制器是指开发人员自行定义的一系列Action,在Action中负责调用相应的业务逻辑组件来完成处理。
FilterDispatcher——控制层
Action——模型层
Result——视图层
- Struts2的开发优势
通过简单、集中的配置来调度动作类,使得配置和修改都非常容易
通过简单统一的表达式语言来访问所有可供访问的数据
提供标准的、强大的验证框架和国际化框架,而且与Strusts的其他特性紧密结合。
强大的标签,可以有效地减少页面代码
良好的Ajax支持。
增加插件简单。
明确的错误报告。
智能的默认设置。很多框架对象都有一个默认的值,无需再设置。
Struts2开发实例
1. 开发准备
① Eclipse中部署Tomcat:Window|Preferences ——>