首先初始化DispatcherServlet
在web.xml里配置
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
当DispatcherServlet初始话完成后,springmvc.xml配置文件加载完成。Controller注册表已经存在springmvc容器中
存储以map形式进行存储**。key是Controller名,value是该Controller的所有方法**
执行流程
-
客户端发起请求
-
DispatcherServlet拦截请求,解析URL,将要请求的 Controller方法解析出来并传给RequestMappingHandlerMapping请求处理器映射器
-
RequestMappingHandlerMapping拿到方法名后,去注册表中找,如果发生重名,或找不到的情况,向DispatcherServlet发送错误信息,DispatcherServlet将错误告诉客户端。如果注册表中正常找到该方法,告诉DispatcherServlet可以执行,并返回该方法的执行链ExcutionChain
-
DispatcherServlet将执行链ExcutionChain发送给请求处理器适配器RequestMappingHandlerAdapter,适配器使用反射技术执行方法。
执行方法期间会调用参数解析器HandlerMethodArgumentResolver,
springmvc自动封装参数就是这个接口做的,执行完方法后返回ModelAndView -
DispatcherServlet拿到ModelAndView, 将ModelAndView给视图解析器InternalResourceViewResolver进行解析。InternalResourceViewResolver解析结束后将解析结果返回给DispatcherServlet.
-
DispatcherServlet拿到解析结果后,将结果渲染成jsp或html页面
-
DispatcherServlet将渲染好的页面返回给客户端