Springboot编译后,favicon.ico图标文件受损,无法正常显示,完美解决

问题描述: 

公司的一个Springboot项目,发现favicon.ico不显示。前端页面favicon.ico文件没有报404,但无法正常显示,浏览器单独访问favicon.ico链接,结果如下图这个样子,灰不溜丢的,不知道为毛线呀?

网上查询资料:有人说要开启spring.mvc.favicon.enabled=true,试了一下,发现springboot2.0之后spring没有这个参数了,完犊子。

还有人说前端要加下列代码,这不废话么,前端肯定要加呀。

<link type="image/x-ico" href="/favicon.ico" rel="shortcut icon"  />

还有其他方案,我都试了一遍,最后结论都完犊子,还是无法显示favicon.ico。

最后,经过我坚持不懈、持之以恒、锲而不舍的努力下,终于搞定啦。

经过maven编译后,我发现target中的favicon.ico文件不能正常显示,如下图:

卧槽!那肯定maven编译出现问题了。

我查看pom.xml文件,添加build.resources节点,更改maven的编译规则,如下代码,

<build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>**/*.ico</exclude>
                </excludes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.ico</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resource>
</build>

解释一下这两个resource节点,第一个resource.excludes排除resources资源的favicon.ico文件,而其他文件文件,如application.xml等可以用替换占位符(<filtering>true</filtering>),一句话,除了favicon.icon文件其他文件可以替换占位符。

第二个resouce.include复制favicon.ico到编译环境中,不能替换占位(<filtering>false</filtering>),一句话,favicon.icon不能用替换占位符

感兴趣的小伙伴可以测试一下,将第二个resouce.filtering改成true,看一侃favicon.ico会什么样子。

maven编译后,target可以正常显示favicon.ico文件了,如下图:

然后我在浏览器单独访问favicon.ico链接,也可以正常显示啦。

如果到这就结束,那就不是合格的程序员,我不断问自己,为毛线会出现这种问题?为毛线?为毛线?为毛线?....

我复盘问题的关键点是:favicon.ico不可以用<filtering>true</filtering> 查询资料发现:maven.resource如果开启filtering,那么有可能损坏二进制文件,比如图片、pdf等,原文内容结尾处如下:

As already mentioned filtering binary files like images,pdf`s etc. could result in corrupted output. To prevent such problems you can configure file extensions which will not being filtered.

最后启动项目,favicon.ico正常显示,完结撒花!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值