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,则为重新加载事件。如果没有,则为第一次访问。这对 doGet
和 doPost
都适用。
不利的是,大多数浏览器似乎对每个域可以设置的 cookie 数量有最大限制。对于 Chrome,限制似乎是每个域 180 个 cookie,每个 cookie 4096 字节。
我需要检测 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,则为重新加载事件。如果没有,则为第一次访问。这对 doGet
和 doPost
都适用。
不利的是,大多数浏览器似乎对每个域可以设置的 cookie 数量有最大限制。对于 Chrome,限制似乎是每个域 180 个 cookie,每个 cookie 4096 字节。