カテゴリ: Jakarta EE 更新日: 2026/02/07

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には次のような違いがあります。

  • データの送信方法:doGetはURLにパラメータを付与、doPostはリクエストボディにデータを格納
  • データ量の制限:doGetはブラウザやサーバーによって制限があるが、doPostは制限が緩やか
  • セキュリティ:doGetはURLに見えるため安全性が低い、doPostは見えないため比較的安全
  • 用途:doGetは情報の取得、doPostはデータの送信や登録処理に使う

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
Jakarta EE
JakartaEE JSPのリクエスト属性とスコープの基本を徹底解説!初心者向け入門ガイド
New3
Play Framework
Play Frameworkのビューテストを徹底解説!Twirlテンプレートの品質を高める方法
New4
Jakarta EE
JakartaEE フィルタで認証と認可を実装する方法を初心者向けに解説!サーブレットのセキュリティ入門
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.2
Java&Spring記事人気No2
Play Framework
Play Frameworkのビューを共通化!テンプレート間のインクルード方法を徹底解説
No.3
Java&Spring記事人気No3
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.4
Java&Spring記事人気No4
Play Framework
Play Frameworkプロジェクト作成直後にやるべき初期設定ガイド!初心者でも安心
No.5
Java&Spring記事人気No5
Play Framework
Play Frameworkで多言語対応(i18n)を徹底解説!Twirlテンプレートでの使い方
No.6
Java&Spring記事人気No6
Play Framework
Play FrameworkでCSSやJavaScriptを読み込む方法を徹底解説!静的リソースの組み込みガイド
No.7
Java&Spring記事人気No7
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識
No.8
Java&Spring記事人気No8
Jakarta EE
Jakarta EEの標準仕様とAPI一覧を完全解説!初心者でもわかるエンタープライズJavaの基本