カテゴリ: Servlet 更新日: 2025/11/20

JavaのHttpServletRequestWrapperとgetPartsメソッドを徹底解説!初心者でもわかるマルチパートリクエストの処理方法

HttpServletRequestWrapperのgetPartsメソッド
HttpServletRequestWrapperのgetPartsメソッド

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

生徒

「JavaのWebアプリでファイルアップロードを処理したいんですが、どうやってリクエストからファイルを取り出せばいいんですか?」

先生

「その場合は、HttpServletRequestWrappergetPartsメソッドを使うと、フォームから送られた複数のパートデータを簡単に取得できますよ。」

生徒

「複数のファイルやテキストデータが同時に送られても対応できるんですか?」

先生

「その通りです。では、getPartsメソッドの使い方やポイントについて、順番にわかりやすく説明していきましょう。」

1. HttpServletRequestWrapperとは?

1. HttpServletRequestWrapperとは?
1. HttpServletRequestWrapperとは?

javax.servlet.httpパッケージの中にあるHttpServletRequestWrapperクラスは、HttpServletRequestオブジェクトをラップして、機能を拡張したり、一部のメソッドをカスタマイズしたりするために使われるラッパークラスです。

このクラスを使うことで、既存のリクエストに手を加えることなく、独自の処理や認証、パラメータの加工などができるようになります。

2. getPartsメソッドとは?

2. getPartsメソッドとは?
2. getPartsメソッドとは?

getPartsメソッドは、マルチパートリクエスト(フォームからのファイルアップロードなど)を処理するために使用されるメソッドです。これはHttpServletRequestインターフェースに定義されていて、HttpServletRequestWrapperでも使用できます。

このメソッドは、リクエスト内のすべてのパート(ファイルやテキストなど)をPartオブジェクトのコレクションとして返します。


public Collection<Part> getParts() throws IOException, ServletException

このgetPartsメソッドは、アップロードされたファイルやフォームの入力内容を扱うときにとても便利です。

3. getPartsメソッドを使う準備

3. getPartsメソッドを使う準備
3. getPartsメソッドを使う準備

このメソッドを使うには、Servletに@MultipartConfigアノテーションを付けておく必要があります。これは、Servletがマルチパートデータを受け取れるようにする設定です。


import javax.servlet.annotation.MultipartConfig;

@MultipartConfig
public class UploadServlet extends HttpServlet {
    // ここに処理を記述
}

この設定がないと、getPartsを呼び出したときにエラーが発生してしまいます。

4. getPartsメソッドの使い方とサンプル

4. getPartsメソッドの使い方とサンプル
4. getPartsメソッドの使い方とサンプル

ここでは、HttpServletRequestWrapperを使って、アップロードされたファイルとテキスト情報を処理する例を紹介します。


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.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

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

        HttpServletRequestWrapper wrappedRequest = new HttpServletRequestWrapper(request);

        Collection<Part> parts = wrappedRequest.getParts();

        for (Part part : parts) {
            String name = part.getName();
            String filename = part.getSubmittedFileName();
            long size = part.getSize();

            response.getWriter().println("パート名:" + name);
            response.getWriter().println("ファイル名:" + filename);
            response.getWriter().println("サイズ:" + size + "バイト");
        }
    }
}

このコードでは、フォームから送信されたすべてのパートを取得し、それぞれの名前・ファイル名・サイズを出力しています。

5. HTMLフォームの記述例

5. HTMLフォームの記述例
5. HTMLフォームの記述例

getPartsを正しく動作させるためには、HTML側のフォームにも注意が必要です。enctype属性をmultipart/form-dataに設定することを忘れずに行いましょう。


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

このように設定されたフォームから送信されるリクエストは、Java ServletでgetPartsを使って処理することができます。

6. getPartsとgetPartの違い

6. getPartsとgetPartの違い
6. getPartsとgetPartの違い

getPartsはすべてのパートを一括で取得するメソッドですが、getPart(String name)という別のメソッドも存在します。こちらは指定された名前のパートだけを取得したいときに使います。


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

アップロードフォームの特定のファイルだけを取得したい場合は、getPartを使うと便利です。複数パートを処理する場合はgetPartsを使うのが基本です。

7. getPartsを使ったエラーハンドリングのポイント

7. getPartsを使ったエラーハンドリングのポイント
7. getPartsを使ったエラーハンドリングのポイント

getPartsは、ファイルのサイズ制限を超えたり、正しくない形式で送信された場合に例外をスローすることがあります。安全なWebアプリケーションを作るためには、IOExceptionServletExceptionへの対応をしっかり書くことが大切です。


try {
    Collection<Part> parts = request.getParts();
    // 処理を続行
} catch (IOException | ServletException e) {
    e.printStackTrace();
    response.getWriter().println("ファイルの取得に失敗しました。");
}

このようなエラーハンドリングを実装することで、想定外の状況でもアプリケーションが安定して動作します。

カテゴリの一覧へ
新着記事
Springの@Transactional徹底解説!トランザクションの伝播・分離レベル・タイムアウトの基本
JavaのHashMapクラスgetメソッドの使い方を完全ガイド!初心者でもわかるjava.util入門
Thymeleafのth:fragmentを使ったテンプレートの再利用方法を完全ガイド!初心者でもわかる使い方
Javaの@PathVariableアノテーションの使い方を徹底解説!初心者でもわかるパスパラメータの基本と応用
人気記事
No.1
Java&Spring記事人気No1
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.2
Java&Spring記事人気No2
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.3
Java&Spring記事人気No3
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.4
Java&Spring記事人気No4
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.5
Java&Spring記事人気No5
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本