Jakarta サーブレットでフォームデータを取得する方法を徹底解説!初心者でもわかる入力処理
生徒
「先生、Webページのフォームから入力したデータはサーブレットでどうやって受け取るんですか?」
先生
「いい質問だね。Jakarta サーブレットでは、フォーム送信されたデータはHttpServletRequestオブジェクトを通して取得することができるんだ。」
生徒
「テキストボックスやチェックボックスの値も全部そこで取れるんですか?」
先生
「その通り。具体的にどう処理するのか、これから一緒に見ていこう。」
1. フォームデータとは?
フォームデータとは、ユーザーがWebページの入力欄に記入して送信した値のことです。例えば、名前やメールアドレスを入力するフォームを送信すると、その内容がサーバーに送られます。Jakarta サーブレットはこのデータを受け取って処理する役割を担います。
2. HTMLフォームの基本構造
まずは送信される側のHTMLフォームを確認してみましょう。以下は名前と年齢を入力する簡単なフォームです。
<form action="form" method="post">
<input type="text" name="username" placeholder="名前">
<input type="number" name="age" placeholder="年齢">
<button type="submit">送信</button>
</form>
method="post"を指定することで、データはHTTPリクエストの本文に含まれて送られます。セキュリティの観点からも、ユーザーの入力はPOSTメソッドを使うことが一般的です。
3. サーブレットでフォームデータを受け取る
Jakarta サーブレットでは、HttpServletRequestのgetParameterメソッドを使ってフォームデータを取得します。キーにはname属性を指定します。
@WebServlet("/form")
public class FormServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.setContentType("text/plain; charset=UTF-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String age = request.getParameter("age");
out.println("名前: " + username);
out.println("年齢: " + age);
}
}
ここで指定した"username"や"age"は、HTMLフォーム側のname属性と一致させる必要があります。
4. 複数選択やチェックボックスのデータ取得
チェックボックスや複数選択リストでは、同じキーに複数の値が送られます。その場合はgetParameterValuesを使用します。
<form action="form" method="post">
<label><input type="checkbox" name="hobby" value="music">音楽</label>
<label><input type="checkbox" name="hobby" value="sports">スポーツ</label>
<label><input type="checkbox" name="hobby" value="game">ゲーム</label>
<button type="submit">送信</button>
</form>
String[] hobbies = request.getParameterValues("hobby");
if (hobbies != null) {
for (String hobby : hobbies) {
out.println("趣味: " + hobby);
}
}
このように配列として受け取ることで、ユーザーが複数選択した値をすべて処理できます。
5. 文字コードとエンコーディングの注意点
フォームデータを受け取る際に文字化けが起こることがあります。特に日本語の入力を扱う場合は、サーブレットで文字コードを設定することが大切です。
request.setCharacterEncoding("UTF-8");
この処理をgetParameterを呼び出す前に記述することで、入力文字列が正しくUTF-8として解釈されます。
6. 全てのフォームデータをまとめて扱う方法
場合によっては送られてきた全パラメータを確認したいこともあります。その場合はgetParameterNamesを利用してループ処理を行います。
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String param = names.nextElement();
String value = request.getParameter(param);
out.println(param + " = " + value);
}
これによりフォームから送信された全ての入力項目をログ出力したり、デバッグに活用できます。
7. フォームデータ取得の実践例
実際にブラウザからフォームを送信してサーブレットにアクセスすると、入力した内容がそのまま表示されます。
名前: 太郎
年齢: 20
趣味: 音楽
趣味: スポーツ
このように、Jakarta サーブレットを使えば初心者でも簡単にフォームデータを扱えることがわかります。ユーザー入力を受け付ける機能は、ログイン画面や会員登録フォーム、問い合わせページなど、あらゆるWebアプリケーションで重要な役割を果たします。
まとめ
今回の記事では、Jakarta サーブレットを使ってフォームデータを受け取る仕組みについて、基本から少し応用的な内容まで丁寧に確認しました。フォーム入力はWebアプリケーションに欠かせない要素であり、ユーザーが入力した情報を正しく取得し、処理へつなげることは、ログイン機能や検索機能、問い合わせフォームなど多くのページで求められます。特にHttpServletRequestを通してデータを取得する流れは、サーブレット開発の中心的な処理となるため、しっかり理解しておきたい重要な要素です。 また、テキストボックスだけではなく、チェックボックスや複数選択、さらには全パラメータをまとめて扱う方法まで確認することで、実際のアプリケーション開発で遭遇するさまざまな入力パターンに対応できる基礎が身につきます。特に複数の値を扱う際に使用するgetParameterValuesや、すべてのパラメータを確認するgetParameterNamesは、デバッグや柔軟なフォーム処理に役立つため、初心者の段階から覚えておくと後々大きな助けになります。 さらに、Webアプリケーションには日本語入力が深く関わる場面も多いため、文字コードの設定についても正しい理解が欠かせません。request.setCharacterEncoding("UTF-8") を適切な場所に記述することで、文字化けなくデータを扱えるようになり、特に日本語を含むフォーム入力では必須の知識となります。 以下に、記事の内容を踏まえてフォーム入力をまとめて取得するサンプルコードを示します。
サンプルプログラム:送信された全パラメータをまとめて表示するサーブレット例
@WebServlet("/confirm")
public class ConfirmServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/plain; charset=UTF-8");
PrintWriter out = response.getWriter();
Enumeration<String> params = request.getParameterNames();
while (params.hasMoreElements()) {
String name = params.nextElement();
String[] values = request.getParameterValues(name);
if (values != null) {
for (String v : values) {
out.println(name + " : " + v);
}
}
}
}
}
このように、送信されたデータを柔軟に扱える仕組みを理解することで、フォーム機能を伴うアプリケーション開発の幅が大きく広がります。ユーザー入力は時に想定外の形式で送られてくることもあり、そのたびにどのようにパラメータを取得すればよいのかを考えなければなりません。そのため、今回触れたメソッドの意味や使い分けをしっかりと把握しておくことで、後により複雑なフォーム処理を行う際にも落ち着いて対応できるようになります。 また、フォーム送信はページ遷移を伴うことが多いため、サーブレット内でデータを受け取ったあとにJSPなどへ渡す流れも重要となり、今後のMVC構造の理解にもつながります。今回学んだ基礎をしっかり身につけることで、Jakarta サーブレットを使用した実践的なWeb開発能力が着実に育っていくはずです。
生徒
「今日はサーブレットでフォームデータを受け取る仕組みがよく分かりました!入力した値がどうやってサーバーに届くのか、流れが見えてきました。」
先生
「その理解はとても大事です。フォーム送信とサーブレットはWebアプリの基本なので、ここを押さえると今後の学習がスムーズになりますよ。」
生徒
「チェックボックスみたいに複数の値を受け取る方法があるのも面白かったです。実際のアンケートフォームとかでも使われていそうですね。」
先生
「その通り。実務の場でもよく使われますし、文字コードの設定も重要なポイントです。日本語が文字化けしないように常に意識しておきましょう。」
生徒
「次は入力したデータをJSPに渡したり、画面に反映する仕組みも学んでみたいです!」
先生
「いいですね。サーブレットとJSPの連携を理解すると、動的なWebページが一段と作りやすくなりますよ。」