文章目录
SpringMVC01
一、什么是MVC
1.1、什么是MVC
-
MVC是Model(模型),View(视图),Controller(控制器)
-
是将业务逻辑,数据,显示分离的方法来组织代码
-
MVC降低了视图与业务逻辑之间的双向耦合
-
MVC不是一种设计模式,而是一种架构模式,当然不同的MVC存在差异
Model(模型):数据模型,JavaBean组件,包含数据和行为,不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
View(视图):负责视图模型的展示,就是我们写好的页面,浏览器渲染好的视图,展示给用户的那一个页面
Controller(控制器):接受用户请求,将请求委托给Model层的Service,dao处理,将处理完的再结果显示给用户,跳转到那个视图,显示什么信息,也就是Controller做着一个调度员的工作
最典型的MVC:就是JSP+Servlet+javaBean的模式
- 用户发起请求
- servlet接受请求,调用对应service,dao层处理,返回处理结果
- 业务处理结束,servlet再转向一个指定的jsp页面
- 响应更新后的数据给前端,显示渲染画面
1.2、MVC框架都是需要干什么,干那些事情
- 将url映射到java类或者java类的方法
- 封装用户提交的数据(表单数据直接自动封装)
- 处理请求----调用service层—调用dao层–返回处理的结果
- 将响应的数据渲染,显示在指定的jsp货值html页面上面
1.3、常见的服务器端MVC框架有:
Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;
1.4、常见前端MVC框架:
vue、angularjs、react、backbone;由MVC演化出了另外一些模式如:MVP、MVVM 等等…
二、什么是SpringMVC
2.1、概述
Spring MVC是Spring Framework(n. 框架,骨架;结构,构架)的一部分,是基于Java实现MVC的轻量级Web框架
查看官方文档:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.html#spring-web
为啥我们需要学习SpringMVC?
SpringMVC特点
- 轻量级,简单易学
- 高效
- 与Spring可以很好的结合,无缝衔接
- 约定大于配置
- 功能强大:RESTful,数据验证,格式化,本地化,主题等等
- 简单灵活
- 最主要的一个类DispatchServlet(请求分发器),围绕此类设计
2.2、中心控制器(DispatchServlet)
Spring MVC的框架全成围绕着DispatchServlet设计。DispatchServlet作用是将请求分发到不同的处理器
Spring MVC框架,以请求为驱动,围绕DispatchServlet分派请求以及提供其他的功能,DispatchServlet实际上也是一个Servlet,DispatchServlet继承了HttpServlet基类。
2.3、SpringMVC的原理
- 当用户发起请求时,被前端控制器拦截到请求,根据请求参数生成代理对象
- 找到请求对应的实际控制器,控制器处理请求,创建数据模型(数据和行为),访问数据库,将模型响应给中心控制器
- 控制器使用模型与视图渲染视图结果
- 将结果返回给中心控制器,再将结果返回给请求者
2.4、SpringMVC执行原理
2.4.1、图解分析执行流程
图为Spring MVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现(具体的业务逻辑,操作数据库等等)
2.4.2、简要分析流程
单词:handler处理器,map映射,adapter适配器,execution执行,resolver解析分析
-
DispatchServlet表示前置控制器,使整个SpringMVC的控制中心。用户发起任何请求,都会被DispatchServlertl拦截到;DispatchServlet接受请求并且拦截请求
我么假设用户请求的url为:http://localhost:8080/SpringMVC/hello,
我们可以将如上URL拆分为三部分:
-
http://localhost:8080服务器域名
-
SpringMVC部署在服务器上的web站点
-
hello表示具体的控制器
通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。
-
-
HandlerMap为处理器映射。DisPatchServlet调用HandlerMapping,HandlerMapping根据请求的url查找具体Handler
-
HandlerExecution表示具体的Handler**,HandlerExecution主要工作是根据url查找控制器,如上url被查找控制器为:hello**。
-
HandlerExecution将解析后的信息传递给DispatcherServlet, 如解析控制器映射等。
-
HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
-
Handler让具体的Controller执行,返回结果。
-
**Controller将具体的执行信息返回给HandlerAdapter,**如返回ModelAndView。
-
HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
-
DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
-
视图解析器将解析的逻辑视图名传给DispatcherServlet。
-
DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
-
最终视图呈现给用户。
总结
MVC
- MVC(MOdel,View,Controller),各个模块各司其职
- Model 数据模型(数据和行为),具体的业务逻辑操作,操作数据库等等
- View 具体的视图
- Controller 控制器,用来分发调用各个部分
Spring MVC
- 是Spring Framework(框架)的一部分
- 可以和Spring无缝衔接
- 围绕中心控制器DispatchServlet展开
Spring具体执行过程原理
- DispatchServlet接收和拦截所有请求,url
- DispatchServlet调用HandlerMap 处理器映射,查找具体的Handler(HandlerExecution)
- HandlerExecution根据url解析查找具体的控制器(Controller)信息
- HandlerExecution返回解析查找的信息给DispatchServlet(或HandlerMap)
- DispatcherServlet调用HandlerAdapter ,HandlerAdapte表示处理器适配器,其按照特定的规则去执行Handler。
- Handler让具体的Controller执行,返回结果。
- **Controller将具体的执行信息返回给HandlerAdapter,**如返回ModelAndView(视图名和存储设置的信息)。
- HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
- DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
- 视图解析器将解析的逻辑视图名传给DispatcherServlet。
- DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
- 最终视图呈现给用户。
以上是本人学习狂神说,所做笔记,参考了狂神的博客,谢谢狂神无私奉献。。