springmvc 请求映射原理

请求映射原理

DispatcherServlet请求拦截:

  • 重写HttpServlet的HttpServletBean没重写doGet/doPost

  • 有继承的子类FrameworkServlet实现doGet/doPost

  • FrameworkServlet实现的方案都指向processRequest(request, response);

  • processRequest中指向doService方法,然而并没有直接实现

  • doService衍生到子类DispatcherServlet的doService中

  • org.springframework.web.servlet.DispatcherServlet#doDispatch

  • 通过getHandler方法寻找用于处理请求的controller

    在getHandler方法中调用五个自动注入的handlerMapping对象来循环查找能处理请求的maping对象及其方法

    五个自动注入的handlerMapping:

    • RequestMappingHandlerMapping

      初始化时扫描@RequestMapping注解将对应的方法注入自身容器内用于匹配request请求

    • BeanNameUrlHandlerMapping

    • RouteFunctionMapping

    • SimpleUrlHandlerMapping

    • WelcomePageHandlerMapping

      匹配/路径的欢迎页映射

  • 在初始化通过注解将对应bean对象注入

    启动时由于@EnableAutoConfiguration注解加上导入spring-web相关依赖自动加载WebMvcAutoConfiguration对象,在该对象中通过@Configuration+@Bean向spring容器中注入一些特定的handlerMapping对象如下:

    		@Override
    		public RequestMappingHandlerMapping requestMappingHandlerMapping(
    				@Qualifier("mvcContentNegotiationManager") ContentNegotiationManager contentNegotiationManager,
    				@Qualifier("mvcConversionService") FormattingConversionService conversionService,
    				@Qualifier("mvcResourceUrlProvider") ResourceUrlProvider resourceUrlProvider) {
    			// Must be @Primary for MvcUriComponentsBuilder to work
    			return super.requestMappingHandlerMapping(contentNegotiationManager, conversionService,
    					resourceUrlProvider);
    		}
    
    		@Bean
    		public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext,
    				FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {
    			WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(
    					new TemplateAvailabilityProviders(applicationContext), applicationContext, getWelcomePage(),
    					this.mvcProperties.getStaticPathPattern());
    			welcomePageHandlerMapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider));
    			welcomePageHandlerMapping.setCorsConfigurations(getCorsConfigurations());
    			return welcomePageHandlerMapping;
    		}
    

    这两个主要是:

    • 处理根路径请求跳转到欢迎页的welcomePageHandlerMappingBean对象

    • 处理自定义mapping处理方法的requestMappingHandlerMappingBean对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值