JavaのHttpServletRequestWrapperとgetQueryStringメソッドを完全解説!初心者でも理解できるURLパラメータの取得方法
生徒
「Javaのサーブレットで、URLのパラメータってどうやって取り出すんですか?」
先生
「そのときは、HttpServletRequestWrapperのgetQueryStringメソッドを使うと、URLの後ろについているクエリ文字列を簡単に取得できますよ。」
生徒
「それってURLのどの部分ですか?」
先生
「例えば、?id=10&name=Taroのような部分ですね。それでは詳しく見ていきましょう!」
1. javax.servlet.httpパッケージとは
JavaでWebアプリケーションを作るときによく使うパッケージがjavax.servlet.httpです。このパッケージには、HTTP通信に関する処理を行うためのクラスやインターフェースがたくさん用意されています。
その中のHttpServletRequestは、ブラウザから送られてきたリクエストの情報を取得するために使われる非常に重要なインターフェースです。
今回取り上げるHttpServletRequestWrapperは、そのリクエストをラップして、処理を追加したいときや一部の動作を上書きしたいときに便利なクラスです。
2. HttpServletRequestWrapperとは
HttpServletRequestWrapperクラスは、HttpServletRequestの機能をそのまま受け継ぎつつ、カスタマイズや拡張ができるように作られたラッパークラスです。
たとえば、リクエストパラメータのバリデーションを追加したり、特定の値を上書きしたりすることができます。Webアプリケーションの開発で中〜上級者が使うことの多いクラスですが、初心者でも扱えるメソッドがたくさんあります。
3. getQueryStringメソッドの役割
getQueryStringメソッドは、ブラウザから送られてきたURLの中に含まれる「クエリ文字列」を取得するためのメソッドです。
クエリ文字列とは、URLの末尾に「?」以降に続くキー=値の組み合わせのことです。たとえば、次のようなURLがあるとします:
http://localhost:8080/myapp/search?keyword=java&sort=asc
このとき、getQueryStringメソッドは以下の文字列を返します:
keyword=java&sort=asc
4. getQueryStringが役立つ場面
getQueryStringメソッドは、主に次のようなケースで役立ちます:
- 検索フォームの入力内容をURLから取得したいとき
- ページ遷移時に渡されたパラメータをまるごとログ出力したいとき
- クエリ文字列を加工してリダイレクトURLに付け直したいとき
- URLの状態を再現してブックマーク機能を作りたいとき
このように、Webアプリケーションの機能を作るうえでクエリ文字列を扱う場面はとても多くあります。
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の実行結果例
URLに次のようにアクセスしたとします:
http://localhost:8080/myapp/query-check?category=books&price=2000
このときの出力結果は以下のようになります。
クエリ文字列: category=books&price=2000
もしURLにクエリパラメータが含まれていない場合には、次のように表示されます。
クエリ文字列は指定されていません。
7. 初心者が気をつけるべきポイント
getQueryStringメソッドは、あくまでURLの末尾に付与されたパラメータを「文字列」として取得する機能です。値の取り出しやデコードなどは別の処理が必要になります。
たとえば、個別のパラメータを取得したい場合には、getParameterメソッドを使う方が便利です。しかし、URL全体を処理したいときにはgetQueryStringが適しています。
また、URLエンコードされている文字列(日本語など)が含まれている場合、必要に応じてURLDecoderクラスを使ってデコードする処理を追加することも検討しましょう。
8. 開発現場での活用例
たとえば検索機能を作るとき、ユーザーが入力した条件をクエリ文字列としてURLに付けることで、ページの再読込やリンク共有がしやすくなります。
そのクエリ文字列をgetQueryStringで取得し、ログに保存してユーザーの操作履歴を分析することも可能です。
また、クエリパラメータをもとにデータベース検索を行う際にも、getQueryStringで元の入力を記録しておけば、後から再検索しやすくなります。