@font-face src: url(...) 无法找出上下文路径,这可能是一个变量

@font-face src: url(...) could not figure out context path, which could be a variable

我的 css 文件有使用 URL 绝对路径的自定义字体。它在默认上下文路径为空的情况下完美运行:

@font-face {
    src: url('/font/myfont-Regular.woff') format('woff');
}

Web 应用程序部署在 jBoss 或 Tomcat 中,并且上下文路径是可配置的。 "ABC" 以下可以是任何内容。

<jboss-web>
    <context-root>ABC</context-root>
</jboss-web>

上下文路径不是空的,我的自定义字体无法再加载,因为它不知道如何将 "context path" 添加到 "URL" 以获取字体位置。

设置上下文路径后加载此自定义字体时出现 404 错误。 404 的原因是它试图通过加载 http://www.example.com/font/myfont-Regular.woff

虽然它应该从以下位置加载:
http://www.example.com/ABC/font/myfont-Regular.woff

但是 "ABC"(上下文路径)可在客户端配置,我无法在 css 文件中对其进行硬编码。
我已经在 css 文件中尝试了 "c:url" 标记,但无法对其进行评估。 (这是可以理解的)。 css 文件也不会知道 JSP 脚本。

我想通过"context path"感知

找到一种加载自定义字体的方法

解决方案不是外部 css 文件,而是在 JSP 文件内使用内部样式表语法,以便了解上下文路径。例如,将以下部分嵌入 JSP 中的 "head" 部分。 "c:url" 然后会正确解析包含上下文的路径。

<style> 
   @font-face {
     ....
     src: url("<c:url value='/font/myfont-Regular.woff'/>") format('woff');
   }
</style> 

现在要改进上述内部样式的re-usability,还有一个技巧是使用一个JSP(或JSPF)文件,其唯一内容是上述内部样式。然后可以在必要时将其包括在内。它必须具有“.jsp”或“.jspf”的扩展名才能成为 "context aware"。