データの受け渡し

データの受け渡しーGETー


はじめに


なんらかのホームページを見たいとき、検索して送信すればホームページが表示されます。
何の変哲もない動作ですが、実はこの数秒間の間に、

1. Webクライアントのアドレスバーに、"http://〇〇〇〇.com" が入力される。
2. Webクライアントは、"〇〇〇〇.com" のIPアドレスを調べる。
3. Webクライアントは、"〇〇〇〇.com" にあるホームページの要求を出す。
4. 要求はインターネットを伝わり、"〇〇〇〇.com" のWebサーバーに到達する。
5. 要求を受け取ったWebサーバーはそのハードディスクからWebページを探す。
6. サーバーはそのWebページを取得し、それをWebクライアントに返す。
7. WebクライアントがWebページを表示する。

という処理が動いています。
このwikiページを閲覧するときにも行われています。

WebクライアントとWebサーバーの間で行われているやり取りについて学んでいきましょう。

Step1: 概念を知る


HTTP(Hypertext Transfer Protocol)
WebクライアントとWebサーバー間の、要求(リクエスト)と応答(レスポンス)を制御している通信規格。
WebクライアントとWebサーバー間通信の約束事(プロトコル)。
GET(メソッド)
HTTPのメソッドの一つ。
ホームページのサーバから情報を取得してくる時に使用する。
値をリクエストURLの後に付け加えてサーバに送る。
単にGETといったり、GETメソッドと呼ばれることがある。

Step2: 使い方を知る


URL
突然ですが、以下のようなURLを見たことがあるでしょうか?

ログイン用URL(パスワードを入力して専用ページにログインする)
https://○○○○.jp/login.php?lang=ja&args=

見たことがないという人は、様々なホームページを閲覧しているときに意識してみましょう。
Webクライアントや設定によっても変わりますが、だいたい画面の上部か左下に表示されています。

どのような構成になっているかと言いますと、

https :// ○○○○.jp / login.php ? lang = ja & args=
プロトコル :// ドメイン / 表示ファイル名 ? パラメータ = データ & パラメータ = なし
※わかりやすくするためにスペースを入れています。

となっていて、どのURLもだいたいこのような構成になっています。
今回取り上げる部分は、 ? 以降の パラメータ と データ の部分です。
パラメータ、データ
WebクライアントからWebサーバへ、パラメータにデータを入れて渡すことによって、リクエストを行います。
渡されたデータによってWebサーバは何らかのレスポンスを行います。
ログイン用URLを見ると、 パラメータ = なし となっている部分がありました。
なし の部分にデータを入れてパラメータとして渡すと、データに誤りがなければログインが成功します。

https://○○○○.jp/login.php?lang=ja&args=password

パラメータ部分に直接データを入力してリクエストする方法が GET送信 です。
GET送信の注意点
GET送信の方法は、パラメータが明示的というのが特徴です。
そのため以下のようなメリット、デメリットがあります。

・メリット
パラメータを見れば、ページの遷移や、行われている処理がわかる。
・デメリット
パスワードなど個人情報であっても筒抜けになってしまう。

パラメータの取得
パラメータはソースコード上で取り出すことができます。
HttpServletRequestインタフェースの、 requestオブジェクト を使用してパラメータを読み込みます。
パラメータを読み込むには、 getParameter ()メソッド を使用します。

String value = request.getParameter("args");

データの受け渡しーPOSTー


はじめに


先ほどはGET送信について学習しました。
GET送信はURLが明示的でわかりやすい反面、
データが誰にでも閲覧可能という注意点がありました。
そんな注意点を考慮したデータの送信方法がPOST送信です。

Step1: 概念を知る


POST(メソッド)
HTTPのメソッドの一つで、以下のような特徴があります。
  • サーバからの情報取得時に使用
  • パラメーター等の値がリクエストURLには表示されず、メッセージボディに格納される
  • GET送信よりも多くのデータ量を扱える
  • バイナリーデータ(2進数)が送信可能

Step2: 使い方を知る


内容に入る前に、前回の復習です。

https :// ○○○○.jp / login.php ? lang = ja & args=
プロトコル :// ドメイン / 表示ファイル名 ? パラメータ = データ & パラメータ = なし
※わかりやすくするためにスペースを入れています。

どのURLもだいたいこのような構成になっているということを学びました。
今回も取り上げる部分は、 ? 以降の パラメータ と データ の部分です。

GET送信の際は、 = 以降に直接値を入力しました。
一方、POST送信はパスワードなど、明示的にすべきでないもののデータの送信を行う際に使用するため、
特にパラメータに対して値を入力するということはありません。
GET送信との違いがわかればここでは問題ありません。
パラメータの取得
パラメータの取得はGET送信の時と同じです。
こちらも前回の復習となります。

String value = request.getParameter("args");

今回はもう1つ学んでいきます。
上記の方法では、1つの引数 ("args")に対して1つの値を取得しますが、
1つの引数に対して複数の値が送られてくることもあります。
その際に使用するのが getParameterValues メソッドです。
複数の値が返されるので、配列を宣言しています。

String values[] = request.getParameterValues("args");

【サンプル: チェックボックス】
html/jsp

// スポーツのチェックボックス
<form action="送信先" method="post">
    <input type="checkbox" name="sports" value="tennis" />テニス
    <input type="checkbox" name="sports" value="baseball" />野球
    <input type="checkbox" name="sports" value="football" />サッカー
    <input type="checkbox" name="sports" value="basketball" />バスケットボール
    <input type="checkbox" name="sports" value="table_tennis" />卓球
    <input type="submit" value="送信" />
</form>

java

// 各チェックボックスのvalueの値が取得可能です
String sports[] = request.getParameterValues("sports");

おまけ


POST送信は、基本的には人の目に見えないところにデータが格納され送信されますが、
リクエストを構成している要素の一つである、メッセージボディに格納されています。

/* リクエストライン */
POST /hoge/ HTTP/1.1

/* リクエストヘッダ */
Host: localhost:○○○○
Connection: keep-alive
Content-Length: 22
Cache-Control: max-age=0
Origin: http://localhost:○○○○
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) Chrome/54.0.○○○○.98
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://localhost:○○○○/home/
Accept-Encoding: gzip, deflate, br
Accept-Language: ja,en-US;q=0.8,en;q=0.6

/* メッセージボディ */
lang=ja&args=password

カテゴリー

アーカイブ

Close Bitnami banner
Bitnami