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

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));
			}
		}
  1. 通过webjars将静态资源打包成jar,然后引入;(这样的话就可以直接访问webjars下的包);
    比如:在webjars中通过Maven依赖放入

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

  1. 除此之外,ResourceProperties类里面还定义了这么几种路径(有些没有的可以自己创建);

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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值