今天peter xiao和大家一起学习Java EE中的一个重要部分——MVC模式与MVC框架。在后端的面试中,面试官也会常常提到MVC,那么MVC究竟是什么呢?
一、MVC模式
MVC,顾名思义,由以下三个部分组成:
M:Model——模型 javaBean(实体类):封装数据
V:View——视图 jsp:单纯进行页面的显示
C:Controller——控制器 Servelt:获取数据--对数据进行封装-传递数据-指派显示的jsp页面
其大致的处理流程是:首先由客户端发送请求,控制层接收并处理请求,再通过model层与数据库进行数据交互,然后控制层将交互得到的数据转发给视图层,最后视图层将得到的数据封装成视图页面返回给客户端用户。
二、Java EE的三层架构
JavaEE三层架构分为表示层、业务逻辑层、数据访问层,通过三层架构对软件系统进行分模块处理。
表示层(web层):负责接收客户端用户的请求,并返回对应数据展示视图。相当于MVC中的V和C,但这里的C只进行请求的接收、处理交给业务逻辑层
业务逻辑层(service层):对表示层传递过来的请求进行业务逻辑处理和运算,并返回处理结果给表示层
数据访问层(dao层):与数据库进行交互,将业务逻辑层所需的数据处理与数据库数据进行同步,用于对数据库表进行增、删、改、查
三层架构与MVC:
两者本为不同领域下的设计模式,并无直接关联。三层架构是典型的架构模式,将产品的开发细分为三层,这么做的好处是能够让每个人都能发挥自己的专长。比如前端工程师能专注页面的设计,如何吸引用户,而不用在乎业务逻辑的实现。数据库工程师,又可以专注数据库的处理,使其变得高效,而不必关注如何展示。而MVC是表现模式(Presentation Pattern),是为了让HTML代码和业务逻辑分开,使代码清晰(el表达式的引入也是为了这个原因),但在某种意义上,也是将功能进行分化。
三、MVC框架
MVC框架之Spring MVC概述:
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
SpringMVC的主要组件:
1. 前端控制器 DispatcherServlet(不需要程序员开发)
作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
2. 处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的URL来查找Handler
3. 处理器适配器HandlerAdapter
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
4. 处理器Handler(需要程序员开发)
5. 视图解析器 ViewResolver(不需要程序员开发)
作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view
6. 视图View(需要程序员开发jsp)
Spring MVC的执行流程:
1.发起请求到前端控制器
2.前端控制器请求HandlerMapping查找 Handler,可以根据xml配置、注解进行查找
3.处理器映射器HandlerMapping向前端控制器返回Handler
4.前端控制器调用处理器适配器去执行Handler
5.处理器适配器去执行Handler
6.Handler执行完成给适配器返回ModelAndView
7.处理器适配器向前端控制器返回ModelAndView,ModelAndView是springmvc框架的一个底层对象,包括Model和view
8.前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)
9.视图解析器向前端控制器返回View
10.前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域
11.前端控制器向用户响应结果
Spring MVC的优点:
1. 可以支持各种视图技术,而不仅仅局限于JSP;
2. 可以与Spring框架集成(如IoC容器、AOP等);
3. 拥有清晰的角色分配:分别有前端控制器(dispatcherServlet) , 处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)等角色。
关于MVC设计模式的学习在今天就到这里,我们下一篇博客见,bye~