servlet 中的请求对象是否有任何方法可以识别网页的页面重新加载事件

Is there any method for request object in servlets that can identify page reload event for the webpage

我需要检测 servlet 上的页面重新加载事件。我想知道请求对象中是否有任何方法可以帮助我这样做,或者是否没有……有没有其他方法可以做到这一点?

当您在浏览器中点击 "Reload" 按钮时,它会特别忽略 cache-control 指令并请求一个新的副本。因此,您可以检查请求 headers 并查找缺失的 If-Modified-Since header:

public void doGet( final HttpServletRequest request, final HttpServletResponse response ) throws ServletException, IOException 
{
    if ( isReloaded(request) ) handleReload( request, response );
    else handleNormal( request, response );
}

boolean isReloaded( final HttpServletRequest request )
{
    return request.getParameter("If-Modified-Since") == null;
}

/**
 * You may need to modify this function or you may not need it at all.
 * Let me know and I'll edit the solution.
 */
protected long getLastModified( final HttpServletRequest request )
{
    return new Date().getTime();
}

如果您使用 Apache mod_proxy 等代理, 您可能还需要在 Apache 文件中设置 ExpiresActive off

此外,如果不使用 cookie,则无法区分 首次 访问页面的时间和 "Reload" 按钮。

缓存控制指令在 doPost 上不起作用,所以同样的技巧对 doPost 不起作用。

如果您的小型服务器的 URL 数量有限,您可以考虑为每个 URL 设置一个 cookie。如果存在 cookie,则为重新加载事件。如果没有,则为第一次访问。这对 doGetdoPost 都适用。

不利的是,大多数浏览器似乎对每个域可以设置的 cookie 数量有最大限制。对于 Chrome,限制似乎是每个域 180 个 cookie,每个 cookie 4096 字节。