SpringMVC的入口是DispatchServlet,它的工做大体能够分为两个部分,一个是初始化,另一个是请求处理。下面咱们对它的工做原理作简单分析。web
HttpServletBean重写了GenericServlet的init()方法,它是整个初始化的入口。spring
首先,会读取配置在ServletContext中的bean属性参数,这些属性参数设置在web.xml的web容器初始化参数中,即web.xml中的context-param,而后设置这些bean属性;mvc
接着会执行ioc容器的初始化,经过反射的方式去完成XmlWebApplicationContext的建立;app
在调用refresh方法后,DispatchServlet的initStrategies()方法被调用。由它完成springmvc框架各部分的初始化,好比HandlerMapping、ViewResolver等。框架
FrameworkServlet重写了HttpServlet的一系列请求方法,请求首先会被FrameworkServlet的processRequest()接收,通过DispatcherServle的doService(),最终由doDispatch()完成请求处理。doDispatch()方法是springmvc框架中最核心的部分,主要包括:spa
1. 准备ModelAndView
2. 调用getHandler()来处理HTTP请求xml
首先会查询HandlerMappings,它包含了一系列从URL请求到Controller的映射。基于注解配置的springmvc使用的是DefaultAnnotationHandlerMapping。getHandler()最终会返回一个HandlerExecutionChain对象,其中包含了最终的Controller和定义的一个拦截器链。对象
3. 经过HandlerAdapter的handle()来触发Controller中方法的调用,最后返回ModelAndView对象继承
这个ModelAndView对象由相应的视图解析器解析出视图对象并由视图对象完成页面的渲染呈现。get