【JavaWebアプリ入門 #08】フォーム・パラメータ送受信

 

みのる
こんにちは。笑顔で感謝!✨ みのるコーチです。
今回も、ご覧いただき、ありがとうございます。

今回は…

JavaWebアプリ入門 #08
フォーム・パラメータ送受信

というテーマでお送りします。

彩香
アンケートフォームとか、問い合わせフォームとか
画面から入力する、あれでしょうか…。

興味津々です。よろしくお願いします。

剛留
今回も、がんばります。よろしくお願いします。

【1】 フォーム

Webブラウザから サーバにリクエストを送る時には
画面から入力したデータを 送りたい場合が、多くあります。

この時に使われるのが、フォームです。

Webアプリは、ユーザの入力に対応して処理をします。

ですので…

このフォームは Webアプリにとって
欠かせない存在

なのです。

【2】 パラメータ

フォームを使うと
Webブラウザから サーバに リクエストを送るときに…

入力データを送れる事をお話しました。

そして、この クライアント から
サーバ に送られるデータを…

リクエストパラメータ

といいます。

リクエストパラメータが送られる時には、必ず…

「パラメータ名」と「値」がセットになっています。

この例では、name というパラメータ名 で
「たかはし」という値が送られて…

gender というパラメータ名で
「男」という値が送られます。

イメージ的には…

変数名と その値

という感じですね。

次に、リクエストパラメータの
送信方法について 見ていきましょう。

前回お話した、GETリクエストと POSTリクエストで
リクエストパラメータの送り方が違います。

GETリクエストの場合には
このように URLの最後に付加されます。

URLの後に 「 ? 」をつけて、その後に
パラメータ名=値のセットで指定します。

複数のパラメータがある場合
パラメータとパラメータの間は 「 & 」 で区切ります。

フォームで送信した場合でも、Webブラウザの
アドレスバーには、この形式で表示される事となります。

これに対して…

POSTリクエストの場合には
リクエストボディに格納して 送信されます。

内部的なデータとして送信される、ということですね。

GETリクエストと POSTリクエストの使い分け としては…

GETリクエストは、送信したURL(パラメータを含む)を
保存して使う場合(ブックマークやURL共有) が考えられます。

POSTリクエストは、データをアドレスバーに表示させたく
ない場合(個人情報や機密情報の送信)が挙げられます。

【3】 フォーム部品

フォームは HTML の <form> タグで 囲んで 作成します。

フォームを作成しておくと…

囲んだ範囲の データ を
ひとまとまり として サーバに送信できます。

リクエストパラメータの形で 送信します。

各リクエストパラメータ送信のために
フォーム部品(コントロール)を使用します。

代表的な フォーム部品として…

【代表的なフォーム部品】
① テキストボックス
② パスワードボックス
③ ラジオボタン
④ チェックボックス
⑤ セレクトボックス
⑥ 送信ボタン

こういった部品があります。

HTMLの中では、form 要素の 子要素 として
フォーム部品を記述することとなります。

ここでは、フォーム部品の基本的なHTML属性を
見ておきましょう。

まずは、type属性です。これは、部品の種類を表します。
テキストボックスとか、ラジオボタンなどの種類ですね。

name属性は、サーバに送るリクエストパラメータの
パラメター名です。
name属性は必須となります。

value属性は、リクエストパラメータの値です。

そして、部品によっては これら 各々の属性を
指定しない場合もあります。

彩香
私達が 利用する Webアプリの 画面も
フォーム部品の集まりなんですね。

早く 自分で書けるように 頑張ります。

剛留
HTML で フォーム部品を 書くことが
キーポイントになりそうですね。

HTMLの復習もしながら、進めていきます。

【4】 パラメータ取得

それでは 今度は、Webブラウザで入力して
サーバに送った リクエストパラメータを…

サーブレットで取得する方法を
見ていきましょう…。

サーブレットの
doGet()メソッド、doPost()メソッドは…

リクエストに関する情報 と レスポンスに
関する情報 を 引数 で受け取ります。

リクエストに関する情報は
HttpServletRequest型の request
レスポンスに関する情報は
HttpServletResponse型の response

です。

このうち、私たちは リクエストに関する情報
(requestという引数) を使って…

リクエストパラメータを 取得することとなります。

では、続いて リクエストパラメータの取得
2ステップを見ていきましょう。

① リクエストパラメータの文字コードを指定

request の setCharacterEncoding メソッドを
使って、引数で 文字コード体系を 指定します。

Webブラウザは リクエストパラメータを送る時に
エンコード(文字をコード化)して送ります。

サーバは、送られてきたリクエストパラメータを
元に戻して 文字として認識する必要がありますが…

Webブラウザで エンコードした 文字コードを
指定する必要があります。

今回は、UTF-8 を使っているので
サンプルプログラムではは UTF-8 を指定します。

…と、少々 難しく思えるかも知れませんが
最初は、コレはお決まりの処理… と考えてOKです。

② リクエストパラメータの値の取得

こちらは、2種類のパターンがあります

❶ パラメータ名に対して値が1つの場合

このパターンが一番多いわけですが…

この場合には、request の getParameter() メソッドを
使って、リクエストパラメータの値を取得します。

この時に、引数に渡すのは パラメータ名。
戻り値として、パラメータの値を文字列で取得できます。

❷ パラメータ名に対して値が2つ以上の可能性のある場合

この場合には、使うメソッドが変わります。
request の getParameterValues() メソッドを 使います。

そして、引数に渡すのは 同じく パラメータ名 ですが
戻り値を String型の配列で受け取ります。

複数の値(文字列)が返ってくる可能性が あるからですね。

なお、これらの メソッド
getParameter() getParameterValues() ともに…

該当パラメータが 送られてこなかった場合には
null を 戻り値として返します。

【まとめ】

【1】 フォーム
✅ フォームを使うと
  画面から入力したデータを
  サーバに送る事ができる。
【2】 パラメータ
リクエストパラメータは…

✅ Webブラウザから サーバに
  送られるデータ。

✅「パラメータ名」と「値」が
 セットになっている。

【3】 フォーム部品
代表的なフォーム部品

① テキストボックス
② パスワードボックス
③ ラジオボタン
④ チェックボックス
⑤ セレクトボックス
⑥ 送信ボタン

【4】 パラメータ取得
2ステップ

① リクエストパラメータの
  文字コードを指定

② リクエストパラメータの
  値の取得

 ❶ パラメータの値が1つ
  request.getParameter()

 ❷ パラメータの値が複数
  request.getParameterValues()