Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching JSF2静态资源缓存_Caching_Jsf 2_Filter_Primefaces_Java Ee 6 - Fatal编程技术网

Caching JSF2静态资源缓存

Caching JSF2静态资源缓存,caching,jsf-2,filter,primefaces,java-ee-6,Caching,Jsf 2,Filter,Primefaces,Java Ee 6,Glassfish 3.1.2,Mojarra 2.1.6,SSL激活 我有一个关于静态资源缓存的问题。我读过一些关于这方面的帖子,但我不确定我们应该使用哪些选项。这个 这也是一篇关于资源缓存的好文章。在我们的应用服务器中,SSL被激活。我们看到静态资源(图像、脚本、css)没有被缓存 这是我的测试过滤器: @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain c

Glassfish 3.1.2,Mojarra 2.1.6,SSL激活

我有一个关于静态资源缓存的问题。我读过一些关于这方面的帖子,但我不确定我们应该使用哪些选项。这个

这也是一篇关于资源缓存的好文章。在我们的应用服务器中,SSL被激活。我们看到静态资源(图像、脚本、css)没有被缓存

这是我的测试过滤器:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        String uri = httpRequest.getRequestURI();
        if (GET_METHOD.equalsIgnoreCase(httpRequest.getMethod()) && uri.contains(ResourceHandler.RESOURCE_IDENTIFIER)) {
            httpResponse.setDateHeader("Expires", System.currentTimeMillis() + 2419200000L); // 1 month in future.
            httpResponse.setDateHeader("Last-Modified", System.currentTimeMillis() - 2419200000L); // 1 month in past.
            httpResponse.setHeader("Cache-Control", "public"); // Secure caching
        }
    }
    chain.doFilter(request, response);
}
  • 他:好的。它是一个静态资源,不会改变,因此我们将到期日期设置为未来一个月
  • 最后修改:不确定。我读到,将此设置为过去也会影响缓存
  • 缓存控制:好的。允许安全缓存。安全影响

此设置是否有任何影响?我也读过很多文章,其中缓存应该通过过滤器禁用。我看到的唯一问题是,用户在新版本中可能会遇到问题。样式和脚本可以在新版本中更改,但浏览器会忽略新版本并使用缓存中的文件。

您只需设置
缓存控制。默认情况下,
Expires
Last Modified
已设置(并将覆盖过滤器设置的值)。
Last Modified
必须表示相关资源的上次修改时间戳。您可以通过
servletContext.getResource(path).openConnection().getLastModified()
获得它。但是你不需要在这里设置它。只需让ResourceHandler处理

至于版本控制,只需正确使用资源库即可。您可以在库文件夹中放置一个与regex模式匹配的版本文件夹
\d+(\d+)*
,而
ResourceHandler
将提供最新版本

例如

然后,以下内容将从
1_2
中获取:

<h:outputScript library="libraryname" name="js/file.js" />

<h:outputScript library="libraryname" name="js/file.js" />