Jakarta サーブレットでクエリパラメータを取得する方法を徹底解説!初心者でもわかる使い方
生徒
「先生、URLに?name=taro&age=20みたいなものが付いているのを見たことがあります。これはどうやってサーブレットで取り出すんですか?」
先生
「それがクエリパラメータだよ。Jakarta サーブレットではHttpServletRequestを使って簡単に取得できるんだ。」
生徒
「パラメータを取り出すときには特別なメソッドを使うんですか?」
先生
「そうだね。getParameterやgetParameterValuesを使うんだ。実際のコードを見てみよう。」
1. クエリパラメータとは?
クエリパラメータとは、URLの末尾に「?キー=値」という形式で付与される追加情報のことです。例えば次のようなURLを考えてみましょう。
http://localhost:8080/sample?name=taro&age=20
この場合、nameが「taro」、ageが「20」というパラメータになります。Webアプリケーションではフォーム入力や検索キーワードの受け渡しなどで頻繁に使われます。
2. getParameterメソッドで単一値を取得する
HttpServletRequestのgetParameterメソッドを使うと、指定したキーに対応する値を文字列として取得できます。
String name = request.getParameter("name");
String age = request.getParameter("age");
例えばURLが?name=taro&age=20なら、nameには「taro」、ageには「20」が入ります。
3. getParameterValuesで複数値を取得する
チェックボックスや複数選択のフォームでは、同じキーに複数の値が送られることがあります。その場合はgetParameterValuesを使いましょう。
String[] hobbies = request.getParameterValues("hobby");
これで「hobby=music&hobby=sports&hobby=game」のようなリクエストが来た場合に、配列でまとめて受け取れます。
4. getParameterNamesで全パラメータを列挙する
クエリパラメータのキーをすべて確認したいときはgetParameterNamesを使います。
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String param = names.nextElement();
String value = request.getParameter(param);
}
これで送られてきた全パラメータを確認できるので、デバッグやログ出力に役立ちます。
5. 実際のサーブレットコード例
以下のサンプルは、送られてきたnameとageを取得してブラウザに表示するサーブレットです。
@WebServlet("/query")
public class QueryServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.setContentType("text/plain; charset=UTF-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
String age = request.getParameter("age");
out.println("名前: " + name);
out.println("年齢: " + age);
}
}
ブラウザから次のようにアクセスすると:
http://localhost:8080/query?name=hanako&age=25
表示結果は以下のようになります。
名前: hanako
年齢: 25
6. フォーム送信とクエリパラメータ
HTMLフォームをmethod="get"で送信すると、入力内容がクエリパラメータとしてURLに付加されます。
<form action="query" method="get">
<input type="text" name="name" placeholder="名前">
<input type="number" name="age" placeholder="年齢">
<button type="submit">送信</button>
</form>
これにより入力内容がサーブレットに渡り、上で紹介したgetParameterで簡単に取得できます。
7. 注意点とベストプラクティス
クエリパラメータを扱う際には次のポイントを意識しましょう。
- 文字化け防止のためにサーブレット側でUTF-8を設定する。
- 数値は
Integer.parseIntなどで型変換する必要がある。 - 必須パラメータが存在しない場合に備えてnullチェックを行う。
- ログに直接出力する場合はセキュリティのためにエスケープ処理を検討する。
これらを守ることで安定したJakarta サーブレットアプリケーションを作ることができます。
まとめ
Jakarta サーブレットにおけるクエリパラメータ取得の重要性
今回の記事では、Jakarta サーブレットを使ってクエリパラメータを取得する方法について、基本から実践的な使い方まで丁寧に解説してきました。Webアプリケーション開発において、URLに付与されるクエリパラメータは非常に重要な役割を持っています。検索条件の受け渡し、フォーム入力値の送信、画面遷移時の状態管理など、さまざまな場面でクエリパラメータは活用されています。Jakarta サーブレットでこれらを正しく扱えるようになることは、Web開発者としての基礎力を高めるうえで欠かせません。
クエリパラメータは「キーと値」の組み合わせで構成されており、HttpServletRequestを通して簡単に取得できる点が大きな特徴です。特別な設定や複雑な処理を行わなくても、getParameterやgetParameterValuesといったメソッドを使うだけで、リクエストに含まれる情報を取り出せます。これにより、初心者でも比較的早い段階で動くサーブレットを作成できるようになります。
getParameterとgetParameterValuesの使い分け
記事の中で紹介したように、単一の値を取得する場合はgetParameter、複数の値をまとめて扱う場合はgetParameterValuesを使うのが基本です。例えば、名前や年齢といった一つの値しか持たないパラメータはgetParameterで十分ですが、チェックボックスや複数選択フォームのように同じキーで複数の値が送信される場合にはgetParameterValuesが必要になります。この使い分けを理解しておくことで、フォーム処理や検索機能の実装がスムーズになります。
また、getParameterNamesを利用すれば、送信されたすべてのパラメータ名を列挙できます。これはデバッグ時やログ出力、動的にパラメータを処理したい場合に役立ちます。どのようなクエリパラメータが実際に送られてきているのかを把握することで、想定外の入力にも柔軟に対応できるようになります。
実践的なサーブレット開発で意識したいポイント
クエリパラメータを扱う際には、単に値を取得するだけでなく、その後の処理にも注意が必要です。文字コードの設定を適切に行わないと文字化けが発生する可能性がありますし、数値として扱う値は型変換を行わなければなりません。また、必須パラメータが送られてこなかった場合を想定して、nullチェックや入力チェックを行うことも重要です。
これらの基本的な対策を行うことで、安定したJakarta サーブレットアプリケーションを構築できます。特に初心者のうちは、エラーが発生した原因が分からずに悩むことも多いですが、クエリパラメータの扱い方をしっかり理解しておくことで、トラブルシューティングもしやすくなります。今回学んだ内容は、今後JSPやJakarta EE全体を学習していく際の土台としても役立つはずです。
まとめとしてのサンプルプログラム
最後に、クエリパラメータ取得の基本を確認するためのシンプルなサーブレットコードを改めて見てみましょう。以下のようなコードを書けるようになれば、Jakarta サーブレットでのリクエスト処理に自信が持てるようになります。
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.setContentType("text/plain; charset=UTF-8");
String keyword = request.getParameter("keyword");
if (keyword != null) {
response.getWriter().println("検索キーワード: " + keyword);
}
}
このように、クエリパラメータを取得して処理する流れは非常にシンプルです。まずは基本形をしっかり身につけ、徐々に条件分岐や入力チェックなどを追加していくことで、より実践的なWebアプリケーションへと発展させることができます。
生徒
「クエリパラメータって、ただURLに付いている文字列だと思っていましたが、サーブレットで簡単に扱えるんですね。」
先生
「そうだよ。Jakarta サーブレットではHttpServletRequestが用意されているから、基本的な取得はとても簡単なんだ。」
生徒
「getParameterとgetParameterValuesの違いも、フォームを作りながらだと理解しやすかったです。」
先生
「実際に手を動かすのは大事だね。これが分かれば、検索機能や入力フォームの処理も作れるようになるよ。」
生徒
「次はJSPと組み合わせて、画面に表示する処理にも挑戦してみたいです。」
先生
「いい心がけだね。今日学んだクエリパラメータの知識は、これからのJakarta EE開発でも必ず役に立つよ。」