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

如何在JBoss AS 7中启用静态资源缓存?

嘿,我之前也踩过Spring Web Flow + PrimeFaces静态资源缓存的坑,看到你说菜单切换慢、静态资源没缓存还显示1969年过期,这大概率是缓存头配置出问题了——那个1969年其实是时间戳0对应的时区偏移,本质就是资源被标记为立即过期,浏览器每次都得重新请求。给你几个针对性的解决办法:

针对Spring Web Flow + PrimeFaces静态资源缓存问题的解决方案

1. 配置Spring MVC的静态资源缓存规则

Spring Web Flow依赖Spring MVC处理静态资源,你需要在配置里明确设置缓存时长,避免资源被标记为立即过期:

XML配置方式

<mvc:resources mapping="/resources/**" location="/resources/" cache-period="31536000"/>
<!-- 31536000秒 = 1年,可根据业务需求调整时长 -->

Java Config配置方式

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("/resources/")
                .setCachePeriod(31536000);
    }
}

这里的cache-period会对应HTTP响应头的Cache-Control: max-age值,之前的1969年异常,大概率是这个值没被正确设置,甚至被覆盖成了0/负数。

2. 开启PrimeFaces专属资源缓存

PrimeFaces有自己的资源处理机制,需要单独配置缓存规则:

在web.xml中添加PrimeFaces资源过滤器:

<filter>
    <filter-name>PrimeFaces Resource Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.ResourceFilter</filter-class>
    <init-param>
        <param-name>cache</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>cache-duration</param-name>
        <param-value>31536000</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>PrimeFaces Resource Filter</filter-name>
    <url-pattern>/javax.faces.resource/*</url-pattern>
</filter-mapping>

这个过滤器会专门处理PrimeFaces的内置资源(比如主题CSS、组件JS),确保它们的缓存头正确生效。

3. 检查反向代理/HTTP服务器的缓存配置

如果你的应用前端有Nginx、Apache这类反向代理,它们可能会覆盖Spring/PrimeFaces设置的缓存头:

以Nginx为例,添加静态资源缓存规则

location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

这段配置会给静态资源设置1年的过期时间,同时标记immutable,告诉浏览器资源不会变更,无需重复验证。

4. 排查自定义拦截器/过滤器的干扰

有时候项目里的自定义拦截器、过滤器会无意间修改Cache-Control、Expires这类响应头。你可以检查所有HandlerInterceptor或Filter实现,看看有没有把Expires设置为0/负数的代码——这会直接导致浏览器显示1969年的过期时间。

验证方法

修改配置后重启服务器,打开浏览器开发者工具(F12)切换到Network标签页,刷新页面查看静态资源的响应头:确认Cache-Control的max-age是你设置的值,Expires显示为未来的时间(而非1969年)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:25:03