(解答)SpringBoot从2.1.X过渡到2.2.X后,网站图标favicon.ico去哪了?

(解答)SpringBoot从2.1.X过渡到2.2.X后,网站图标favicon.ico去哪了?

故事发生背景:

在学习springboot源码的过程中,阅读到自动配置webmvc静态资源的时候,发现favicon.ico代码块改动过了,于是想办法把它找出来。

在2.1.X版本中,springboot jar包中还是会默认携带一个存放于resources文件夹下的favicon.ico文件。并且把这个ico文件添加到了静态资源路径下。需要注意的是,他是写死了作为网站图标的文件名的,不可更改。代码块如下:
WebMvcAutoConfiguration类下的。我们可以看到如果不配置这个条件属性的话,我们的项目会默认去静态资源路径下寻找这个ico文件并显示。
如果想要关闭的话,就在我们的application.properties或者yml文件下,配置spring.mvc.favicon.enabled=false即可。

@Configuration
		@ConditionalOnProperty(value = "spring.mvc.favicon.enabled", matchIfMissing = true)
		public static class FaviconConfiguration implements ResourceLoaderAware {

			private final ResourceProperties resourceProperties;

			private ResourceLoader resourceLoader;

			public FaviconConfiguration(ResourceProperties resourceProperties) {
				this.resourceProperties = resourceProperties;
			}

			@Override
			public void setResourceLoader(ResourceLoader resourceLoader) {
				this.resourceLoader = resourceLoader;
			}

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

			@Bean
			public ResourceHttpRequestHandler faviconRequestHandler() {
				ResourceHttpRequestHandler requestHandler = new ResourceHttpRequestHandler();
				requestHandler.setLocations(resolveFaviconLocations());
				return requestHandler;
			}

			private List<Resource> resolveFaviconLocations() {
				String[] staticLocations = getResourceLocations(this.resourceProperties.getStaticLocations());
				List<Resource> locations = new ArrayList<>(staticLocations.length + 1);
				Arrays.stream(staticLocations).map(this.resourceLoader::getResource).forEach(locations::add);
				locations.add(new ClassPathResource("/"));
				return Collections.unmodifiableList(locations);
			}

		}

而在2.2.X版本的springboot代码中,该段配置类从这个auto配置webmvc的类中移除掉了。
框架开源的好处就是我们可以在github中搜索到他的提交记录,真的太方便了。

首先我可以确定这个favicon.ico文件是个静态资源,在
WebMvcAutoConfiguration这个类中配置。
于是我定位到github这个项目的WebMvcAutoConfiguration.java文件
在这里插入图片描述
在历史记录里面我发现了两条相关的提交记录,提交者wilkinsona,提交时间2019 Aug 21和Aug 23。
稍微读了一下他的操作,第一次把resources路径下的ico文件优先级提高到类路径之前,第二次就直接把默认带的spring网站图标文件favicon.ico文件给删了,即不提供默认的ico文件了,并且把原本在autoconfig里面的配置删了。

总结:

favicon.ico即Favorites Icon的缩写,它是一个图标,会出现在支持它的浏览器标题左边。
浏览器会打开网站会自动在网页项目的资源目录下搜索这个文件名的图标文件,有就显示。故springboot即我们的项目其实现在是不需要过多的配置的。我想作者也是想精简项目代码吧,不做重复的操作,在这里不得不佩服源码的作者们!

我们的页面在标签上添加下面一段代码并且资源文件放放对,即可成功让浏览器调到我们的图标文件,如果还没有不妨试试刷新浏览器缓存~

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

这里其实我是为阅读源码的小伙伴提供一个解决思路。我们学习时使用的jar包版本可能各种各样,如果前后版本的不同影响到阅读代码时,不妨试着去找找不同,并且揣测一下作者的用意。
说不定下次你也会成为一个贡献源码的作者,后面是小白在阅读你的提交记录!

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: springboot favicon.ico是指在使用Spring Boot框架开发Web应用时,为了美化网站图标,需要在项目中添加一个名为favicon.ico图标文件。这个文件通常放在项目的静态资源目录下,浏览器会自动请求这个文件并显示在浏览器标签页上。在Spring Boot中,可以通过在静态资源目录下添加favicon.ico文件来实现这个功能。 ### 回答2: Spring Boot是一个用于快速开发Java应用程序的框架,它内置了许多常用的功能和配置,使开发人员能够更加轻松地构建可靠和高性能的应用程序。 在Spring Boot应用程序中,默认情况下,会有一个托管favicon.ico文件的功能。favicon.ico是浏览器显示在标签页和书签标题上的小图标。当我们在浏览器中打开Spring Boot应用程序时,浏览器会自动请求并加载favicon.ico文件。 在Spring Boot中,处理favicon.ico请求的方式有两种。一种是将favicon.ico文件直接放置在“\src\main\resources\static”目录下,Spring Boot会自动识别并处理这个文件。另一种方式是自定义favicon.ico文件的位置和名称,可以通过在“application.properties”或“application.yml”配置文件中添加如下配置来指定: spring.mvc.favicon.enabled=true spring.mvc.favicon.location=classpath:/path/to/favicon.ico 这里的“classpath:/path/to/favicon.ico”是自定义的favicon.ico文件路径,可以根据具体情况进行修改。配置文件中的“spring.mvc.favicon.enabled=true”表示启用favicon.ico功能。 需要注意的是,如果我们不需要使用favicon.ico文件,则可以将“spring.mvc.favicon.enabled”设置为false,这样在浏览器中请求/favicon.ico时会返回404错误。 总之,Spring Boot提供了便捷的favicon.ico处理功能,我们可以通过默认配置或自定义配置的方式来控制该功能的开启与关闭,以及指定favicon.ico文件的位置和名称,从而实现更好的用户体验。 ### 回答3: Spring Boot默认情况下会自动加载一个名为`favicon.ico`的图标文件,用于作为网页的图标显示在浏览器的标签页上。这个图标是在网站根目录下寻找的,一般是放在静态资源文件夹中,比如`src/main/resources/static/`或者`src/main/resources/public/`。 如果没有在网站根目录下找到`favicon.ico`文件,Spring Boot将返回一个默认的图标。如果你想自定义这个图标,只需要将你自己的`favicon.ico`文件放在静态资源文件夹中即可。 另外,如果你希望完全移除这个图标,可以在`application.properties`文件中添加如下配置: ```properties spring.mvc.favicon.enabled=false ``` 这将禁用Spring Boot自动加载`favicon.ico`。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值