我正在开发一个JSF web应用程序。每次当我第一次更改CSS文件并部署程序时,CSS文件中的更改都不会反映出来。我在不同的情况下进行了测试。这是怎么造成的,我该如何解决?
是的,当我按下Ctrl+F5时,它被加载
然后它只是从浏览器缓存中提供的。那很好。它在实际生产环境中节省了网络带宽。但我可以想象,这在开发过程中或每当您将更新带入生产时都会令人不安。在开发过程中,我只是学会了习惯Ctrl+F5键。但对于生产,你真的很想解决它,因为最终用户可能没有意识到这一点;技巧";。
一种常见的方法是将版本号作为请求参数附加到资源中,以破坏浏览器缓存。
<link rel="stylesheet" href="style.css?v=1.0" />
每次对CSS进行重大更改时,都希望在将更新投入生产之前增加版本号。
<link rel="stylesheet" href="style.css?v=1.1" />
这将强制浏览器重新加载样式表。
另一种方法是使用项目内部版本号或服务器启动时间。下面的示例假设您在应用程序范围中保存了一个名为startup
的java.util.Date
对象。
<link rel="stylesheet" href="style.css?v=${startup.time}" />
这将生成HTML,如:
<link rel="stylesheet" href="style.css?v=1314105929937" />
每次重新启动服务器或重新部署网络应用程序时,它都会发生变化,因此浏览器将被迫重新加载资源(即使实际上没有更改!如果缓存和带宽使用是一个问题,请记住这一点(。同样的技术也适用于其他静态资源,如JavaScripts和图像。
如果您使用JSF+Facelets而不是JSP,并通过其提供的组件(如<h:outputStylesheet>
(正确引用所有资源,那么您可以使用ResourceHandler
作为全局解决方案,而无需到处编辑资源URL。OmniFaces VersionedResourceHandler
就是一个很好的例子。
我在更改css文件时遇到了同样的问题,需要刷新网站,非常麻烦。
最终,我发现了这个不错的小"工具",一个javascript文件,您需要在项目中实现它。之后,你不需要再刷新网站了,你只需要保存你的css文件,这些更改将在2、3秒后自动采用。
以下是链接:http://cssrefresh.frebsite.nl/
顺便说一句,BalusC一如既往地提供了非常有用的技巧;(