カテゴリ: Servlet 更新日: 2025/08/24

JavaのPartクラスgetHeadersメソッドを徹底解説!初心者でもわかる複数ヘッダーの取得方法

PartのgetHeadersメソッド
PartのgetHeadersメソッド

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

生徒

「Java Servletでファイルをアップロードするとき、ヘッダーが複数ある場合はどうやって全部取得するんですか?」

先生

「そういうときには、javax.servlet.http.PartインターフェースのgetHeadersメソッドを使うと、同じ名前の複数のヘッダーをまとめて取得できますよ。」

生徒

「なるほど!でも、getHeaderじゃだめなんですか?」

先生

getHeaderは最初の一つしか取れません。複数の値があるときにはgetHeadersを使う必要があるんです。実際の使い方を見てみましょう。」

1. Partインターフェースとは

1. Partインターフェースとは
1. Partインターフェースとは

Javaのjavax.servlet.http.Partインターフェースは、Servletでファイルアップロードを行う際に使用されるインターフェースです。Servlet 3.0以降で使用可能で、マルチパートリクエストを処理するために使われます。アップロードされたファイルやデータに対して、名前、サイズ、コンテンツタイプ、そしてヘッダー情報などを取得できます。

2. getHeadersメソッドの基本

2. getHeadersメソッドの基本
2. getHeadersメソッドの基本

getHeaders(String name)メソッドは、指定したヘッダー名に対応するすべてのヘッダー値を取得するために使います。戻り値はjava.util.Collection<String>型で、複数の値をまとめて扱うことができます。

たとえば、同じ名前のヘッダーが複数含まれている場合、すべての値をループで確認できます。

3. getHeadersの基本的な使い方

3. getHeadersの基本的な使い方
3. getHeadersの基本的な使い方

以下は、アップロードされたファイルのcontent-dispositionヘッダーに含まれるすべての値を表示するサンプルです。


import java.io.IOException;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@MultipartConfig
public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        Part part = request.getPart("file");
        Collection<String> headers = part.getHeaders("content-disposition");

        response.setContentType("text/plain");
        for (String header : headers) {
            response.getWriter().println("ヘッダー: " + header);
        }
    }
}

4. getHeaderとの違いを理解しよう

4. getHeaderとの違いを理解しよう
4. getHeaderとの違いを理解しよう

getHeaderメソッドは指定された名前の最初のヘッダーしか返しません。それに対してgetHeadersはすべての同名ヘッダーを取得します。

たとえば、次のように複数のSet-Cookieヘッダーがある場合、getHeaderでは一つしか取れませんが、getHeadersを使えば全部取得できます。

5. 実際のヘッダー一覧を出力してみる

5. 実際のヘッダー一覧を出力してみる
5. 実際のヘッダー一覧を出力してみる

getHeaderNames()と組み合わせることで、利用可能なすべてのヘッダー名と値を確認することもできます。以下のように実装します。


Collection<String> headerNames = part.getHeaderNames();
for (String name : headerNames) {
    Collection<String> values = part.getHeaders(name);
    for (String value : values) {
        System.out.println(name + ": " + value);
    }
}

6. アップロードされたファイルの情報を抽出する

6. アップロードされたファイルの情報を抽出する
6. アップロードされたファイルの情報を抽出する

content-dispositionヘッダーの中には、アップロードされたファイル名やフォームフィールド名が含まれています。以下のようにしてファイル名を取得できます。


String header = part.getHeader("content-disposition");
for (String cd : header.split(";")) {
    if (cd.trim().startsWith("filename")) {
        String fileName = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
        System.out.println("ファイル名: " + fileName);
    }
}

7. HTMLフォームの設定も忘れずに

7. HTMLフォームの設定も忘れずに
7. HTMLフォームの設定も忘れずに

Partを使うServletでは、HTML側のフォームにenctype="multipart/form-data"を指定する必要があります。これがないとgetPartでファイルを取得できません。


<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">アップロード</button>
</form>

8. Servletでのアップロード処理の流れを復習

8. Servletでのアップロード処理の流れを復習
8. Servletでのアップロード処理の流れを復習

Servletでファイルアップロードを行う基本の流れは次の通りです。

  • @MultipartConfigをクラスに付与
  • request.getPart()Partを取得
  • getHeaderまたはgetHeadersでヘッダー情報を取得
  • getInputStream()write()でファイルを保存

この流れをしっかり理解しておけば、複雑なファイルアップロード処理も自由自在に扱えるようになります。

サーブレットやJSPの基礎を体系的に理解したい人には、 定番の入門書がこちらです。

スッキリわかるサーブレット&JSP入門をAmazonで見る

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Java
Javaのラムダ式で注意したい変数キャプチャの落とし穴とは?代入と変数名のベストプラクティス解説
更新記事
New2
Spring
Springの@GetMappingアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.4
Java&Spring記事人気No4
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.5
Java&Spring記事人気No5
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.6
Java&Spring記事人気No6
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説