【コラム】
もっとも簡単にパラメータを渡す方法はGETを使う方法だ。URLに?からはじまる文字列が付随することがあるが、これがGETでパラメータとして処理される。
リスト1.1はGETで渡されてくるパラメータをHTMLに加工して出力するServletだ。HttpServletRequest#getParameterNames()でパラメータ一覧が取得できるから、ここから値一覧を取り出して、HttpServletRequest#getParameter(String)を使ってひとつひとつ値を取り出している。パラメータはHttpServletRequestから取得できると覚えておこう。
実行例が図1.3と図1.4だ。パラメータを何も渡さなければ、図1.3のように何も表示されない。「http://localhost:8080/paramtest/Params?id=510&name=dai&num=10」のように「idとして510」「nameとしてdai」「numとして10」を指定して呼び出した場合、図1.4のようにパラメータの内容が表示される。
|
|
図1.3 引数を何も指定しないと何も表示されない |
|
|
図1.4 URLにパラメータを指定する方法(GET)で値を渡すと、渡した引数が表示される |
実際のServletプログラミングでは、取り出したパラメータに応じて処理を実施したり、セッションインスタンスにパラメータの値を保存して次のServletに処理を託すといったことを実施する。
次はPOSTを処理する方法を紹介する。まず、POSTでパラメータを送信するためのHTML文書を作成する。たとえばリスト2.1のように作成すればいいだろう。form要素の属性methodの値が「POST」になっている点に注意してほしい。ここをGETにするとGETで送信が試みられる。action属性で処理するServletを指定しておく。
作成したHTML文書だが、たとえば図2.2のようにデプロイすればいい。WEB-INF以下はデプロイ方法が定まっているため、通常はWEB-INF以外のディレクトリにHTML文書やリソースをデプロイする。たとえば図2.2の場合、WEB-INFと同じレベルにhtmlというディレクトリを作成し、そこにHTML文書をデプロイしている。
|
|
2.2 HTML文書などはたとえばWEB-INFと同じレベルにディレクトリを作成してそちらにデプロイする |
Servletにおける処理は基本的にGETの場合と同じになる。このため、リスト1.1にリスト2.3のメソッドを追加しておく。これでPOSTでやってくる処理内容はすべてdoGet(ttpServletRequest, HttpServletResponse)で処理されるようになる。
実行例は図2.4と図2.5の通り。POSTでパラメータを渡した場合も、GETと同じように処理できることがわかる。
|
|
図2.4 HTMLからPOSTでサーブレットに処理を渡す |
|
|
図2.5 POSTで渡したパラメータも同様に処理される |
Servlet APIの観点からすると、GETでやってくる処理もPOSTでやってくる処理も、かわりがない。しかし、使い分けるためのいくつかの指針はある。GETは基本的に1回の送信で結果を得るために使うことが多く、パラメータとして指定できる値には長さに上限がある。一方、POSTはデータを送信する目的が強く、比較的長いデータを送信する場合に適している。こうした性格による適材適所というのはあるだろう。
Servletでパラメータを渡す場合に問題になるのが、日本語の符号化形式についてだ。ここではフォーム入力を実施するHTML、Servletでパラメータを受ける場合、Servletから出力するHTML、のすべてにおいてUTF-8を指定している。基本的に、すべてにおいて適切にエンコーディングを指定しておくこと、これを守るようにしたい。
特にリスト4.2のようにHttpServletRequestにおいてエンコーディング形式を指定することを忘れないようにしたい。でないと、思っているように値が処理されないことがある。
特殊文字など、エンコーディング変換が実施されると好ましくない場合など、処理する必要があるエンコーディングですべて統一しておくといった方法が無難だ。
| Skype for Linux 4.2登場 [20:56 5/22] |
| 資生堂、D-アミノ酸の新たな美肌効果を発見 - 化粧品に応用 [19:02 5/22] |
| Cypress、「PSoC 1」用IDE「PSoC Designer」の新バージョンを発表 [16:16 5/22] |
| SCREEN、プリント基板向け直接描画装置の高精細モデルを発表 [16:08 5/22] |
| 東北大、顔料からの有限長カーボンナノチューブ分子の合成に成功 [15:52 5/22] |
|
人気の青汁を試してみたい。青汁売れ筋5種 [22:30 5/22] ライフ |
|
[東京スカイツリー]1周年の夜を彩る記念ライティング 1年分12種類を一夜で [22:22 5/22] エンタメ |
|
[HKT48指原莉乃]第5回総選挙 初女王へ首位発進で「夢ですか?」 [22:13 5/22] エンタメ |
|
[太田莉菜]ルイ・ヴィトンのセクシーなワンピース姿で登場 平井理央は初音ミクファッション [22:13 5/22] エンタメ |
|
ロジクール、360度音が広がる耐水仕様の円柱型ワイヤレススピーカー [22:10 5/22] 携帯 |