gpt4 book ai didi

java - JBOSS 服务器上的 Web 应用程序缓存 - 未使用缓存

转载 作者:太空宇宙 更新时间:2023-11-04 14:38:57 27 4
gpt4 key购买 nike

大家

我的网络应用程序处理浏览器缓存的方式似乎有问题。我尝试用谷歌搜索一下,但没有找到任何相关内容。

为了处理缓存,我将以下代码放入 web.xml 中:

<filter>
<filter-name>Cache filter</filter-name>
<filter-class>My_personnal_class</filter-class>
</filter>
<filter-mapping>
<filter-name>Cache filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

并使用此类:

public class my_personnal_class implements Filter {

public void destroy() {}

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException,
ServletException {
long time = 5 * 1000; // 5 secondes

if (((HttpServletRequest)req).getRequestURI().indexOf("/a path/") != -1) {
time= 20 * 60 * 1000; // 20 minutes
}
if (((HttpServletRequest)req).getRequestURI().indexOf("/yet another path/") != -1) {
time= 20 * 60 * 1000; // 20 minutes
}
temps = temps + System.currentTimeMillis();
((HttpServletResponse)resp).setDateHeader("Expires", time);

// Now let the request go through other filters and the servlet
chain.doFilter(req, resp);
}

public void init(FilterConfig filterConfig)
throws ServletException {}

这样,我确实将缓存过期日期设置为 20 分钟。 (我可以在我值得信赖的老 Firebug 的网络选项卡中看到它。)

问题是缓存似乎没有被使用。当我重新加载页面时,服务器没有获取缓存中的数据,而是向我发送“304 - 未修改”响应。另外,如果我修改一个资源(比方说一个 HTML 页面),即使尚未达到到期日期,浏览器也会在服务器上获取它(完全! 200 响应,我会显示新版本)。

我知道 304 响应对于带宽来说并不是什么大问题,但仍然..我想知道这种行为是否正常。我做错(或理解)错事了吗?

有关此事的任何信息都会有巨大的帮助。

谢谢。

最佳答案

好吧,我终于明白了,上面的代码工作正常。

当您重新加载页面时,浏览器将尝试与服务器检查每个资源。然后,他将使用 etag 将缓存内容与服务器上的内容进行比较,并发出 304 响应。

因此,永远不应该通过重新加载页面 (f5) 来测试他的 http 缓存设置。只需点击链接或使用书签即可。

一个容易犯的错误。

关于java - JBOSS 服务器上的 Web 应用程序缓存 - 未使用缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25203310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com