springboot开发web项目静态资源映射规则

创建springboot项目自动导入web应用时,会自动导入WebMvcAutoConfiguration(在autoconfigure.jar中找到),其中有个添加静态资源的方法addResourceHandlers,代码如下

如果我们以jar包的形式导入静态资源,所有/webjars/**请求,都去classpath:/META-INF/resources/webjars/下找资源,以jquery为例,导入jquery jar包,导入后可以查看依赖jar包的目录

可以看到目录为META-INF/resources/webjars/jquery,我们启动项目后输入http://localhost:8080/webjars/jquery/3.3.1/jquery.js可以访问到jquery.js文件

 下面讲解一下以静态资源文件夹的映射处理,查看添加文件路径方法传入的参数this.resourceProperties.getStaticLocations(),深入探索发现staticLocations是四个路径位置,如下

"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"

也就是说只要把静态资源放在这几个目录下,这些就是静态资源文件夹,都可以访问到,比如输入localhost:8080/abc === 去静态资源文件夹里面找abc,这里/就是类路径的根目录,就是项目中的resources目录

 该类中还有个方法welcomePageHandlerMapping,是映射欢迎页面的,我们查看其中代码

public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext) {
			WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(
					new TemplateAvailabilityProviders(applicationContext), applicationContext, getWelcomePage(),
					this.mvcProperties.getStaticPathPattern());
			welcomePageHandlerMapping.setInterceptors(getInterceptors());
			return welcomePageHandlerMapping;
		}


private Optional<Resource> getWelcomePage() {
			String[] locations = getResourceLocations(this.resourceProperties.getStaticLocations());
			return Arrays.stream(locations).map(this::getIndexHtml).filter(this::isReadable).findFirst();
		}

		private Resource getIndexHtml(String location) {
			return this.resourceLoader.getResource(location + "index.html");
		}

通过探索方法getWelcomePage()可以看出,最后返回的是静态资源文件夹下任何一个位置的index.html,所以只要文件名称是这个,就是项目的欢迎页面

该类中还有个映射网址栏图标favicon.ico路径的方法faviconHandlerMapping,代码如下

public SimpleUrlHandlerMapping faviconHandlerMapping() {
				SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
				mapping.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
				mapping.setUrlMap(Collections.singletonMap("**/favicon.ico", faviconRequestHandler()));
				return mapping;
			}

从代码中可以看出不管是任何请求,都会去找静态资源文件夹下任何一个位置的的favicon.ico,这样网址栏图标就可以切换了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值