Java 在jboss服务器中为web应用程序进行新部署后,浏览器缓存文件未得到更新

Java 在jboss服务器中为web应用程序进行新部署后,浏览器缓存文件未得到更新,java,jboss,browser-cache,cache-control,etag,Java,Jboss,Browser Cache,Cache Control,Etag,我正在使用JBossServer7.1.1部署JavaWeb应用程序。 对于js、css、字体文件,浏览器缓存不会随着新的更改而更新。每次我们都要求客户端清除浏览器中的缓存以使新更改生效 是否有我可以配置的配置,以便在部署新代码时,我可以引导所有请求随更新的文件一起提供 通过搜索这个主题,我发现,我们可以编写自定义方法来设置e-tag值。是否有任何配置可以帮助我这样做 大多数情况下,我们会进行热部署(在jboss管理控制台中上传war文件,而不需要停机)。因此,我怀疑在服务器启动时配置自定义电子

我正在使用JBossServer7.1.1部署JavaWeb应用程序。 对于js、css、字体文件,浏览器缓存不会随着新的更改而更新。每次我们都要求客户端清除浏览器中的缓存以使新更改生效

是否有我可以配置的配置,以便在部署新代码时,我可以引导所有请求随更新的文件一起提供

通过搜索这个主题,我发现,我们可以编写自定义方法来设置e-tag值。是否有任何配置可以帮助我这样做

大多数情况下,我们会进行热部署(在jboss管理控制台中上传war文件,而不需要停机)。因此,我怀疑在服务器启动时配置自定义电子标签时,它是否会在热部署期间更新

或者有没有一种方法可以在web应用程序的web.xml文件中处理它

我需要一个解决方案,可以使用浏览器缓存,直到下一个部署发生的js,css和字体文件。我不知道如何设置“expires”标题。因为我们没有固定的部署周期

如果您需要更多信息以获得解决方案,请告诉我。

根据,您可以通过更改响应标题来禁用缓存。 您可以使用
response.setHeader(“缓存控制”,“无缓存,无存储”)来实现这一点

[编辑]


您还可以向链接添加查询字符串(请参阅),例如,您可以执行./design.css?v=1以及下次第一次使用./design.css?v=1。您可以动态更改浏览器缓存很少更改的文件所需的编号。但有时它们确实会更改,然后您希望触发浏览器缓存清除。比如:

<script type="text/javascript">
localStorage.clear();
</script>

localStorage.clear();
但是,可靠的解决方案是在服务器端使用以下版本:

<link type="text/css" rel="stylesheet" href="/css/mystyles-1.01.css">

由于您使用jboss部署应用程序,我想您的页面不是静态的

如果您不想弄乱
缓存控制
,一个简单的解决方案是在每个资源url旁边附加一个动态的“缓存中断”。因此,您的资源URL(例如,在
.jsp
中)应该是这样的:

<link rel="stylesheet" href="styles.css?_=${cacheBust}">
<script type="text/javascript" src="script.js?_=${cacheBust}">
ServletContextListener

@WebListener
public class InitListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        sce.getServletContext().setAttribute("cacheBust", UUID.randomUUID().toString());
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }

}

我实际上不知道该禁用什么缓存。如果文件(js、css、字体等)发生更改,我希望浏览器更新缓存。这可以通过配置e-tags头来完成(我不能100%确定这是否有效)。如果这样做有效,我想知道如何正确配置它。否则,我希望得到一个解释“这里还有什么可以帮助?”和“为什么电子标签在这里帮不上忙?”的答案。您还可以向链接添加一个查询字符串(请参阅)。例如,您可以执行。/design.css?v=1以及下次第一次使用。/design.css?v=1。
@WebListener
public class InitListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        sce.getServletContext().setAttribute("cacheBust", UUID.randomUUID().toString());
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }

}