カテゴリ: Servlet 更新日: 2026/06/26

JavaのHttpServletRequestWrapperとgetQueryStringメソッドを完全解説!初心者でも理解できるURLパラメータの取得方法

HttpServletRequestWrapperのgetQueryStringメソッド
HttpServletRequestWrapperのgetQueryStringメソッド

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

生徒

「Javaのサーブレットで、URLのパラメータってどうやって取り出すんですか?」

先生

「そのときは、HttpServletRequestWrapperのgetQueryStringメソッドを使うと、URLの後ろについているクエリ文字列を簡単に取得できますよ。」

生徒

「それってURLのどの部分ですか?」

先生

「例えば、?id=10&name=Taroのような部分ですね。それでは詳しく見ていきましょう!」

1. javax.servlet.httpパッケージとは

1. javax.servlet.httpパッケージとは
1. javax.servlet.httpパッケージとは

JavaでWebアプリケーションを作るときによく使うパッケージがjavax.servlet.httpです。このパッケージには、HTTP通信に関する処理を行うためのクラスやインターフェースがたくさん用意されています。

その中のHttpServletRequestは、ブラウザから送られてきたリクエストの情報を取得するために使われる非常に重要なインターフェースです。

今回取り上げるHttpServletRequestWrapperは、そのリクエストをラップして、処理を追加したいときや一部の動作を上書きしたいときに便利なクラスです。

2. HttpServletRequestWrapperとは

2. HttpServletRequestWrapperとは
2. HttpServletRequestWrapperとは

HttpServletRequestWrapperクラスは、HttpServletRequestの機能をそのまま受け継ぎつつ、カスタマイズや拡張ができるように作られたラッパークラスです。

たとえば、リクエストパラメータのバリデーションを追加したり、特定の値を上書きしたりすることができます。Webアプリケーションの開発で中〜上級者が使うことの多いクラスですが、初心者でも扱えるメソッドがたくさんあります。

3. getQueryStringメソッドの役割

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

getQueryStringメソッドは、ブラウザから送られてきたURLの中に含まれる「クエリ文字列」を取得するためのメソッドです。

クエリ文字列とは、URLの末尾に「?」以降に続くキー=値の組み合わせのことです。たとえば、次のようなURLがあるとします:

http://localhost:8080/myapp/search?keyword=java&sort=asc

このとき、getQueryStringメソッドは以下の文字列を返します:


keyword=java&sort=asc

4. getQueryStringが役立つ場面

4. getQueryStringが役立つ場面
4. getQueryStringが役立つ場面

getQueryStringメソッドは、主に次のようなケースで役立ちます:

  • 検索フォームの入力内容をURLから取得したいとき
  • ページ遷移時に渡されたパラメータをまるごとログ出力したいとき
  • クエリ文字列を加工してリダイレクトURLに付け直したいとき
  • URLの状態を再現してブックマーク機能を作りたいとき

このように、Webアプリケーションの機能を作るうえでクエリ文字列を扱う場面はとても多くあります。

5. HttpServletRequestWrapperでgetQueryStringを使うサンプルコード

5. HttpServletRequestWrapperでgetQueryStringを使うサンプルコード
5. HttpServletRequestWrapperでgetQueryStringを使うサンプルコード

それでは実際に、HttpServletRequestWrapperを使ってgetQueryStringメソッドの使い方を見てみましょう。


@WebServlet("/query-check")
public class QueryStringServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(request);
        String query = wrapper.getQueryString();

        response.setContentType("text/plain; charset=UTF-8");
        if (query != null) {
            response.getWriter().println("クエリ文字列: " + query);
        } else {
            response.getWriter().println("クエリ文字列は指定されていません。");
        }
    }
}

6. getQueryStringの実行結果例

6. getQueryStringの実行結果例
6. getQueryStringの実行結果例

URLに次のようにアクセスしたとします:

http://localhost:8080/myapp/query-check?category=books&price=2000

このときの出力結果は以下のようになります。


クエリ文字列: category=books&price=2000

もしURLにクエリパラメータが含まれていない場合には、次のように表示されます。


クエリ文字列は指定されていません。

7. 初心者が気をつけるべきポイント

7. 初心者が気をつけるべきポイント
7. 初心者が気をつけるべきポイント

getQueryStringメソッドは、あくまでURLの末尾に付与されたパラメータを「文字列」として取得する機能です。値の取り出しやデコードなどは別の処理が必要になります。

たとえば、個別のパラメータを取得したい場合には、getParameterメソッドを使う方が便利です。しかし、URL全体を処理したいときにはgetQueryStringが適しています。

また、URLエンコードされている文字列(日本語など)が含まれている場合、必要に応じてURLDecoderクラスを使ってデコードする処理を追加することも検討しましょう。

8. 開発現場での活用例

8. 開発現場での活用例
8. 開発現場での活用例

たとえば検索機能を作るとき、ユーザーが入力した条件をクエリ文字列としてURLに付けることで、ページの再読込やリンク共有がしやすくなります。

そのクエリ文字列をgetQueryStringで取得し、ログに保存してユーザーの操作履歴を分析することも可能です。

また、クエリパラメータをもとにデータベース検索を行う際にも、getQueryStringで元の入力を記録しておけば、後から再検索しやすくなります。

まとめ

まとめ
まとめ

JavaのHttpServletRequestWrapperとgetQueryStringメソッドを理解すると、サーブレットで受け取ったHTTPリクエストのURL情報をより柔軟に扱えるようになります。Webアプリケーションでは、検索条件、並び順、ページ番号、カテゴリ、価格帯などの情報をURLの後ろにクエリ文字列として付けて送ることがよくあります。たとえば、検索画面でkeyword=javaやpage=2のような情報をURLに含めることで、同じ検索条件を再表示したり、ブックマークしたり、他の人に共有したりできます。

getQueryStringメソッドは、URLの中にある疑問符以降の文字列をそのまま取得するためのメソッドです。個別の値を取り出すgetParameterとは役割が少し違います。getParameterはキーを指定して値を取得するのに向いていますが、getQueryStringはクエリ文字列全体をログに残したいときや、元のURL状態をそのまま再利用したいときに便利です。用途に応じて使い分けることで、サーブレット開発の幅が広がります。

HttpServletRequestWrapperは、元のHttpServletRequestを包み込み、必要に応じて動作を追加したり変更したりできるラッパークラスです。単にgetQueryStringを呼び出すだけであればHttpServletRequestから直接取得することもできますが、Wrapperを使うと、リクエストの値を加工したい場合や、共通処理を追加したい場合に役立ちます。フィルターや共通処理でリクエストを拡張する場面では、HttpServletRequestWrapperの考え方が重要になります。

getQueryStringの基本を確認

getQueryStringは、URLの疑問符より後ろの部分を文字列として取得します。たとえば、検索画面でcategory=booksとprice=2000が指定されている場合、その文字列全体を取得できます。クエリ文字列がない場合はnullになるため、必ずnullチェックを行うことが大切です。


@WebServlet("/query-check")
public class QueryStringServlet extends HttpServlet {

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

        String query = request.getQueryString();

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

        if (query != null) {
            response.getWriter().println("クエリ文字列: " + query);
        } else {
            response.getWriter().println("クエリ文字列は指定されていません。");
        }
    }
}

このコードでは、URLにクエリ文字列が付いている場合はその内容を表示し、付いていない場合は指定されていないことを表示しています。初心者のうちは、getQueryStringの戻り値は文字列またはnullになると覚えておくとよいです。


クエリ文字列: category=books&price=2000

HttpServletRequestWrapperを使う例

HttpServletRequestWrapperを使うと、元のリクエストを包み込んだ状態でgetQueryStringを呼び出せます。Wrapperは、リクエストの動作を一部だけ変更したいときや、共通的な加工処理を追加したいときに便利です。


@WebServlet("/wrapper-query")
public class WrapperQueryServlet extends HttpServlet {

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

        HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(request);

        String query = wrapper.getQueryString();

        response.setContentType("text/plain; charset=UTF-8");
        response.getWriter().println("取得したクエリ文字列: " + query);
    }
}

この例では、Wrapperを作成してからgetQueryStringを呼び出しています。処理結果は直接requestから取得した場合と同じですが、Wrapperを使うことで、将来的にリクエスト内容を加工する処理へ発展させやすくなります。

getQueryStringとgetParameterの違い

URLパラメータを扱うときに、getQueryStringとgetParameterの違いで迷うことがあります。getQueryStringはクエリ文字列全体を取得し、getParameterは指定したキーの値だけを取得します。検索条件を丸ごとログに残したい場合はgetQueryString、keywordやcategoryなど個別の値を処理したい場合はgetParameterが向いています。


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

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

        String queryString = request.getQueryString();
        String keyword = request.getParameter("keyword");
        String sort = request.getParameter("sort");

        response.setContentType("text/plain; charset=UTF-8");
        response.getWriter().println("クエリ全体: " + queryString);
        response.getWriter().println("検索キーワード: " + keyword);
        response.getWriter().println("並び順: " + sort);
    }
}

クエリ全体: keyword=java&sort=asc
検索キーワード: java
並び順: asc

このように、全体を確認したい場合と個別の値を使いたい場合でメソッドを使い分けます。実務では、検索処理そのものにはgetParameterを使い、ログやリダイレクトURLの再構築にはgetQueryStringを使うことが多いです。

日本語や特殊文字を扱うときの注意

クエリ文字列には、日本語や空白などがURLエンコードされた状態で含まれることがあります。たとえば、検索キーワードに日本語を入力すると、ブラウザやサーバーの処理によってエンコードされた文字列になる場合があります。getQueryStringはクエリ文字列をそのまま取得するため、必要に応じてURLDecoderを使ってデコードします。


import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;

String query = request.getQueryString();

if (query != null) {
    String decoded = URLDecoder.decode(query, StandardCharsets.UTF_8);
    System.out.println(decoded);
}

ただし、個別のパラメータ値を取得したいだけであれば、通常はgetParameterを使う方が簡単です。getQueryStringは文字列全体を扱うため、デコードや分割処理を自分で行う必要がある点に注意しましょう。

開発現場での活用ポイント

getQueryStringは、検索条件をログに残したいとき、ユーザーがどのような条件で一覧画面を表示したのかを分析したいとき、元の検索条件を保持したまま別ページへリダイレクトしたいときに役立ちます。たとえば、商品一覧画面でカテゴリ、価格、並び順、ページ番号が指定されている場合、そのクエリ文字列を残しておくことで、あとから同じ状態を再現しやすくなります。

一方で、クエリ文字列にはユーザーが入力した値が含まれることがあります。そのため、ログに保存する場合は、個人情報やパスワード、トークンなどの機密情報を含めないように注意が必要です。URLに重要な情報を含めない設計にすることも、Webアプリケーションのセキュリティでは大切です。

Java、サーブレット、HttpServletRequest、HttpServletRequestWrapper、getQueryString、getParameter、URLパラメータ、クエリ文字列、検索フォーム、リクエスト処理、URLエンコード、URLDecoder、Servlet、Webアプリケーション、ログ出力、リダイレクト、パラメータ取得といったキーワードは、JavaのWeb開発を学ぶうえで重要です。これらを関連づけて理解すると、URLの情報を正しく扱えるようになります。

初心者は、まずgetQueryStringでクエリ文字列全体を取得し、次にgetParameterで個別の値を取り出す違いを確認すると理解しやすいです。その後、HttpServletRequestWrapperを使ってリクエストを包み込む考え方を学ぶと、フィルターや共通処理でリクエストを加工する応用にも進めます。

HttpServletRequestWrapperとgetQueryStringは、単なるURL文字列の取得だけでなく、リクエスト処理を拡張する考え方にもつながる重要な仕組みです。クエリ文字列を取得する、個別パラメータと使い分ける、必要に応じてデコードする、機密情報に注意するという基本を押さえて、読みやすく安全なJavaサーブレット開発を進めていきましょう。

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

生徒

getQueryStringは、URLの疑問符より後ろにあるクエリ文字列を取得するメソッドだと分かりました。

先生

その通りです。keyword=javaやsort=ascのような文字列全体を取得できます。

生徒

個別の値を取り出したいときは、getQueryStringよりgetParameterを使う方が便利なのですね。

先生

はい。全体を取得するならgetQueryString、キーごとの値を取得するならgetParameterと考えると分かりやすいです。

生徒

HttpServletRequestWrapperは、元のリクエストを包み込んで、処理を追加したり変更したりするためのクラスなのですね。

先生

はい。フィルターや共通処理でリクエストを拡張したいときに役立ちます。

生徒

クエリ文字列がない場合はnullになるので、nullチェックが必要だと分かりました。

先生

その理解で大丈夫です。存在しない前提も考えて安全に処理しましょう。

生徒

日本語などが含まれる場合は、URLDecoderでデコードすることもあるのですね。

先生

はい。ただし、個別の値を使うだけならgetParameterで済むことも多いです。

生徒

検索条件のログ保存やリダイレクトURLの再構築にもgetQueryStringが使えることが分かりました。

先生

その通りです。クエリ文字列の扱いを理解すると、検索機能や画面遷移の実装がしやすくなります。機密情報に注意しながら、安全に活用していきましょう。

生成AIを基礎から学びたい方へ

ChatGPTなどの生成AIをこれから学びたい方に向けて、AIスキルアカデミーの口コミ・評判、料金、無料セミナーの内容を詳しくまとめています。

AIスキルアカデミーの口コミ・評判を詳しく見る
カテゴリの一覧へ
新着記事
New1
Java
JavaのassertFalseとは?JUnit5のAssertionsクラスを初心者向けにわかりやすく解説
新規投稿
New2
Thymeleaf
ThymeleafでDBから取得したデータを編集フォームの初期値にセットする方法!Entity連携を初心者向けに解説
新規投稿
New3
Spring
JavaのSpringで使う@FutureOrPresentアノテーションを完全ガイド!初心者でもわかる日付バリデーション
新規投稿
New4
Java
JavaのLocalDateクラスのgetMonthValueメソッド完全ガイド!初心者でもわかる数値で月を取得する方法
新規投稿
人気記事
No.1
Java&Spring記事人気No1
Servlet
JavaサーブレットのdoPostメソッドとは?初心者向けにやさしく解説!
No.2
Java&Spring記事人気No2
Servlet
JavaのHttpServletResponseクラスを初心者向けに徹底解説!
No.3
Java&Spring記事人気No3
Servlet
JavaのHttpServletRequestWrapperとgetSessionメソッドの使い方を徹底解説!初心者向けServletのセッション管理入門
No.4
Java&Spring記事人気No4
Servlet
JavaのServletExceptionクラスを初心者向けに徹底解説!
No.5
Java&Spring記事人気No5
Servlet
JavaのHttpSessionインターフェースとgetSessionContextメソッドを徹底解説!初心者でもわかるセッション管理の基本
No.6
Java&Spring記事人気No6
Java
JavaのStringクラスとlengthメソッドを完全解説!初心者でも理解できる文字列の長さ取得の使い方
No.7
Java&Spring記事人気No7
Servlet
JavaのHttpSessionAttributeListenerとattributeRemovedメソッドの使い方を徹底解説!初心者でもわかるセッション属性の削除と監視
No.8
Java&Spring記事人気No8
Java
Javaのクラスとインスタンス化、コンストラクタの使い方完全ガイド!初心者でもわかるオブジェクト指向の基礎