カテゴリ: Jakarta EE 更新日: 2025/12/09

Jakarta EE JSPでファイルアップロードをわかりやすく解説!初心者向けガイド

Jakarta EE JSPでファイルアップロードを行う方法
Jakarta EE JSPでファイルアップロードを行う方法

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

生徒

「Jakarta EEのJSPでファイルアップロードはできますか?例えば画像やPDFをアップロードして、サーバーに保存したいです。」

先生

「JSPとServletを組み合わせれば、画像やテキストファイル、PDFなど色々なファイルをアップロードできます。初心者でもできるように手順をゆっくり説明します。」

生徒

「JSPのフォームタグで送信するだけでは駄目なんですか?」

先生

「普通のフォームではファイルを送れません。ファイルアップロード専用の設定が必要です。Jakarta EEではServlet側でファイルを受け取り、JSPはフォーム画面を作る役割になります。」

生徒

「なるほど。実際にどう作ればいいか知りたいです!」

先生

「では、JSPでアップロードフォームを作り、Servletでファイルを保存するところまで解説します。」

1. JSPでファイルアップロードができる仕組み

1. JSPでファイルアップロードができる仕組み
1. JSPでファイルアップロードができる仕組み

Jakarta EEのJSPでファイルアップロードを行う場合、多くの初心者が「フォームで投稿するだけ」と考えます。しかし、ファイルアップロードには特別な設定が必要です。通常のテキストデータとは違い、画像やPDFを送信するにはenctype="multipart/form-data"を指定します。これがないと、サーバーはファイルを受け取れません。

さらに、JSPだけで完結するのではなく、サーバー側のServletで処理します。JSPは画面、Servletは処理、という役割分担が基本になります。ファイルアップロードは初心者がつまずきやすいテーマですが、仕組みさえ理解すれば難しくありません。Jakarta EEのServletはファイルを受信して保存できる機能を持っており、後からDBや別のアプリに連携することもできます。

2. JSPでアップロードフォームを作成する

2. JSPでアップロードフォームを作成する
2. JSPでアップロードフォームを作成する

まずはJSPでファイルを送信するフォームを作ります。ここでは画像をアップロードする例を紹介します。Bootstrapのclassを使えば、見た目も整ったアップロードフォームになります。重要なのはmethod="post"enctype="multipart/form-data"の2つです。この二つがないとファイルは送られません。


<form class="p-3" action="upload" method="post" enctype="multipart/form-data">
    <div class="mb-3">
        <label class="form-label">アップロードファイルを選択</label>
        <input type="file" class="form-control" name="uploadFile">
    </div>
    <button class="btn btn-primary" type="submit">
        <i class="bi bi-cloud-upload-fill"></i> アップロード
    </button>
</form>

このJSPを表示すると画面からファイルを選択し、送信できます。初心者がよく忘れるのがenctypeです。テキスト送信のままだとファイルは壊れたり、そもそも送られてこなかったりします。サーバー側のServletでは、このname="uploadFile"で送られてくるデータを受け取ります。

3. Servletでアップロードファイルを受け取り保存する

3. Servletでアップロードファイルを受け取り保存する
3. Servletでアップロードファイルを受け取り保存する

次に、Jakarta Servletでファイルを処理します。Servletはクライアントからのリクエストを受け取り、ファイル保存処理を行います。初心者が驚くポイントとして、Servletにはファイルサイズ制限や保存先ディレクトリの設定があります。今回は簡単な画像保存処理を紹介します。


package example;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.MultipartConfig;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.Part;

@MultipartConfig(location="/tmp")
public class FileUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        try {
            Part part = request.getPart("uploadFile");
            String fileName = part.getSubmittedFileName();
            InputStream in = part.getInputStream();
            File file = new File("/tmp/" + fileName);
            FileOutputStream out = new FileOutputStream(file);

            byte[] buffer = new byte[1024];
            int len;
            while((len = in.read(buffer)) != -1){
                out.write(buffer, 0, len);
            }
            out.close();
            in.close();

            response.getWriter().println("アップロード完了: " + fileName);
        } catch (Exception e) {
            throw new ServletException(e);
        }
    }
}

このServletでは、@MultipartConfigでファイルアップロードを許可しています。ファイルを受け取って保存する処理は、バイト単位で読み書きするだけです。初心者でも理解しやすい仕組みです。サーバーの保存先は環境に合わせて変更できます。例えば、画像アップロードサービス、プロフィール画像、資料管理など実用的な機能に応用できます。

4. web.xmlにServletを登録して動作させる

4. web.xmlにServletを登録して動作させる
4. web.xmlにServletを登録して動作させる

Jakarta EEのServletは、web.xmlでURLとクラスを紐づけます。たとえばuploadというURLで呼び出したい場合、次のような設定を追加します。これでJSPのフォームから送信されたファイルがServletに渡ります。


<servlet>
    <servlet-name>fileUpload</servlet-name>
    <servlet-class>example.FileUploadServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>fileUpload</servlet-name>
    <url-pattern>/upload</url-pattern>
</servlet-mapping>

これでJSPのフォームで送信したデータがServletに届きます。初心者が混乱しやすいのは、URLとServletクラスの対応付けです。ここで設定を間違えると「404エラー」が表示されてしまいます。フォームのaction="upload"と、web.xmlurl-patternが一致しているかを確認しましょう。

5. 実際に試して動作を確認する

5. 実際に試して動作を確認する
5. 実際に試して動作を確認する

ファイルアップロードを試すときは、画像ファイルやテキストファイルを選んで送信します。保存先のディレクトリにファイルが作成されていれば成功です。エラーメッセージが出る場合は、権限不足やパス設定が原因のことが多いです。特にWindowsやLinuxでは保存先のフォルダ権限に注意が必要です。

Jakarta EEはサーバーサイドでファイル処理ができるため、Webアプリでのプロフィール画像アップロード、資料管理、ログの保存など実践的な開発に応用できます。JSPとServletの役割分担を理解すれば、初心者でも本格的なWebアプリが作れます。

6. 画像を表示するサンプルJSP

6. 画像を表示するサンプルJSP
6. 画像を表示するサンプルJSP

保存した画像をJSPから表示することもできます。サーバーに保存したファイルを読み込み、ブラウザで確認できます。次のサンプルは保存されたファイルをタグで表示する例です。


<img src="/uploaded/sample.png" class="img-thumbnail">

このように、ファイルアップロードはJakarta EEの基本機能の一つであり、多くのWebシステムで利用されています。初心者のうちから理解しておくと、後の開発がとても楽になります。

カテゴリの一覧へ
新着記事
New1
Play Framework
Play Frameworkでフォームデータをコントローラで扱う方法を完全解説|Java初心者向けコントローラ入門
New2
Jakarta EE
Jakarta EE JSPにおけるJSTLとスクリプトレットの違いと使い分けを初心者向けに徹底解説
New3
Play Framework
Play Frameworkでクエリパラメータをコントローラで処理する方法を完全解説|Java初心者向け入門
New4
Play Framework
Play FrameworkとSpring Bootの違いを徹底比較!初心者でもわかるJavaフレームワーク入門
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEのリリースサイクルとバージョンの進化をやさしく解説!
No.2
Java&Spring記事人気No2
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.3
Java&Spring記事人気No3
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.4
Java&Spring記事人気No4
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta EE JSPにおけるJSTL国際化タグ(fmt:message)の使い方を初心者向けに完全解説
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta EE JSPでJSTL SQLタグを使った簡易データベースアクセスをやさしく解説
No.7
Java&Spring記事人気No7
Jakarta EE
Jakarta EE JSPでJSTLを使ったJSONやREST APIレスポンス処理を初心者向けにやさしく解説
No.8
Java&Spring記事人気No8
Play Framework
Play Frameworkでリクエストデータの受け取り方を完全解説|Java初心者向けコントローラ入門