Spring的web框架是一个请求驱动的web框架,其设计围绕一个中心的servlet进行,它能将请求分发给控制器,并提供其它功能帮助web应用开发。然而,Spring的DispatcherServlet
所做的不仅仅是这些,它和Spring的IoC容器完全集成在一起,从而允许你使用Spring的其它功能。
下图展示了DispatcherServlet
对请求的处理流程。
图1 SpringMVC请求处理流程
Spring运行流程描述:
1)用户请求首先到达应用服务器如Tomcat,然后发送到前端控制器DispatcherServlet。
2)DispacherServlet将用户请求交给映射处理器HandlerMapping。HandlerMapping获得该Handler配置的所有相关的对象(包括
Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain的形式返回给DispatcherServlet。
3)DIspatcherServlet根据获得的Handler选择一个合适的处理适配器(HandlerAdapter)(如果成功获得HandlerAdapter对象,将先执行拦截
器的preHandler()方法)。
4)该HandlerAdapter会调用自己的handle方法,handle方法运用java的反射机制执行controller的具体方法来获得ModelAndView。
根据不同的配置,Spring在这里还可以做一些额外的工作。
- HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
- 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
- 数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
- 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5)处理适配器将从Handler(Controller)中得到的ModelAndView信息返回给DispatcherServlet。
6)根据返回的View对象选择一个合适的视图解析器(必须是Spring容器中已经注册的解析器如InternalResourceViewResolver)。
7)将视图和模型进行整合渲染呈现给用户页面。