SpringMvc源码探秘(三)请求是怎么到达Controller的(二)
2023-09-21 08:53:52
导语
在上一篇《Spring Mvc 源码探秘(一)Tomcat 启动项目时 Spring 做了些什么》中,我们了解了 Tomcat 启动项目时 Spring 做了些什么。今天我们继续探究 Spring Mvc 是如何处理请求的。
这篇文章的目的是为了加深你对 Spring Mvc 请求处理机制的理解,并为你以后深入研究 Spring Mvc 框架打下良好的基础。本文中的结论均是根据 Spring MVC 4.3.18.RELEASE 版本得出的。
请求如何到达 Controller
DispatcherServlet
DispatcherServlet 是 Spring Mvc 中的核心组件之一,它是负责接收请求并分发到相应的 Controller 的。当 Tomcat 启动项目时,Spring 会在 web.xml 中配置一个 Servlet,这个 Servlet 的类名就是 DispatcherServlet。
当一个请求到达 DispatcherServlet 时,DispatcherServlet 会先检查这个请求是否匹配任何 HandlerMapping。HandlerMapping 是一个接口,它负责将请求映射到相应的 Handler。Spring Mvc 中提供了多种不同的 HandlerMapping 实现,比如 BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping、RequestMappingHandlerMapping 等。
HandlerAdapter
当 DispatcherServlet 找到匹配的 HandlerMapping 后,它会将请求交给 HandlerAdapter。HandlerAdapter 是一个接口,它负责将请求适配到相应的 Handler。Spring Mvc 中提供了多种不同的 HandlerAdapter 实现,比如 HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter、RequestMappingHandlerAdapter 等。
Handler
Handler 就是我们自己编写的 Controller。当 HandlerAdapter 将请求适配到 Handler 后,Handler 就会执行相应的业务逻辑,并返回一个 ModelAndView 对象。ModelAndView 对象包含了视图名和模型数据。
ViewResolver
当 DispatcherServlet 拿到 ModelAndView 对象后,它会将 ModelAndView 对象交给 ViewResolver。ViewResolver 是一个接口,它负责将视图名解析成具体的 View。Spring Mvc 中提供了多种不同的 ViewResolver 实现,比如 InternalResourceViewResolver、JstlViewResolver、FreeMarkerViewResolver 等。
View
View 是负责将模型数据渲染成 HTML、JSON 等格式的。当 ViewResolver 将视图名解析成具体的 View 后,View 就会将模型数据渲染成相应的格式,并返回给 DispatcherServlet。
总结
以上就是 Spring Mvc 请求处理的流程。希望这篇文章能帮助你更好地理解 Spring Mvc 的请求处理机制。
结语
好了,以上就是我对 Spring Mvc 请求处理机制的介绍。希望这篇文章对你有帮助。如果你有其他问题,欢迎在评论区留言。