于现有较成熟的Model-View-Control(
MVC)框架而言,其解决的主要问题无外乎下面几部分:
1. 将Web页面中的输入元素封装为一个(请求)数据对象。
2. 根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。
3. 逻辑处理单元完成运算后,返回一个结果数据对象。
4. 将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。
1. 将Web页面中的输入元素封装为一个(请求)数据对象。
2. 根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。
3. 逻辑处理单元完成运算后,返回一个结果数据对象。
4. 将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。
现在来看看
Spring
MVC是怎么做的。
一 总体概述
Spring
MVC的核心组件是DispatcherServlet,该类既作为整个
MVC框架的前端控制器,同时又负责调动框架中其它组件协同工作完成对一个请求的处理。处理一个请求的大致流程如下:
1 请求首先由DispatcherServlet截获,DispatcherServlet把请求交给HandlerMapping,寻找相应的逻辑处理单元。
2 HandlerMapping根据请求的不同,返回一组逻辑处理单元。在
Spring
MVC中,逻辑处理单元一般是由0个或多个interceptor和一个controller组成的。
3 DispatcherServlet首先判断返回的逻辑处理单元中是否有interceptor,如果有,则首先依次调用interceptor的方法。如果没有,则执行controller的方法。
4 DispatcherServlet通过HandlerAdapter来执行controller的方法,返回一个包含了模型和视图的对象ModelAndView。使用HandlerAdapter的目的是因为
Spring
MVC并不关心controller实现了什么样的接口,只要提供相应的HandlerAdapter,
Spring
MVC就知道该如何执行controller。
5 如果之前返回的逻辑处理单元包含interceptor,DispatcherServlet又依次(和刚才调用interceptor的顺序相反)调用interceptor的方法。
6 DispatcherServlet把返回的ModelAndView对象交给ViewResolver,通过ViewResolver返回一个合适的View对象。
7 最后DispatcherServlet调用View对象的render方法把模型中的数据和视图融合,返回给用户。
Struts的体系结构
struts framework是MVC 模式的体现,下面我们就从分别从模型、视图、控制来看看struts的体系结构(Architecture)。
从视图角度(View)
主要由JSP建立,struts自身包含了一组可扩展的自定义标签库(TagLib),可以简化创建用户界面的过程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags这几个Taglib。有关它们的详细资料请参考struts用户手册
从模型角度(Model)
模型主要是表示一个系统的状态(有时候,改变系统状态的业务逻辑操作也也划分到模型中)。在Struts中,系统的状态主要有ActiomForm Bean体现,一般情况下,这些状态是非持久性的。如果需要将这些状态转化为持久性数据存储,Struts本身也提供了Utitle包,可以方便的与数据库操作
从控制器角度(Controller)
在Struts framework中, Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。其中,Action扮演了真正的业务逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。
对于Struts 如何控制、处理客户请求,让我们通过对struts的四个核心组件介绍来具体说明。这几个组件就是:ActionServlet。Action Classes,Action Mapping(此处包括ActionForward),ActionFrom Bean。
struts framework是MVC 模式的体现,下面我们就从分别从模型、视图、控制来看看struts的体系结构(Architecture)。
从视图角度(View)
主要由JSP建立,struts自身包含了一组可扩展的自定义标签库(TagLib),可以简化创建用户界面的过程。目前包括:Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags这几个Taglib。有关它们的详细资料请参考struts用户手册
从模型角度(Model)
模型主要是表示一个系统的状态(有时候,改变系统状态的业务逻辑操作也也划分到模型中)。在Struts中,系统的状态主要有ActiomForm Bean体现,一般情况下,这些状态是非持久性的。如果需要将这些状态转化为持久性数据存储,Struts本身也提供了Utitle包,可以方便的与数据库操作
从控制器角度(Controller)
在Struts framework中, Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。其中,Action扮演了真正的业务逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。
对于Struts 如何控制、处理客户请求,让我们通过对struts的四个核心组件介绍来具体说明。这几个组件就是:ActionServlet。Action Classes,Action Mapping(此处包括ActionForward),ActionFrom Bean。