カテゴリ: Jakarta EE 更新日: 2026/04/12

Jakarta サーブレットのdoGetとdoPostの違いと使い分けを徹底解説!初心者でもわかるHTTPリクエスト処理

Jakarta サーブレットのdoGet/doPostメソッドの違いと使い分け
Jakarta サーブレットのdoGet/doPostメソッドの違いと使い分け

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

生徒

「先生、Jakarta サーブレットでよく出てくるdoGetメソッドとdoPostメソッドって何が違うんですか?」

先生

「良い質問だね。サーブレットはWebブラウザから送られてくるHTTPリクエストを処理する仕組みを持っているんだけど、その中でもGETリクエストとPOSTリクエストを処理するのがdoGetdoPostなんだ。」

生徒

「どっちを使っても同じように動くように見えるんですけど、どうやって使い分けるんですか?」

先生

「確かに初心者には似て見えるけれど、目的や使いどころが違うんだ。では、順番に整理して説明していこう。」

1. doGetメソッドとは?

1. doGetメソッドとは?
1. doGetメソッドとは?

Jakarta サーブレットのdoGetメソッドは、HTTPのGETリクエストを処理するためのメソッドです。ブラウザでURLを直接入力したり、リンクをクリックしたとき、またフォームでmethod="get"を指定した場合に呼び出されます。送信されるデータはURLの末尾に「?key=value」の形で付与されるため、ユーザーが入力内容をそのまま確認できるという特徴があります。

そのため、doGetは「検索」「絞り込み」「ページ番号を指定した一覧表示」など、主に“情報を取得する処理”に向いています。データ量が少ないことが前提ですが、ブラウザから直接確認できるためデバッグしやすく、初心者でも挙動を理解しやすいメソッドです。

身近な例として、検索エンジンのURLに「?q=Java」と表示されている場合、それはGETリクエストが使われている証拠です。サーブレットでは、このパラメータをdoGetの中で簡単に取り出せます。

doGetで検索キーワードを取得するシンプルなJavaコード例


// ブラウザで /search?keyword=Java とアクセスすると動作するサーブレット

import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/search")
public class SearchServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // URLのクエリ文字列 ?keyword=○○ を取得
        String keyword = request.getParameter("keyword");

        response.setContentType("text/plain; charset=UTF-8");

        if (keyword == null || keyword.isEmpty()) {
            response.getWriter().println("キーワードが指定されていません。");
        } else {
            response.getWriter().println("検索キーワードは: " + keyword);
        }
    }
}

この例のように、doGetならURLに入力したパラメータをそのまま取得でき、ブラウザを使って「どんな値が送られているか」を確認することも簡単です。まずはデータ取得の仕組みを理解する第一歩として、doGetを使った処理から学ぶのがおすすめです。

2. doPostメソッドとは?

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

doPostメソッドは、HTTPのPOSTリクエストを処理するためのメソッドです。主に「フォームから送信されたデータをサーバー側で受け取りたいとき」に使われます。ユーザー登録やログイン、問い合わせフォーム、カートへの追加処理など、データをサーバー側に渡して何かしらの処理を行う場面では、基本的にdoPostを使うと考えておくと分かりやすいです。

GETとの大きな違いは、送信するデータがURLではなく、HTTPリクエストのボディ部分に含まれることです。そのため、パスワードやメールアドレスなどの機密情報がURLに丸見えにならず、ブラウザのアドレスバーにも履歴にも残りにくいというメリットがあります。また、ボディにデータを載せるため、GETよりも比較的大きなサイズのデータを扱いやすいのも特徴です。

例えば、ユーザー登録画面で名前やパスワードを入力して送信するときは、フォーム側でmethod="post"を指定し、サーブレット側のdoPostでそのデータを受け取ります。イメージとしては「画面で入力された内容を、封筒に入れてサーバーに渡す」ような感覚です。

doPostでフォーム送信データを受け取るシンプルなJavaコード例


// /register に対して POST で送信されたユーザー名とパスワードを受け取る例

import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/register")
public class RegisterServlet extends HttpServlet {

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

        // 日本語入力にも対応できるように文字コードを指定
        request.setCharacterEncoding("UTF-8");

        // フォームの name 属性で送られてきた値を取得
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        response.setContentType("text/plain; charset=UTF-8");

        if (username == null || username.isEmpty()
                || password == null || password.isEmpty()) {
            response.getWriter().println("ユーザー名またはパスワードが未入力です。");
        } else {
            // 実際のアプリではここでDB登録やチェック処理などを行う
            response.getWriter().println("ユーザー「" + username + "」の登録リクエストを受け取りました。");
        }
    }
}

このように、doPostはフォームから送信されたデータを安全に受け取って処理する役割を持っています。URLに値を見せたくないとき、大事な情報を扱うとき、また登録や更新など「データを書き換える処理」を行うときは、doPostを使うのが基本パターンだと覚えておくとよいでしょう。

3. doGetとdoPostの主な違い

3. doGetとdoPostの主な違い
3. doGetとdoPostの主な違い

初心者が特に混乱しやすいポイントとして、doGetdoPostは「似ているようで目的がまったく異なる」メソッドです。まず押さえておきたいのは、どちらもブラウザから送られてくるHTTPリクエストを処理するものですが、送られるデータの扱い方・安全性・向いている用途が明確に違うことです。

  • データの送信方法:doGetはURLにパラメータを付与して送信、doPostはリクエストボディにデータを格納して送信する
  • データが見えるかどうか:doGetはURLにそのまま表示されるため確認しやすいが、機密情報には向かない。doPostはURLに表示されず安全性が高い
  • データ量の違い:doGetはURLの長さ制限があるため大量データに不向き、doPostは比較的大きなデータも扱える
  • 用途の違い:doGetは検索や一覧表示など「データ取得」、doPostは登録・更新など「データ送信や変更処理」に適している

これらを理解すると、なぜ場面によってメソッドを使い分ける必要があるのかが自然と見えてきます。特にWebアプリケーションでは、ユーザーが操作する場面によって適切なメソッドを選ぶことで、安全性・性能・使いやすさをバランスよく保つことができます。

違いが直感的にわかるシンプルな比較コード例


@WebServlet("/compare")
public class CompareServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        // URLに ?name=Taro のようにパラメータを付けて送る
        String name = req.getParameter("name");
        resp.getWriter().println("[GET] 受け取った名前: " + name);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        // フォームから送られたデータをボディから受け取る
        req.setCharacterEncoding("UTF-8");
        String name = req.getParameter("name");
        resp.getWriter().println("[POST] 受け取った名前: " + name);
    }
}

同じ“name”というデータでも、GETではURLに見える形で送られ、POSTでは見えない形で送られます。こうした違いを体験しながら学んでいくことで、実際の開発でも迷わず適切なメソッドを選べるようになります。

4. サンプルコードで理解する

4. サンプルコードで理解する
4. サンプルコードで理解する

それでは、実際にJakarta サーブレットでdoGetdoPostを定義したシンプルな例を見てみましょう。


import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/example")
public class ExampleServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.getWriter().println("これはGETリクエストです");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.getWriter().println("これはPOSTリクエストです");
    }
}

5. 実行結果のイメージ

5. 実行結果のイメージ
5. 実行結果のイメージ

例えば、ブラウザでhttp://localhost:8080/exampleにアクセスするとdoGetが呼ばれて次のように表示されます。


これはGETリクエストです

一方、フォームからPOSTでアクセスするとdoPostが呼ばれ、次のように表示されます。


これはPOSTリクエストです

6. 使い分けのポイント

6. 使い分けのポイント
6. 使い分けのポイント

Webアプリケーションを作る上での実践的なポイントは次の通りです。

  • 検索や一覧表示などの「情報取得」処理にはdoGetを使う
  • ユーザー登録やログイン、フォーム送信など「データ送信・更新」にはdoPostを使う
  • REST API設計においても、GETはリソース取得、POSTは新規作成に対応するため直感的に理解できる

このように、Jakarta サーブレットでdoGetdoPostを適切に使い分けることで、セキュリティとパフォーマンスを両立したWebアプリケーションを構築することができます。

まとめ

まとめ
まとめ

Jakarta サーブレットで理解すべきHTTPリクエスト処理の全体像

Jakarta サーブレットにおけるdoGetメソッドとdoPostメソッドは、HTTPリクエストを扱う上で最も重要な基本要素です。どちらもサーブレットが動作する上で欠かせない機能であり、Webアプリケーションの構造やリクエスト処理の流れを理解するために必須の概念と言えます。とくに、Webブラウザの操作によってどのようにリクエストが送られ、サーブレットがどのメソッドを使って処理するのかを正しく理解することで、初心者でもより現実的なWebアプリ開発ができるようになります。 doGetメソッドは、ユーザーがURLを入力したり、リンクをクリックしたり、検索フォームを送信したりする際に使われるごく一般的なリクエスト処理です。情報の取得や画面表示に向いており、URLにクエリパラメータが付くため、検索ワードやページ番号などの小さなデータを扱う場面に最適です。Webの基本はGETで成り立っているため、まずはdoGetの仕組みを深く理解することが、Jakarta サーブレットの基礎を固める第一歩と言えるでしょう。 一方で、doPostメソッドは、フォーム送信やログイン処理、ユーザー登録、問い合わせなど、ユーザーが実際に何かを送信する操作に使われます。POSTはデータがリクエストボディに含まれるためURLに表示されず、機密情報を扱う際にも安全性が高いという特徴があります。実際の業務システムではPOSTが頻繁に使われるため、doPostを正しく理解することは信頼性の高いWebアプリケーションの構築に直結します。 また、GETとPOSTの違いを明確につかむことは、REST APIやHTTP通信全般の理解にもつながります。RESTではGETが「取得」、POSTが「作成」という役割を持つため、Jakarta サーブレットでの学習がそのままAPI開発にも応用できるのが大きな強みです。初心者のうちからこの違いを整理しておくことで、後の学習が非常にスムーズになります。 実践的な観点では、画面表示系はGET、送信系はPOSTというように役割を分けて使うことが基本です。情報の公開性・安全性・データ量・用途といった観点から、どちらを採用すべきかを判断できるようになると、Web開発の作業全体がぐっと理解しやすくなります。とくにセキュリティ面では、パラメータがURLに残るかどうかが大きな差であり、パスワードや個人情報を扱う際は必ずPOSTを用いるという重要なルールがあります。 さらに、Jakarta サーブレットのコード例を見ながら、実際にWebブラウザからアクセスしたときにどのメソッドが呼ばれるかを確かめることで、より具体的に動作の理解が深まります。開発環境でURLアクセスやフォーム送信を試しながら、サーブレットがどのようにレスポンスを返すのか、どんな仕組みで処理が進むのかを体感しておくと、Webアプリケーション全体の構造がスムーズに見えてきます。 こうした基礎を丁寧に積み重ねることで、今後より大規模なシステムや複雑なリクエスト処理を行う場面でも迷わず対応できる力が身につきます。Jakarta サーブレットはWeb開発の根幹を支える技術であり、GETとPOSTの仕組みを正しく理解することは、信頼性の高いアプリケーションを作るための必須スキルです。

doGet/doPostの理解を深める追加サンプル

実行の流れをより具体的に理解するため、簡単なパラメータ受け取りの例を示します。


@WebServlet("/params")
public class ParamServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String keyword = request.getParameter("keyword");
        response.setContentType("text/plain; charset=UTF-8");
        response.getWriter().println("GETで受け取ったキーワード:" + keyword);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String message = request.getParameter("message");
        response.setContentType("text/plain; charset=UTF-8");
        response.getWriter().println("POSTで受け取ったメッセージ:" + message);
    }
}

このように、GETではURLにパラメータが表示され、POSTではボディに含まれるため表示されません。実際にブラウザやフォームを使って試してみることで、違いを自然に理解できるようになります。

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

生徒「GETとPOSTの違いがようやくはっきりしてきました。URLに見えるかどうかも大事なんですね。」

先生「そうですね。URLに表示されるということは履歴にも残るので、扱いには注意が必要です。」

生徒「なるほど…。検索や一覧表示ならGET、情報送信にはPOSTという使い分けがしやすいです。」

先生「その通りです。用途が整理できれば自然に判断できるようになりますよ。」

生徒「REST APIでもGETとPOSTは役割が決まっているから、基礎を理解しておいた方が良いんですね。」

先生「ええ。Webの基本そのものに関わる部分なので、今回の理解はとても大きいですよ。」

生徒「実際に動かしながら試してみたら、より感覚がつかめそうです!」

先生「ぜひ実践してみてください。やればやるほど理解が深まりますからね。」

カテゴリの一覧へ
新着記事
New1
Jakarta EE
Jakarta EEのリリースサイクルとバージョンの進化をやさしく解説!
New2
Play Framework
Play Frameworkで日付・数値のローカライズ!i18n対応の決定版ガイド
New3
Jakarta EE
Jakarta EEの主要機能一覧と全体像を完全ガイド!初心者向けにやさしく解説
New4
Jakarta EE
Jakarta サーブレットのdoGetとdoPostの違いと使い分けを徹底解説!初心者でもわかるHTTPリクエスト処理
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.2
Java&Spring記事人気No2
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.3
Java&Spring記事人気No3
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識
No.4
Java&Spring記事人気No4
Jakarta EE
Jakarta EEとは?Java EEからの移行の歴史をやさしく解説
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta EEのリリースサイクルとバージョンの進化をやさしく解説!
No.6
Java&Spring記事人気No6
Jakarta EE
MavenでJakarta EEプロジェクトを作る基本手順を完全ガイド!初心者でもわかる構成と設定
No.7
Java&Spring記事人気No7
Jakarta EE
Jakarta サーブレットのHttpServletResponseを徹底解説!初心者でもわかる基本操作と使い方
No.8
Java&Spring記事人気No8
Jakarta EE
JakartaEE JSPとは?サーブレットとの違いと役割を初心者向けに解説