カテゴリ: Servlet 更新日: 2026/04/09

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

PartのgetHeaderメソッド
PartのgetHeaderメソッド

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

生徒

「JavaのServletでファイルをアップロードする処理を書いてるんですけど、ヘッダーの情報ってどうやって取るんですか?」

先生

「それなら、javax.servlet.http.PartインターフェースのgetHeaderメソッドを使うことで、アップロードされたファイルに付随するヘッダー情報を取得できますよ。」

生徒

「へぇ、Partって何ですか?getHeaderってどんなときに使うんですか?」

先生

「じゃあ、これからJava ServletのPartインターフェースと、getHeaderメソッドの使い方について順番に見ていきましょう!」

1. Java Servletとは?

「1. Java Servletとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. Java Servletとは?
1. Java Servletとは?

JavaのServlet(サーブレット)は、Webアプリケーションを作成するための技術です。javax.servletパッケージに含まれていて、HTTPリクエストを受け取り、レスポンスを返す仕組みを提供します。フォームの送信やファイルアップロードなどの処理にも使われています。

2. javax.servlet.http.Partインターフェースとは?

2. javax.servlet.http.Partインターフェースとは?
2. javax.servlet.http.Partインターフェースとは?

javax.servlet.http.Partインターフェースは、Servlet 3.0から追加された機能で、マルチパートリクエスト(ファイルアップロードなど)を処理するために使います。

ユーザーがフォームでファイルを送信したとき、そのファイルはPartとしてServletに渡されます。

Partには、ファイルの名前やサイズ、MIMEタイプ、ヘッダーなどの情報が含まれています。

3. getHeaderメソッドの役割

3. getHeaderメソッドの役割
3. getHeaderメソッドの役割

PartインターフェースのgetHeader(String name)メソッドは、指定した名前のヘッダー情報を取得するために使います。

たとえば、ファイル名を取得したいときには、content-dispositionヘッダーを読み取ることで可能になります。

このメソッドを使うことで、アップロードされたファイルの情報を細かく確認できます。

4. getHeaderメソッドの使い方

「4. getHeaderメソッドの使い方」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. getHeaderメソッドの使い方
4. getHeaderメソッドの使い方

Java Servletでマルチパートデータを扱う場合、@MultipartConfigアノテーションを使ってServletを設定し、request.getPart()メソッドでPartオブジェクトを取得します。その後getHeaderを使ってヘッダー情報を読み取ります。


import java.io.IOException;
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 filePart = request.getPart("file");
        String header = filePart.getHeader("content-disposition");

        response.setContentType("text/plain");
        response.getWriter().println("ヘッダー情報: " + header);
    }
}

5. ヘッダーからファイル名を取り出すには?

5. ヘッダーからファイル名を取り出すには?
5. ヘッダーからファイル名を取り出すには?

getHeaderで取得したcontent-dispositionには、ファイル名などが含まれています。ファイル名を取り出すには、ヘッダーの文字列を解析する必要があります。


String header = filePart.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);
    }
}

6. よく使われるヘッダーの種類

6. よく使われるヘッダーの種類
6. よく使われるヘッダーの種類

Partオブジェクトから取得できる代表的なヘッダーは以下のとおりです。

  • content-disposition:ファイル名やフォームフィールド名の情報
  • content-type:アップロードされたファイルのMIMEタイプ
  • content-length:ファイルサイズ

7. getHeadersgetHeaderNamesとの違い

「7. getHeadersやgetHeaderNamesとの違い」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

7. getHeadersやgetHeaderNamesとの違い
7. getHeadersgetHeaderNamesとの違い

getHeaderは1つのヘッダー値を返しますが、同じ名前のヘッダーが複数ある場合は、getHeaders(String name)で全ての値を取得することができます。また、getHeaderNames()を使えば利用可能な全ヘッダーの名前一覧が取得できます。


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

8. Servletのファイルアップロードに必要な設定

8. Servletのファイルアップロードに必要な設定
8. Servletのファイルアップロードに必要な設定

ServletでPartを使うためには、以下の設定が必要です。

  • @MultipartConfigアノテーションをServletクラスに付けること
  • HTMLフォームにenctype="multipart/form-data"を指定すること

HTMLフォームの例は次のようになります。


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

まとめ

まとめ
まとめ

本記事では、Java Servletにおけるファイルアップロード処理の中でも重要な役割を持つPartインターフェースと、その中核となるgetHeaderメソッドについて詳しく解説しました。特に、multipart形式で送信されたデータをどのように受け取り、どのようにヘッダー情報を取得するのかという点は、実務でも頻繁に登場する重要な知識です。

getHeaderメソッドは、アップロードされたファイルに付随する情報を取得するための非常に便利な機能です。content dispositionやcontent typeなどのヘッダー情報を取得することで、ファイル名の抽出やファイル形式の判定などが可能になります。これにより、単なるファイル受信処理にとどまらず、より高度なバリデーションやセキュリティ対策にも応用できます。

また、getHeadersやgetHeaderNamesといった関連メソッドを併用することで、すべてのヘッダー情報を網羅的に取得できる点も重要です。複数のヘッダーが存在するケースや、どのようなヘッダーが含まれているかを確認したい場合には、これらのメソッドが非常に役立ちます。

Java Servletでファイルアップロードを扱う際には、MultipartConfigアノテーションの設定や、HTMLフォームでのenctype指定といった基本的な設定も欠かせません。これらが正しく設定されていない場合、Partオブジェクト自体が取得できないため、トラブルの原因となります。開発時には必ず確認するようにしましょう。

実際の開発現場では、ファイルアップロード機能はユーザー登録画面やプロフィール編集、管理画面などさまざまな場面で利用されます。そのため、getHeaderを使ったヘッダー情報の取得方法を理解しておくことは、JavaによるWebアプリケーション開発において非常に重要なスキルとなります。

以下に、今回のポイントを整理したサンプルコードを掲載します。基本的な流れを復習しながら、実際に手を動かして理解を深めてみてください。


import java.io.IOException;
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 SummaryUploadServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        Part filePart = request.getPart("file");

        String disposition = filePart.getHeader("content-disposition");
        String contentType = filePart.getHeader("content-type");

        String fileName = "";

        for (String cd : disposition.split(";")) {
            if (cd.trim().startsWith("filename")) {
                fileName = cd.substring(cd.indexOf('=') + 1)
                              .trim()
                              .replace("\"", "");
            }
        }

        response.setContentType("text/plain;charset=UTF-8");
        response.getWriter().println("ファイル名: " + fileName);
        response.getWriter().println("ヘッダー情報: " + disposition);
        response.getWriter().println("コンテンツタイプ: " + contentType);
    }
}

ファイル名: sample.txt
ヘッダー情報: form-data; name="file"; filename="sample.txt"
コンテンツタイプ: text/plain

このように、getHeaderメソッドを活用することで、アップロードされたファイルの詳細な情報を柔軟に扱うことができます。今後は、ファイルサイズ制限や拡張子チェックなども組み合わせて、より安全で実用的な機能を実装していくとよいでしょう。

先生と生徒の振り返り会話

生徒

今回の内容で、ファイルアップロード時にヘッダー情報が取得できることがよく分かりました。特にファイル名を取り出す処理が実務で役立ちそうだと感じました。

先生

その通りです。getHeaderは単純なメソッドですが、使いこなせば多くの情報を扱える重要なポイントです。特にcontent dispositionの解析はよく使うので覚えておきましょう。

生徒

getHeadersやgetHeaderNamesも使えば、さらに詳しい情報が取れるんですよね。デバッグのときにも便利そうです。

先生

そうですね。開発中にどんなヘッダーが来ているか確認したいときには非常に役立ちます。また、セキュリティ対策にもつながるので意識して使っていきましょう。

生徒

Servletでのファイルアップロード処理の流れも理解できたので、今度は実際に画面と連携したアプリを作ってみたいです。

先生

とても良いですね。実際に手を動かしてみることで理解が深まります。今回学んだgetHeaderの知識を活かして、より実践的な開発に挑戦してみてください。

カテゴリの一覧へ
新着記事
New1
Thymeleaf
Thymeleafのth:replaceの使い方を徹底解説!テンプレート置き換えの基本やth:includeとの違いを解説
更新記事
New2
Java
Javaのメソッド参照とコンストラクタ参照の使い方を完全ガイド!初心者向けに::とClass::newを解説
更新記事
New3
Spring
Springの@GetMappingアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
更新記事
New4
Spring
Spring の@RequestParamの使い方!テキストボックス、ラジオボタン、チェックボックス、セレクトボックスの値を受け取る。
更新記事
人気記事
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のScannerクラスとIOExceptionの使い方を完全解説!初心者でもわかる例外処理と入力処理の基本
No.3
Java&Spring記事人気No3
Java
Javaのswitch文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.4
Java&Spring記事人気No4
Spring
Thymeleaf(タイムリーフ)入門!初心者でもわかるSpring Bootとテンプレートエンジンの使い方
No.5
Java&Spring記事人気No5
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.6
Java&Spring記事人気No6
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.7
Java&Spring記事人気No7
Java
JavaのStringクラスとequalsメソッドの使い方を完全ガイド!初心者でもわかる文字列比較の基本
No.8
Java&Spring記事人気No8
Java
Java開発環境「Eclipse(Pleiades)」のインストール方法とメリットを初心者向けに解説