3

SpringMVC的入口是DispatchServlet,它的工作大致可以分为两个部分,一个是初始化,另外一个是请求处理。下面我们对它的工作原理做简单分析。

1. 类继承关系

类继承关系

2. 初始化

HttpServletBean重写了GenericServlet的init()方法,它是整个初始化的入口。

  1. 首先,会读取配置在ServletContext中的bean属性参数,这些属性参数设置在web.xml的web容器初始化参数中,即web.xml中的context-param,然后设置这些bean属性;

  2. 接着会执行ioc容器的初始化,通过反射的方式去完成XmlWebApplicationContext的创建;

  3. 在调用refresh方法后,DispatchServlet的initStrategies()方法被调用。由它完成springmvc框架各部分的初始化,比如HandlerMapping、ViewResolver等。

springmvc初始化

3. 请求处理

FrameworkServlet重写了HttpServlet的一系列请求方法,请求首先会被FrameworkServlet的processRequest()接收,经过DispatcherServle的doService(),最终由doDispatch()完成请求处理。doDispatch()方法是springmvc框架中最核心的部分,主要包括:

1. 准备ModelAndView
2. 调用getHandler()来处理HTTP请求

首先会查询HandlerMappings,它包含了一系列从URL请求到Controller的映射。基于注解配置的springmvc使用的是DefaultAnnotationHandlerMapping。getHandler()最终会返回一个HandlerExecutionChain对象,其中包含了最终的Controller和定义的一个拦截器链。

3. 通过HandlerAdapter的handle()来触发Controller中方法的调用,最后返回ModelAndView对象

这个ModelAndView对象由相应的视图解析器解析出视图对象并由视图对象完成页面的渲染呈现。

springmvc请求处理


sunnyxd
529 声望30 粉丝