源码解析SpringMVC处理请求的完整流程

编程入门 行业动态 更新时间:2024-10-26 04:32:33

<a href=https://www.elefans.com/category/jswz/34/1770099.html style=源码解析SpringMVC处理请求的完整流程"/>

源码解析SpringMVC处理请求的完整流程

1.WebMvcAutoConfiguration


EnableWebMvcConfiguration自动装配类负责加载SpringMVC涉及的HandlerAdapterHandlerMappingExceptionHandlerExceptionResolver等。
SpringMVC利用 DispatchServlet 处理上游Tomcat的请求时,会被HandlerMapping、HandlerAdapter的相关子类分别先后执行,这样做的原因是:

  1. 通过RequestUril找到相应的handler是因为HandlerMapping提前建立了 RequestUril & Handler 之间的映射关系。
  2. 不同HandlerMapping表明解析Handler上的Uri方式是不同的。
  3. HandlerAdapter触发执行 Uri 在Handler中的目标方法。


WebMvcAutoConfigurationAdapter自动装配类负责加载SpringMVC涉及的静态资源等Web资源。例如LocaleResolver、视图解析器InternalResourceViewResolver、ContentNegotiatingViewResolver等。

@Configuration(proxyBeanMethods = false)
public class WebMvcAutoConfiguration {private static final String[] SERVLET_LOCATIONS = { "/" };@Configuration(proxyBeanMethods = false)@Import(EnableWebMvcConfiguration.class)@EnableConfigurationProperties({ WebMvcProperties.class, ResourceProperties.class })@Order(0)public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer {...@Bean@ConditionalOnBean(ViewResolver.class)@ConditionalOnMissingBean(name = "viewResolver", value = ContentNegotiatingViewResolver.class)public ContentNegotiatingViewResolver viewResolver(BeanFactory beanFactory) {...}...}// 该注解保证父类WebMvcConfigurationSupport也参与SpringBoot启动过程中各个注解的解析过程@Configuration(proxyBeanMethods = false)public static class EnableWebMvcConfiguration extends DelegatingWebMvcConfiguration {...@Bean@Overridepublic RequestMappingHandlerAdapter requestMappingHandlerAdapter(@Qualifier("mvcContentNegotiationManager") ContentNegotiationManager m,@Qualifier("mvcConversionService") FormattingConversionService c,@Qualifier("mvcValidator") Validator v) {RequestMappingHandlerAdapter adapter = super.requestMappingHandlerAdapter(m,c, v);boolean ignoreDefaultModelOnRedirect = this.mvcProperties.isIgnoreDefaultModelOnRedirect();adapter.setIgnoreDefaultModelOnRedirect(this.mvcProperties == null || ignoreDefaultModelOnRedirect);return adapter;}...@Bean@Primary@Overridepublic RequestMappingHandlerMapping requestMappingHandlerMapping(@Qualifier("mvcContentNegotiationManager") ContentNegotiationManager manager,@Qualifier("mvcConversionService") FormattingConversionService conversionService,@Qualifier("mvcResourceUrlProvider") ResourceUrlProvider resourceUrlProvider) {// 调用父类WebMvcConfigurationSupportreturn super.requestMappingHandlerMapping(manager, conversionService,resourceUrlProvider);}...}
}

1.2.WebMvcConfigurationSupport

public class WebMvcConfigurationSupport implements ApplicationContextAware, ServletContextAware {@Beanpublic RequestMappingHandlerMapping requestMappingHandlerMapping(...}@Beanpublic PathMatcher mvcPathMatcher() {...}@Beanpublic BeanNameUrlHandlerMapping beanNameHandlerMapping(...}@Beanpublic HandlerExceptionResolver handlerExceptionResolver(@Qualifier("mvcContentNegotiationManager") ContentNegotiationManager contentNegotiationManager) {List<HandlerExceptionResolver> exceptionResolvers = new ArrayList<>();configureHandlerExceptionResolvers(exceptionResolvers);if (exceptionResolvers.isEmpty()) {addDefaultHandlerExceptionResolvers(exceptionResolvers, contentNegotiationManager);}

更多推荐

源码解析SpringMVC处理请求的完整流程

本文发布于:2023-12-04 22:42:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1662345.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:源码   流程   完整   SpringMVC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!