You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级JDK与Struts后Font-face图标显示异常问题求助

Struts2 2.3升级至2.5后Font-face图标渲染异常问题分析

问题背景与现象

  • 已按照官方迁移指南完成Struts2从2.3.37到2.5.33的升级,同步将JDK版本从6升至7
  • 异常表现:部分页面的Pe-icon-7-stroke字体图标无法正常渲染,浏览器已成功加载包含该font-face的CSS文件,但该字体未被正确解析;同一CSS文件内的其他字体图标显示完全正常

初步排查方向与原因判断

1. Struts2静态资源处理逻辑变更

Struts2 2.5对静态资源的处理机制做了重要调整,核心变化可能影响字体文件的访问:

  • 默认静态资源处理器的规则更新,可能未正确识别Pe-icon-7-stroke对应的字体文件类型(如.ttf/.woff),导致返回的MIME类型错误,浏览器无法解析
  • 静态资源拦截范围调整,字体文件请求被Struts2核心过滤器拦截,未被正确转发到静态资源处理流程,返回内容异常(比如返回HTML而非字体二进制数据)

2. JDK版本升级带来的资源打包影响

JDK7的默认压缩工具、编码逻辑与JDK6存在差异:

  • 如果项目构建过程中对静态资源(包括字体文件)进行了压缩或转码,JDK7可能破坏了Pe-icon-7-stroke字体文件的二进制结构,而其他字体文件因格式或压缩规则未受影响,最终导致浏览器无法解析该字体

配置修改与解决建议

调整Struts2静态资源相关配置(struts.xml)

  1. 配置正确的字体文件MIME类型映射
    添加以下常量,确保浏览器能正确识别字体文件类型:
<constant name="struts.static.contentType.mappings" value="eot=application/vnd.ms-fontobject,woff=application/font-woff,woff2=font/woff2,ttf=application/font-sfnt,svg=image/svg+xml"/>
  1. 排除字体文件路径被Struts2过滤器拦截
    通过struts.action.excludePattern配置,让字体文件请求直接绕过Struts2核心过滤器:
<constant name="struts.action.excludePattern" value="/static/fonts/.*?\.(eot|woff|woff2|ttf|svg)"/>

注:需将路径/static/fonts/替换为你项目中实际的字体文件存放路径

  1. 验证静态资源处理器配置
    确认struts.staticContentHandler使用默认实现org.apache.struts2.dispatcher.DefaultStaticContentHandler,若有自定义处理器,需检查其对字体文件的处理逻辑是否存在漏洞

检查项目构建脚本

确保在JDK7环境下打包时,不对字体文件进行不必要的压缩或转码。例如在Maven的maven-resources-plugin中添加过滤规则:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>eot</nonFilteredFileExtension>
            <nonFilteredFileExtension>woff</nonFilteredFileExtension>
            <nonFilteredFileExtension>woff2</nonFilteredFileExtension>
            <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
            <nonFilteredFileExtension>svg</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

内容的提问来源于stack exchange,提问作者Alexandre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:06:19