MVC
MVC将一个完整的Web应用分割为模型(Model)、视图(view)和控制器(Control)3个部件:
l 模型:是软件所处理问题逻辑和独立与外在显示内容和形式情况下的内在抽象,它封装了问题的核心数据。逻辑和功能的计算关系,独立于具体的界面表达和I/O操作。
l 视图:把表示模型数据和逻辑关系和状态的信息,以及特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。
l 控制器:处理用户与软件的交互操作,控制提供模型中任何变化的传播,确保用户界面与模型间的对应联系。它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。
模型、视图、控制器的分离,使得一个模型可以具有多个显示视图。无论何时,数据发生何种变化,控制器都将变化通知所有的视图,使得显示的更新。
原始的MVC
最原始的MVC模型中,用户直接请求视图,
由于直接请求各个页面,使得维护变得非常困难,一些控制代码,国际化代码,日志等等都需要加在每个页面上,存在代码分散重复,可缺乏性低,缺乏可扩展性等问题。
前端控制器模式
传统的MVC为开发带来了许多的不便,前段控制器模式便在一定程度上有了改变,用户的请求不再直接与视图进行会话,而是由一个分发器来接收的。
通过一个分发器,不在直接请求视图,而是请求控制器,控制器调用并修改模型。处理完毕后,返回结果给一个视图资源。这里我们可以很容易的在控制器上加上加密、国际化、日志等。
Struts2中的MVC
控制器:Struts2框架中作为控制器的是FilterDispatcher,它是一个Servlet过滤器。当 请求到来的时候,首先要经过FilterDispatcher过滤器。又该过滤器决定哪个 Action来处理当前的请求。
模型:Action在Struts2中是作为模型存在的,它主要有两个功能:首先Action可以用 来调用业务逻辑处理请求;其次Action,可以进行数据的传递。当Action把请求 处理完毕后,会返回一个逻辑视图。
视图:在Struts2中,视图以多种表现形式。除了传统的JSP页面外,还可以使用Velocuty、FreeMarker、Tiles等多种视图资源。当视图组件接收到Action返回的逻辑视图以后,会寻找对应的物理视图资源,并返回给客户端。
Struts2的工作流程
整个流程可以分为一下几步:
1) 客户端初始化一个指向Web容器的请求。
2) 请求经过一系列过滤器(Filter的过来传递给FilterDispatcher)
3) FilterDispatcher在接收到请求信息后,会根据URL在ActionMapper中搜索指定Action的映射信息
4) 如果找到符合的映射信息,ActionProxy通过Configuration Manager在strut.xml中搜索被请求的Action的类
5) ActionProxy创建一个被请求Action的实例,该实例用来处理请求信息。
6) 如果在strut.xml文件中存在与被请求Action相关的拦截器配置,那么该Action的实力被调用前后,这些拦截器也会被执行。
7) 返回一个逻辑视图