Springboot 在设置静态资源访问前缀的前提下,保证欢迎页(index.html)支持生效

        当我们日常生产中,访问静态资源一般需要设置静态资源访问前缀,目的是静态资源不会被普通的拦截器拦截等.......

        但是当我们访问欢迎页时,如果我们之前设置过静态资源访问前缀,结果就会为404找不到资源,这个原因我们可以从springboot源码来探究

@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;
		}

	WelcomePageHandlerMapping(TemplateAvailabilityProviders templateAvailabilityProviders,
			ApplicationContext applicationContext, Optional<Resource> welcomePage, String staticPathPattern) {
//注意这个地方1
		if (welcomePage.isPresent() && "/**".equals(staticPathPattern)) {
			logger.info("Adding welcome page: " + welcomePage.get());
			setRootViewName("forward:index.html");
		}
//注意这个地方2
		else if (welcomeTemplateExists(templateAvailabilityProviders, applicationContext)) {
            // 调用Controller  /index
			logger.info("Adding welcome page template: index");
			setRootViewName("index");
		}
	}

        从源码得知,当我们的欢迎页存在且我们spring.mvc.staticPathPattern为"/**"时,服务器会自动转发到index.html中

        那么当我们在yaml配置文件中设置了static-path-patter时,第一个if语句就不会进入,会进入第二个if语句,即服务器会寻找/index请求。

问题到这里就很明朗了,我们设置了静态资源访问前缀后,我们只需要添加一个"/index"请求,这个请求返回index.html即可。这样当我们服务器在寻找欢迎页时,此时我们服务器会自动寻找"/index"请求,进而返回我们返回的index.html页面。

        所以我们这个请求是同步的,不能添加@ResponseBody,但是我们通常在控制器层就设置了@RestController(等于@Controller+@ResponseBody),这时我们也不需要将@RestController改为@Controller,而是直接将我们的"/index"请求返回ModelAndView试图页面,ModelAndView对象调用setViewName方法来设置我们的返回页面,之后thymeleaf会自动解析我们templates文件夹中的index.html页面,至此,问题解决。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值