暗黙オブジェクトrequestを使う


では、送信されたフォームの処理を行っているJSP部分に目を向けましょう。送信されたフォームから送られた情報を取り出しているは、以下の部分になります。

String s = request.getParameter("text1");


非常に簡単ですね。request.getParameterというメソッドで、取り出したいデータの名前を指定します。ここでは"text1"となっていますね。これは、<input type="text">タグに指定したnameの値でした。このようにnameの値をgetParameterの引数に指定することで、その値を取り出すことができるようになっているのです。

ところで、この「request」というのは、いったい何でしょうか? 他のところで宣言などもされていないようですが……。「宣言されてないオブジェクト?」と、既にぴんと来た人もいることでしょう。そう、これもJSPに用意されている「暗黙オブジェクト」のひとつなのです。

これは、「HttpRequest」というクラスのインスタンスです。このHttpRequestはJSPで使うものとして用意されているクラスのひとつで、「リクエスト」に関するさまざまな情報を取得したりするのに用いられます。

ネットワークの世界では、クライアント(Webブラウザなどサーバに接続をする側)とサーバとの間のやり取りを示すのに「リクエスト」「レスポンス」という言葉がよく使われます。クライアントからサーバに問い合わせをしたとき、クライアントからサーバへ問い合わせる接続を「リクエスト」といい、サーバからクライアントへ返送する接続を「レスポンス」といいます。HttpRequestは、この「リクエスト(つまりクライアントからサーバへの問い合わせ)」に関する情報を取得するのに使うものというわけです。

今回使っている「getParameter」というメソッドは、リクエストから指定の名前のパラメータを取得し返す働きをします。フォームから送信された情報は、基本的にすべてこのgetParameterメソッドで取り出します。


日本語の文字化けをなくすには?


ところで、今回のプログラム、「半角英数字で」送信するようにいいました。なぜ日本語はだめなんでしょう? 実際、日本語を送信してみるとわかります。送られた日本語は、文字化けして表示されてしまうのです。

日本語を送信すると、送られたテキストだけ文字化けしてしまう。

これは、送信されてきたリクエスト情報のエンコーディング方式が何なのかわからないために生ずる問題です。半角英数字ならばエンコードうんぬんはほとんど考える必要がありませんが、日本語となると複数のエンコーディング方式が一般的に用いられていますから、「どの方式でエンコードされたテキストか」がはっきりしなければうまくテキストを受け取って再現できないのです。

では、JSPタグの部分を少し修正して、日本語を文字化けせずに受け渡せるようにしてみましょう。

<%
  request.setCharacterEncoding("UTF-8");
  String s = request.getParameter("text1");
  if (s != null){
    out.println("こんにちは、" + s + "さん!<br><br>");
  }
%>


修正したものでは、日本語も文字化けせずに表示されるようになる。

ここではUTF-8を使ってJSPファイルが作成されているものとして考えています。最初に暗黙オブジェクトrequestの「setCharacterEncoding」というものを設定する文が追加されていますね。これが、送信されたリクエスト情報のキャラクタエンコーディング方式を設定するためのものです。引数に、エンコード名を渡して呼び出します。これは、フォームから日本語を送信する際の基本処理として覚えておきましょう。