MVC设计模式
MVC设计模式是软件工程中的一种软件架构模式。它强制性地使用软件系统地输入、处理和输出分开。把软件系统分为三个基础部分:Model、View、Controller
Model对应的是JavaBean(DAO,Service,POJO):模型对象拥有最多的处理任务,是应用程序的主体部分,它负责数据逻辑(业务规则)的处理和实现数据操作(数据库中的存取)。
View对应的是JSP页面:负责格式化数据并把他们呈现给用户,包括数据展示、用户交互、数据验证、页面设计等功能。
Controller对应的是Servlet:负责接收并转发请求,对请求进行处理后指派视图并将响应结果发送给客户端。
MVC的两种模式:
JSP Model1:当业务流程比较简单的时候,把控制器的功能交给视图来实现。Jsp Model1模式只有视图和模型
JSP Model2:当业务流程复杂的时候,就需要把业务流程控制交给控制器来实现,JSP专注于视图的展现即可,这种模式就是JSP Model2.
可以看出,相比Model1,Model2是将控制层单独划分出来负责业务流程的控制,接收请求,创建所需的JavaBean实例,并将处理后的数据再返回给视图层进行页面数据展示。这样的结构清晰,效果明显优化很多,并且也是一个松耦合的架构模式,所以除非项目非常简单,一般情况下建议使用JSP Model2
MVC整体的处理过程:
1)首先视图提供系统与用户交互的页面,并发送用户输入给控制器。
2)控制器接受用户请求,并决定该调用哪个模型来进行处理
3)模型根据用户请求进行相应的业务逻辑处理,并返回处理结果(数据)。
4)控制器根据返回的处理结果,调用相应的视图格式化模型返回的数据,并通过视图呈现给用户结果
Spring MVC:
Spring MVC是Spring框架中用于Web应用开发的一个模块,是Spring提供的一个基于MVC设计模式的优秀Web开发框架,它本质上相当于Servlet,在MVC设计模式中,Spring MVC作为控制器来建立模型与视图的数据交互,是结构最清晰的MVC Model2实现,可称为一个典型的MVC框架。
Spring MVC的优缺点:
优点
1)多视图共享一个模型,大大提高代码的重用性
2)MVC三个模块相互独立,松耦合架构
3)控制器提高了应用程序的灵活性和可配置型
4)有利于软件工程化管理
总之,我们通过Spring MVC的设计模式最终可以打造出一个松耦合+高重用性+高可使用性的完美架构,当然这也是架构设计的目标之一
缺点
1)原理复杂
2)增加了系统结构和实现的复杂性
3)视图对模型数据的低效率访问
对于Spring MVC来说,它并不适合小型甚至中型规模的项目,花费大量时间将MVC应用到规模并不是很大的应用程序通常得不偿失,所以对于MVC设计模式的使用需要根据具体的应用场景来决定。
Spring MVC框架的体系结构
1)客户端发出HTTP请求,web应用服务器接收此请求。若匹配DispatcherServlet的请求映射路径(在Web.xml中指定),则Web容器将该请求转交给DispatcherServlet处理
2)DispatcherServlet接收到该请求后,根据请求的信息(包括URL,请求参数,HTTP方法等)及HandlerMapping的配置(在<serletName>-servlet.xml中配置)找到请求的处理器(Handler)。
3)当DispatcherServlet根据HandlerMapping找到对应当前请求的Handler之后,通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用Handler,HandlerAdapter可以理解为具体使用Handler来干活的人,HandlerAdapter接口里一共有3个方法
4)在请求信息到达真正调用Handler的处理方法之前的这段时间内,Spring MVC还完成了很多工作,它会将请求信息以一定的方式转换并绑定到请求方法的入参中,对于入参的对象会进行数据转换,数据格式化以及数据校验等。这些都做完之后,最后才真正地调用Handler的处理方法进行相应的业务逻辑处理
5)处理器完成业务逻辑处理之后将返回一个ModelAndView对象给DispatcherServlet,ModelAndView对象包含了逻辑视图名和数据模型数据信息
6)ModelAndView对象中包含的是“逻辑视图名”,而非真正的视图对象。DispatcherServlet会通过ViewResolver将逻辑视图名解析为真正的试图对象View。当然,负责数据展示的视图可以为JSP、XML、PDF、JSON等多种数据格式,对此Spring MVC均可灵活配置。
7)当得到真是的视图对象View后,DispatcherServlet会使用ModelAndView对象中的模型数据对View进行视图渲染
8)最终客户端获得相应消息,根据配置,可以是普通的HTML页面,也可以是一个XML或者JSON格式的数据等。
Spring MVC框架的特点:
1)清晰地角色划分。SpringMVC在Model、View、和Controller方面提供了一个非常清晰地角色划分,这三个方面真正是各司其职,各负其责
2)灵活的配置功能。因为Spring的核心是IoC,同样在实现MVC上,也可以把各类当作Bean来通过XML进行配置
3)提供了大量的控制器接口和实现类。开发者可以使用Spring提供的控制器实现类,也可以自己实现控制器接口
4)真正做到与View层的实现无关(JSP、Velocity、XSLT等)。他不会强制开发者使用JSP,也可以根据项目需求使用Velocity、XSLT等技术,使用起来更灵活
5)国际化支持
6)面向接口编程
7)Spring提供了Web应用开发的一整套流程,不仅仅是MVC。它们之间可以方便地结合在一起。
一个好的框架要减轻开发者处理复杂问题的负担,内部要有良好的扩展,并且有一个支持它的强大的用户群体,恰恰Spring MVC做到了。
MVC设计模式是软件工程中的一种软件架构模式。它强制性地使用软件系统地输入、处理和输出分开。把软件系统分为三个基础部分:Model、View、Controller
Model对应的是JavaBean(DAO,Service,POJO):模型对象拥有最多的处理任务,是应用程序的主体部分,它负责数据逻辑(业务规则)的处理和实现数据操作(数据库中的存取)。
View对应的是JSP页面:负责格式化数据并把他们呈现给用户,包括数据展示、用户交互、数据验证、页面设计等功能。
Controller对应的是Servlet:负责接收并转发请求,对请求进行处理后指派视图并将响应结果发送给客户端。
MVC的两种模式:
JSP Model1:当业务流程比较简单的时候,把控制器的功能交给视图来实现。Jsp Model1模式只有视图和模型
JSP Model2:当业务流程复杂的时候,就需要把业务流程控制交给控制器来实现,JSP专注于视图的展现即可,这种模式就是JSP Model2.
可以看出,相比Model1,Model2是将控制层单独划分出来负责业务流程的控制,接收请求,创建所需的JavaBean实例,并将处理后的数据再返回给视图层进行页面数据展示。这样的结构清晰,效果明显优化很多,并且也是一个松耦合的架构模式,所以除非项目非常简单,一般情况下建议使用JSP Model2
MVC整体的处理过程:
1)首先视图提供系统与用户交互的页面,并发送用户输入给控制器。
2)控制器接受用户请求,并决定该调用哪个模型来进行处理
3)模型根据用户请求进行相应的业务逻辑处理,并返回处理结果(数据)。
4)控制器根据返回的处理结果,调用相应的视图格式化模型返回的数据,并通过视图呈现给用户结果
Spring MVC:
Spring MVC是Spring框架中用于Web应用开发的一个模块,是Spring提供的一个基于MVC设计模式的优秀Web开发框架,它本质上相当于Servlet,在MVC设计模式中,Spring MVC作为控制器来建立模型与视图的数据交互,是结构最清晰的MVC Model2实现,可称为一个典型的MVC框架。
Spring MVC的优缺点:
优点
1)多视图共享一个模型,大大提高代码的重用性
2)MVC三个模块相互独立,松耦合架构
3)控制器提高了应用程序的灵活性和可配置型
4)有利于软件工程化管理
总之,我们通过Spring MVC的设计模式最终可以打造出一个松耦合+高重用性+高可使用性的完美架构,当然这也是架构设计的目标之一
缺点
1)原理复杂
2)增加了系统结构和实现的复杂性
3)视图对模型数据的低效率访问
对于Spring MVC来说,它并不适合小型甚至中型规模的项目,花费大量时间将MVC应用到规模并不是很大的应用程序通常得不偿失,所以对于MVC设计模式的使用需要根据具体的应用场景来决定。
Spring MVC框架的体系结构
1)客户端发出HTTP请求,web应用服务器接收此请求。若匹配DispatcherServlet的请求映射路径(在Web.xml中指定),则Web容器将该请求转交给DispatcherServlet处理
2)DispatcherServlet接收到该请求后,根据请求的信息(包括URL,请求参数,HTTP方法等)及HandlerMapping的配置(在<serletName>-servlet.xml中配置)找到请求的处理器(Handler)。
3)当DispatcherServlet根据HandlerMapping找到对应当前请求的Handler之后,通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用Handler,HandlerAdapter可以理解为具体使用Handler来干活的人,HandlerAdapter接口里一共有3个方法
4)在请求信息到达真正调用Handler的处理方法之前的这段时间内,Spring MVC还完成了很多工作,它会将请求信息以一定的方式转换并绑定到请求方法的入参中,对于入参的对象会进行数据转换,数据格式化以及数据校验等。这些都做完之后,最后才真正地调用Handler的处理方法进行相应的业务逻辑处理
5)处理器完成业务逻辑处理之后将返回一个ModelAndView对象给DispatcherServlet,ModelAndView对象包含了逻辑视图名和数据模型数据信息
6)ModelAndView对象中包含的是“逻辑视图名”,而非真正的视图对象。DispatcherServlet会通过ViewResolver将逻辑视图名解析为真正的试图对象View。当然,负责数据展示的视图可以为JSP、XML、PDF、JSON等多种数据格式,对此Spring MVC均可灵活配置。
7)当得到真是的视图对象View后,DispatcherServlet会使用ModelAndView对象中的模型数据对View进行视图渲染
8)最终客户端获得相应消息,根据配置,可以是普通的HTML页面,也可以是一个XML或者JSON格式的数据等。
Spring MVC框架的特点:
1)清晰地角色划分。SpringMVC在Model、View、和Controller方面提供了一个非常清晰地角色划分,这三个方面真正是各司其职,各负其责
2)灵活的配置功能。因为Spring的核心是IoC,同样在实现MVC上,也可以把各类当作Bean来通过XML进行配置
3)提供了大量的控制器接口和实现类。开发者可以使用Spring提供的控制器实现类,也可以自己实现控制器接口
4)真正做到与View层的实现无关(JSP、Velocity、XSLT等)。他不会强制开发者使用JSP,也可以根据项目需求使用Velocity、XSLT等技术,使用起来更灵活
5)国际化支持
6)面向接口编程
7)Spring提供了Web应用开发的一整套流程,不仅仅是MVC。它们之间可以方便地结合在一起。
一个好的框架要减轻开发者处理复杂问题的负担,内部要有良好的扩展,并且有一个支持它的强大的用户群体,恰恰Spring MVC做到了。