ブラウザから情報を受け取る(サーブレット)


HTMLフォームでデータを送る

フォームに入力されたデータをサーバに送信しましょう.formタグを用います.

<form action="testServlet" = method="POST">

<textarea name="text"></textarea>
<input type="submit", value="送信">

</form> 

  • action ・・・ 送り先(つまりServelt)のURL
  • method ・・・ 送信方法(POST または GET).POSTの利用をお勧めします.

このとき,各部品の名前(name)をきちんとつけておきましょう.methodは,GETかPOSTです.

Servletでデータを受け取る

Servletでは,クライアントからの送信方法(メソッド)に合わせてdoGetやdoPostメソッドが最初に起動します.

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

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

  String text = request.getParameter("text");

}

これらの引数には,HttpServletRequestクラスと,HttpServletResponse クラスがあり,送られてきたデータはHttpServletRequestクラスに入っています.これのgetParameterメソッドを用います.引 数に,送信されたフォームの部品の名前を指定します(上記の場合はtext).するとStringクラスとしてデータが返されます.



日本語処理の注意事項!

日本語を表示したり、2バイトコードが送信されている場合は下記の点について注意が必要です.

文字コードは何か?

近年のソフトウェアアプリケーションの世界では、文字コードはUTF-8が一般的です。実際に書かれているデータにUTF-8以外の文字コードが使われていたりすると文字化けを起こすことになります。具体的には、

  • HTMLファイルの文字コード指定
  • HTMLファイルに実際に記述されている文字コード
  • Javaのソースコード内に書かれている文字コード

などに齟齬があると文字化けが発生します。

受信文字列の設定

次のように設定しないと文字化けをおこす場合があります。

Servlet API 2.3(J2EE 1.3)以降の場合

response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

とすることで,全てのデータが変換されます.

Servlet API 2.2以前の場合(古い情報なのでここは無視して良い)

String = new String(request.getParameter(name).getBytes("8859_1"),"JISAutoDetect")
という処理を,それぞれの変数に行ってください.


ContentTypeを設定する
response.setContentType("text/html;charset=Shift_JIS");
charsetの部分には,JISあるいは、EUCの場合には、charsetをそれぞれiso-2022-jp 、euc-jp としてください。

ソースファイルの文字コードを確認する
上記の設定をしても文字化けが起きたりする場合は、書いているソースファイルの文字コードがおかしい可能性があります。EclipseはWindowsの場合に標準でMS932という文字コードでファイルを作成しています。これをUTF-8 にしておくといいでしょう。設定変更の詳細はこちら



Comments