SpringMVC执行流程?

1,浏览器发送请求,被DispaherServlet拦截
DispatcherServlet--是SpringMVC最核心的类

DispatcherServlet--是SpringMVC最核心的类

DispatcherServlet通过“url-pattern”绑定了根路径“/”(对所有地址进行映射)所以,向当前工程发送的所有请求,都要通过DispatcherServlet进行处理。

2,DispatcheServlet 接到请求后,通过“HandlerMapping”接口及其实现类来寻找URL映射。(HandlerMapping的作用是通过,URL找到与之对应的IOC容器对象,以及所对应的处理方法。)

HandlerMapping会扫描当前程序中所有的“GetMapping”/"PostMapping"注解。然后确认是哪个接口对应了URL中的访问地址。当找到对应的接口后,就自动到“IOC”容器中找到启动时已经创建好的“Controller类”的对象。然后使用对象对应的接口方法,处理请求。

3,当前的Controller 是不知道如何解析“请求”和“响应”的。这里还要再依赖“HanderAdapter”适配器接口,用于处理请求与响应中的数据。

(利用“HttpMessageConverter”对请求和响应进行处理和设置)

4,当Controller,依靠HttpMessageConveter方法处理、解析请求以后,Controller根据解析结果执行代码。

5,Controller返回一个ModelAndView(模型与视图,表示要进行页面的显示和数据的绑定)对象

6,DispatcherServlet接收到返回的ModelAndVeiw对象后,会选择视图(ViewResovler)(如果:ModelAndVeiw中返回的是一个“ftl”freemarker脚本,DispacherServlet会帮我们选择FreemarkerViewResolver 进行处理。。如果是一个“JSP",就会选择JSP的ViewResolver)

7,被选择的视图解析器,例如FreemarkerViewResolver,会将我们存放在,ModelAndView中的Model(也就是数据),结合Freemarker的模板文件,生成HTML.。

8,生成的HTML会随着响应,发回到浏览器。浏览器再对HTML进行解析,并进行展示。

关键节点:

关键节点:

  • 1,所有请求被DispacherServlet进行拦截,

  • 2,拦截后使用“HanlerMapping”接口及其实现类,来寻找URL映射。确认是哪个Controller执行。

  • 3,由DispatcheServlet将Contrller实例化,再又HandlerAdapter适配器实现者调用,HttpMessageConverter对当前的请求进行解释。(这样当前的Controller方法就可以接收到包含在请求中的参数和其它数据)

  • 4,Controller方法,对这些数据进行处理。通常返回一个ModleAndView对象。

  • 5,DispacherServlet 收到返回的ModelAndView 以后,会根据模板引擎的规则,选择不同的视图解析器(对应的ViewResolver)。

  • 6,ViewResolver 将 Model数据,结合编写好的View模板,生成对应的HTML.

  • 7,通过响应将HTML发回给浏览器

  • 8,浏览器再对HTML进行解析显示