springboot显示图标依赖_Java springboot favicon.ico 图标不显示探究

最近项目中遇到了这个问题,以前没有怎么关注过,自己探究一番,查看以前写的demo,竟然有的显示有的不显示,再查看以前的项目,老项目都没有问题,何故,深挖。

首先自然是百度,看到的说法都是两种,

方案一是把ico命名为favicon.ico,放到static下,自动显示。

方案二是spring.mvc.favicon.enabled=false,然后

在html文件中添加下面的

一测试无效,二可以,但是有问题,对于没有引用母版页的用起来太费劲。记得以前用iis的时候只要把ico命名为favicon.ico,放到根目录即可,所以说这个请求应该是浏览器主动发的,不应该页面引用,只能继续探究。

百度+查看springboot源码,找到WebMvcAutoConfiguration中有对favicon的处理,明白了上边方案一放到static下为什么自动显示,会自动匹配默认的四个静态资源路径

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

外加一个"/"根路径

locations.add(new ClassPathResource("/"));

所以说放到这些目录下性质都是一样的

462b4e4b6d2664cb1988a790eb5fdf94.png

但是并没有解决问题,继续研究源码,无解。

回过头来思考,favicon.ico的机制问题,想到默认情况下view渲染时并没有渲染到ico,而是浏览器独自发起请求的,那么应该不是代码的问题,但是肯定也不是浏览器的问题,那为什么浏览器有时候请求,有时候不请求呢,首先想到缓存,但是正常的异步请求就算缓存也会正常请求,只是提示来自缓存,一直以为ico也应该是这样,而且浏览器也勾选了禁用缓存。查资料,结果看到一个说法,谷歌有就不会再请求,而火狐是大约2分钟请求一次,可以通过清除缓存或者ctrl+F5强制刷新请求,然后ctrl+F5测试,果然谷歌重新请求了favicon.ico,报404,查看路径,http://localhost/favicon.ico,到此瞬间恍悟,还是机制的问题,浏览器默认请求http://域名+favicon.ico,但是项目经常会配上项目名,也就是实际路径时http://域名+项目名+favicon.ico,路径错误,自然请求不到,由于谷歌的缓存机制,请求一次没请求到,后边不请求了,自然就没有了。

147d4257cc2fa03864d47481b2656029.png

解决方案:

由于这是浏览器的策略问题,所以没有直接的解决方案,

方案一:不配项目名,http://域名(或者IP+端口)/favicon.ico能访问到图片,就没有问题

方案二:页面明确指定ico

但是这样比较费劲,所有页面都要加,折中方案就是用母版页,统一添加,已有项目的话改动也比较大,

折中方案二:通过拦截器,在页面渲染完成后追加一段js,

可以继承HandlerInterceptor接口,重写afterCompletion方法,添加以下代码通过js写入

String link = "";

response.getWriter().append(link);

注:有空继续研究,看有没有其他方法,看了一些网站,全都是通过link指定的,默认的方式确实问题多多,还是指名道姓的好。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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`。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值