カテゴリ: Servlet 更新日: 2025/10/19

JavaのHttpServletRequestWrapperのgetDateHeaderの使い方を完全解説!初心者でもわかるHTTPヘッダーの日付取得方法

HttpServletRequestWrapperのgetDateHeaderメソッド
HttpServletRequestWrapperのgetDateHeaderメソッド

先生と生徒の会話形式で理解しよう

生徒

「JavaのServletで、リクエストヘッダーから日付情報を取得する方法ってあるんですか?」

先生

「はい、HttpServletRequestWrapperクラスのgetDateHeader()メソッドを使えば、HTTPヘッダーに含まれる日付を簡単に取得できますよ。」

生徒

「日付ってどんな形式で返ってくるんですか?」

先生

「UNIX時間(ミリ秒)で返ってくるので、JavaのDateクラスと組み合わせて使うのが一般的ですね。」

1. getDateHeaderメソッドとは

1. getDateHeaderメソッドとは
1. getDateHeaderメソッドとは

getDateHeader()メソッドは、HTTPリクエストのヘッダーから指定された名前のヘッダー値を日時として取得するためのメソッドです。

このメソッドは、指定されたヘッダーの値をlong型のエポックミリ秒として返します。取得した値はjava.util.Dateに変換して使うことが一般的です。

もしヘッダーが存在しない場合は-1が返され、フォーマットが無効な場合はIllegalArgumentExceptionがスローされます。

2. getDateHeaderの使い方

2. getDateHeaderの使い方
2. getDateHeaderの使い方

以下のコードは、"If-Modified-Since"というリクエストヘッダーから日時情報を取得して表示する例です。


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Date;

public class DateHeaderWrapper extends HttpServletRequestWrapper {
    public DateHeaderWrapper(HttpServletRequest request) {
        super(request);
    }

    public void printDateHeader() {
        long dateMillis = getDateHeader("If-Modified-Since");
        if (dateMillis != -1) {
            Date date = new Date(dateMillis);
            System.out.println("If-Modified-Since: " + date);
        } else {
            System.out.println("ヘッダーが存在しません。");
        }
    }
}

このように、取得したUNIX時間をDateに変換して扱います。

3. よく使われる日付系HTTPヘッダー

3. よく使われる日付系HTTPヘッダー
3. よく使われる日付系HTTPヘッダー

getDateHeader()を使って取得される代表的なHTTPヘッダーには以下のようなものがあります。

  • If-Modified-Since:キャッシュが有効かどうかを判断するための日時
  • If-Unmodified-Since:変更がない場合にのみ処理を行う
  • Date:リクエストの作成日時(通常はレスポンス用)

特にキャッシュ制御や条件付きリクエストにおいて、日付情報は重要な役割を果たします。

4. getDateHeaderを使う上での注意点

4. getDateHeaderを使う上での注意点
4. getDateHeaderを使う上での注意点

getDateHeader()で取得できる日時は、HTTPヘッダー内で定義された形式に従っていないと例外が発生します。RFC 1123形式である必要があるため、必ず信頼できるリクエストのみを処理するようにしましょう。

また、存在しない場合に-1が返されるため、必ず条件分岐でのチェックが必要です。

5. 実用例:条件付きGET処理

5. 実用例:条件付きGET処理
5. 実用例:条件付きGET処理

たとえば、If-Modified-Sinceヘッダーを使って、リソースが変更されていない場合には304 Not Modifiedを返すような処理が可能です。


long ifModifiedSince = request.getDateHeader("If-Modified-Since");
if (ifModifiedSince != -1 && resourceLastModified <= ifModifiedSince) {
    response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
    return;
}

これにより、無駄なデータ転送を避け、パフォーマンスの向上と帯域の節約に繋がります。

関連記事:
カテゴリの一覧へ
新着記事
Javaのラムダ式で戻り値とvoidの使い方を解説!returnの書き方も完全理解
Javaのメソッド参照とコンストラクタ参照の使い方を完全ガイド!初心者向けに::とClass::newを解説
Javaのラムダ式の書き方を徹底解説!アロー演算子->の基本と使い方
Thymeleafのth:eachの使い方!ループ回数やindexなどの繰り返し処理を学ぼう
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring Boot JPA入門:エンティティ/リポジトリの基本と作り方
No.3
Java&Spring記事人気No3
Javaの@Validアノテーションを徹底解説!初心者でもわかる入力値検証の基本
No.4
Java&Spring記事人気No4
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス