web-dev-qa-db-ja.com

JSPにExpiresまたはCache-Controlヘッダーを追加する

JSPにExpiresまたはCache-Controlヘッダーを追加するにはどうすればよいですか?私は、画像、CSSおよびJavaScriptファイルとしての私の静的なコンポーネントのためのページを含めるには、遠未来の有効期限を追加したいです。

29
Sam

JSPページのブラウザキャッシュを無効にするには、Filterを作成します。これは_url-pattern_の_*.jsp_にマップされ、基本的にdoFilter()メソッドで以下を実行します。

_HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResponse.setDateHeader("Expires", 0); // Proxies.
_

この方法では、これをすべてのJSPページにコピーアンドペーストして、scriptletsで混乱させる必要はありません。

CSSやJSなどの静的コンポーネントのブラウザーキャッシュを有効にするには、それらをすべて_/static_や_/resources_などの共通フォルダーに入れ、_url-pattern_にマップされるFilterを作成します_/static/*_または_/resources/*_であり、基本的にdoFilter()メソッドで以下を実行します。

_httpResponse.setDateHeader("Expires", System.currentTimeMillis() + 604800000L); // 1 week in future.
_

以下も参照してください:

71
BalusC
<%
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
%>
10
Darin Dimitrov
<%
    response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
    response.setHeader("Pragma", "no-cache"); //HTTP 1.0
    response.setDateHeader("Expires", 0); //prevents caching at the proxy server
%>
2
User1985

Tomcatのようなサーブレットコンテナには、事前定義されたフィルタのセットが付属しています。たとえば、 Expires Filter を参照してください。独自の同様のフィルターを作成するよりも、既存のものを使用する方が簡単な場合があります。

1
mp31415