サーブレットでページの再読み込みイベントを検出する必要があります。リクエストオブジェクトにそうするのに役立つメソッドがあるかどうか、またはないかどうか疑問に思っていました....同じことを行う他の方法はありますか?
ブラウザの[再読み込み]ボタンをタップすると、特にキャッシュ制御ディレクティブが無視され、新しいコピーが要求されます。したがって、リクエストヘッダーを調べて、存在しないヘッダーを探すことができますIf-Modified-Since
。
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などのプロキシの背後にいる場合ExpiresActive off
は、Apacheファイルで設定する必要がある場合もあります。
また、Cookieを使用せずに、誰かが初めてページにアクセスしたときと[再読み込み]ボタンを区別する方法はありません。
キャッシュ制御ディレクティブはdoPostで機能しないため、同じトリックはdoPostでは機能しません。
URLの数が限られている小さなサーバーがある場合は、すべてのURLにCookieを設定することを検討できます。Cookieが存在する場合、それはリロードイベントです。不在の場合は、初めての訪問です。それはとの両方doGet
で機能しdoPost
ます。
マイナス面は、ほとんどのブラウザで、ドメインごとに設定できるCookieの数に上限があるように思われることです。Chromeの場合、制限はドメインあたり180 Cookie、Cookieあたり4096バイトのようです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加