HTMLフォームからのデータの受信

本章のプログラムを御覧の際には、Tomcatが必要です。
こちらからダウンロード出来ます。

ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin Expander等)を使って解凍して下さい。

サーブレット側で受信したデータをクライアントに戻す事をエコーバックと言います。
実際のサイトでも、入力データの確認等に使われています。

HTMLによるフォームの作成

ブラウザにボタンやテキストボックス等のGUI部品を配置するには、HTMLのFORMタグとINPUTタグを使います。
「<form>〜</form>」の間に書かれたsubmitボタンが押された時、此の間に有るテキストボックス等の要素に入力されたデータは、全て「action」で指定されたサーブレットに送信されます。

<form action = "起動するサーブレットの相対パス" method = "POST">
フォームに配置する要素
</form>

各部品の配置は、以下の様に書きます。

@ボタンの配置

<input type = "submit" name = "識別子"value = "ボタン上の表示文字">

Aテキストボックスの配置

<input type = "text" name = "識別子"value = "初期値" size = "横幅" maxlength = "最大入力文字数">

テキストボックスに入力された文字列がサーブレットに送信されます。

Bパスワードの配置

<input type = "password" name = "識別子"value = "初期値" size = "横幅" maxlength = "最大入力文字数">

「type」を「password」にすると、入力されたデータは機密保持の為「●●●」や「***」と表示されますが、サーブレットには、入力された文字列がきちんと送信されます。

Cラジオボタンの配置

<input type = "radio" name = "識別子"value = "送信内容" checked>

識別子が同じラジオボタンは同じグループとなり、どれか1つが選択されると他のボタンは選択が解除されます。
同じグループの中で1つだけ「checked」を付けたラジオボタンが、初期値で選択されるボタンとなります。
ラジオボタンを配置した直後に文字を書くと、此が直前のラジオボタンのキャンプションの様に見せられます。
「value」とキャンプションは一致させる必要は有りません。
サーブレットには、「value」で指定された文字列が送信されます。

Dチェックボックスの配置

<input type = "checkbox" name = "識別子"value = "送信内容" checked>

ラジオボタン同様、識別子が同じチェックボックスは同じグループとなりますが、複数選択が可能です。
「checked」を付けたチェックボックスは、初期値でチェックが付きます。
チェックボックスを配置した直後に文字を書くと、此が直前のチェックボックスのキャンプションの様に見せられます。
「value」とキャンプションは一致させる必要は有りません。
サーブレットには、「value」で指定された文字列が送信されます。
複数選択された場合には、複数のVALUE値を送信出来ます。

サーブレット側でのパラメータの受け取り

HTMLのフォームから「method = "POST"」でサーブレットを呼び出すと、HTTPプロトコルのPOSTコマンドが発行され、サーブレットのdoPostメソッドが呼び出されます。
HTMLからは、「name」と「value」の組が渡されます。
サーブレット側では、「name」を指定して対応する「value」を取得します。

String p = request.getParameter("NAMEで指定した識別子");

此は、取得出来るデータが1つで有れば、HTMLでのフォームの種類に因りません。
つまり、テキストボックスに入力されたデータもラジオボタンで選ばれたデータも、全て此の形式で受け渡しが出来ます。

複数選択のパラメータの受け渡し

チェックボックスの様に1つのNAMEに対し、複数のVALUE値が渡される場合には、配列を使います。

String[] p = request.getParameterValues("NAMEで指定した識別子");

日本語の取り扱い

ブラウザからの入力データの文字コードは「ISO-8859-1」で、Windowsの文字コードと異なる為、此の侭では文字化けして終います。
其処で、取得した文字列を1度、「ISO-8859-1」モードでバイト列に変換し、次に此を自動認識モード「JISAutoDetect」モードでStringクラスに変換し直します。

例: String p = req.getParameter("param1"); //パラメータを取得
byte[] b = p.getBytes("iso8859-1"); //バイト型の配列に変換
String text = new String(b,"JISAutoDetect"); //指定された文字セットを使用してバイト配列から新しいStringクラスをインスタンス化するコンストラクタ

ボタンによる処理の振り分け

1つのフォーム内に3つのsubmitボタンが配置してあるので、どのボタンが押されても、PostServletButton.javaのdoPostメソッドが呼び出されます。
従って、此のメソッド内でどのボタンが押されたのかを調べ、それぞれに対応する処理を行う事になります。

if(request.getParameter("識別子") != null){
        "識別子"を持つボタンが押された時の処理を此処に書く
}

HTMLで画面の背景色を設定

HTMLで画面の背景色を設定するには、<body>タグの中で「bgcolor」に色を表す16進数のコードを設定します。

<body bgcolor = "#色コード">
ソース ダウンロード
PostServlet.java PostServlet.zip
PostServletButton.java

戻る