SpringBoot基础(5)-SpringBoot进行web快速开发(静态资源路径和欢迎界面名称)

tech2025-07-24  11

SpringBoot学习目录

1. SpringBoot中静态资源的映射规则2. SpringBoot的欢迎界面(index.html)3. 如何修改Spring网页的网站图标4. 如何自定义静态资源路径

1. SpringBoot中静态资源的映射规则

在之前的普通Web项目中,静态资源一般是存放在web目录下,但是在SpringBoot中并没有web目录,那么那些静态的资源应该放在哪里呢?

所有的与静态资源访问位置相关的都可以到WebMvcAutoConfiguration这个类里面去看源码;因为SpringMVC的相关配置都在这里;

//这个方法主要就是用来配置映射资源的路径; public void addResourceHandlers(ResourceHandlerRegistry registry) { //isAddMappings方法中addMappings默认是true,所以一般这个方法可能不执行;(ResourceProperties类中) if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling disabled");//通过日志输出提示; return; } Duration cachePeriod = this.resourceProperties.getCache().getPeriod(); CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl(); //大致就是资源如果还没有映射到具体工程路径就添加 //addResourceLocations里的路径;这就是webjars映射在哪里找资源; if (!registry.hasMappingForPattern("/webjars/**")) { customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/") .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl)); } /*这里是将WebMvcProperties类中的staticPathPattern 值"/**"放进来; */ String staticPathPattern = this.mvcProperties.getStaticPathPattern(); /*这里判断的是映射路径为"\**"的地址,在WebMvcProperties中有的这个参数默认值是上面那个; 后面继续介绍;第2点 */ if (!registry.hasMappingForPattern(staticPathPattern)) { customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern) .addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())) .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl)); } } 通过webjars将静态资源打包成jar,然后引入;(这样的话就可以直接访问webjars下的包); 比如:在webjars中通过Maven依赖放入

在maven的依赖目录下就会出现这一个webjars目录;而SpringBoot就可以访问这个目录下面的静态文件; 所以服务器上路径/webjars/**请求(比如:http://localhost:8080/webjars/jquery/3.5.0/jquery.js),这样就可以取到3.5.0包下的jquery.js文件;

除此之外,ResourceProperties类里面还定义了这么几种路径(有些没有的可以自己创建); 上面的这些路径就是"**"所映射的默认资源路径,分别是"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/",因此这几个目录下也可以存放静态资源。(上面的源码是addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()这个方法添加的资源路径);还有一个静态资源的存放目录是在"",也就是项目的根路径;具体操作后的位置图片;

2. SpringBoot的欢迎界面(index.html)

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; } //映射到的具体路径; 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"); }

看了一下源码map(this::getIndexHtml)就类似与一个<a>指令,进行跳转,后面还加了个过滤器,存在跳转,不存在就返回空,然后存现错误界面;由此给出结论,只需要将自己写的index.html放在上面的静态资源路径下,那么SpringBoot就会自己去读取;

还有并非一味的看源码,只是说能通过源码将获得的结论记忆的更加深刻罢了;刻意看真的没必要,至少现在是没必要的;

3. 如何修改Spring网页的网站图标

这个图标说法,可能不是很清晰,看图; 所指的图标就是上面那个; 在SpringBoot中2.3.3版本的时候基本上只能通过<link>标签进行载入;

<link rel="icon" href="/static/favicon.ico"/>

这个换图标的问题,在chrome浏览器不行,不能显示;后来尝试了一下ctrl+F5刷新,好家伙,还是可以用的;

4. 如何自定义静态资源路径

了解了系统默认的静态资源的存放路径,这里还是要了解一下:

spring.resources.static-locations=classpath:/hello/

这里面还是有一些注意点的,在这里表明一下,更换静态资源的存放地址,一旦设置,那么系统默认的就无效了,这和构造方法的使用有着异曲同工之妙(创建了有参构造,默认的无参构造就无效了,必须要重新创建无参构造);还有就是这是一个数组,由此可以放许多的路径,通过逗号隔开;

最新回复(0)