一、对springmvc的理解
MVC:Model - View - Controler 它分离了表现与交互。
它被分成了三个核心部件:模型、视图、控制器
- model(模型):程序的主体,主要包含业务数据和业务逻辑。
- view(视图):是程序呈现给用户的部分,是用户和程序交互的接口
- controller(控制器):用来处理用户输入数据,以及更新业务模型部分
- 想一下为什么要出现SpringMVC?
答案肯定是解耦合,- 哪里有耦合了呢?
用户发送请求到控制层,控制层接受请求后要模型层区处理数据。
那他就要调用模型层,Java是面向对象开发,那他就得有模型层的对象,那他就得在控制层里面new一个模型层的对象,才能调用下面的方法,
数据处理完后,给数据交给视图层,把数据封装成jsp对象- 非mvc设计模式,也就是说每一层需要下一层的对象,进行调用,这样的话,他的耦合度很高,不利于我们的开发,每一层的变化对于前几层的影响都是很大的,如果某一层有里面返回给用户即可。那在模型层里面也要有视图层的对象,new view().
二、springmvc的工作原理
- 一个大概的流程:客户端发送请求->前端控制器->处理器映射器->处理器适配器会根据处理器映射器解析的Handler来调用真正的处理器来处理请求->处理器返回一个模型视图modelandview->视图解析器进行解析->返回一个视图对象->前端控制器渲染数据->将得到视图对象返回给用户
- 我们知道springMVC的出现就是为了解耦合那么springmvc到底是怎么做的呢?
非常重要的一点:重定向可以解耦合,那么我们只用把请求转发不就可以解耦合了吗;
- 前端控制器DispactherServlet,他就是我们广义上的controller,只转发和接受请求,当它拦截到请求的时候就会让对应的controller去处理这个请求,但是他不知道controller在哪?
- 处理器映射器登场了- 处理器映射器的作用就是去寻找handler 然后返回结果,需要注意的是它返回给控制器的并不是单个handler而是一个执行链chain,这个执行链里有很多拦截器每个拦截器里面包含的就是handler;
- 接下来就该处理器适配器登场了:因为处理器映射器把执行链返回给前端控制器它并不能处理这个执行链,而是找到一个合适的处理器适配器去处理这些handler,处理器适配器会调用controller,然后返回一个modelandview对象;
- 前端控制器拿到ModelAndView后,他需要解析成真正的物理视图,他不干活啊,只负责调度,所以把ModelAndView交给视图解析器,
- 视图解析器把视图解析成真正的视图View后返回给前端控制器。
- 那对视图要请求进行视图渲染啊,所以他把视图解析器解析出来的视图转发给View进行视图渲染
三、springmvc的核心组件
- 前端控制器DispatcherServlet
- 处理器映射器 HandlerMapping
- 处理器适配器 HandlerAdapter
- 处理器 Handler
- 视图解析器 View reslover
- 视图 view