Servlet入門(2) 入力フォームをつかったWebアプリ

Servlet入門(2)
入力フォームをつかったWebアプリ
2004年5月20日発表
有田 直弘
CreW
Creative Workspace
前回までの復習
Webアプリケーションの様々な概念を学んだ
Webアプリケーション
Webアプリケーションサーバ
Tomcat
Servlet
Webアプリケーション作成の流れを学んだ
アプリケーションディレクトリ作成場所
フォルダ構成
サーブレット作成・コンパイル・配置
CreW
Creative Workspace
前回のイメージ
1.Tomcat ServerのseminarのHelloCreWを要求
サーバ
21番ポート:FTP Server
Web
Browser
25番ポート:SMTP Server
80番ポート:HTTP Server
8080番ポート:Tomcat Server
2.要求に対して返答する("HelloCreW"と表示する)
中で何をしているのだろう?
CreW
Creative Workspace
今回の目標(その1)
要求から返答までのTomcat Serverでの処
理の流れを説明できる
CreW
Creative Workspace
要求と返答の詳細(1)
Tomcat Server
サーバ
Servlet Container
21番ポート:FTP Server
25番ポート:SMTP Server
OPAS
IRC
80番ポート:HTTP Server
Seminar
8080番ポート:Tomcat Server
HelloCreW.class
拡大します
CreW
Creative Workspace
要求と返答の詳細(2)
1.ブラウザがWebサーバに接続し、HTTPリクエストを送信する
1.要求
8080番ポート:Tomcat Server
Http Request
GET /seminar/servlet/HelloCreW
HTTP/1.0
Web
Browser
Servlet Container
IRC
OPAS
Seminar
HelloCreW.class
CreW
Creative Workspace
要求と返答の詳細(3)
2.Tomcat Serverはリクエストを受け取り、Servlet
Containerに処理を委託する
1.要求
Http Request
GET /seminar/servlet/HelloCreW
HTTP/1.0
Web
Browser
8080番ポート:Tomcat Server
2.委託
Servlet Container
IRC
OPAS
Seminar
HelloCreW.class
CreW
Creative Workspace
要求と返答の詳細(4)
3.Servlet Containerは指定されたServletをRequest,Responseオ
ブジェクトを引数に指定し,実行する
1.要求
Http Request
GET /seminar/servlet/HelloCreW
HTTP/1.0
Web
Browser
8080番ポート:Tomcat Server
2.委託
IRC
Servlet Container
3.実行
OPAS
Seminar
HelloCreW.class
CreW
Creative Workspace
要求と返答の詳細(5)
4. ServletはRequestオブジェクトを介して要求を受け取り,処理をし,結果を
Responseオブジェクトを通してWeb Serverに返す
1.要求
Http Request
GET /seminar/servlet/HelloCreW
HTTP/1.0
Web
Browser
8080番ポート:Tomcat Server
2.委託
IRC
4.結果
Servlet Container
3.実行
OPAS
Seminar
HelloCreW.class
CreW
Creative Workspace
要求と返答の詳細(6)
5.Webサーバは処理結果をレスポンスとしてブラウザに返す
1.要求
Http Request
GET /seminar/servlet/HelloCreW
HTTP/1.0
Web
Browser
5.結果
8080番ポート:Tomcat Server
2.委託
IRC
Http Response
Header+
Body(<html>…
<h1>11:45 JST</h1>
…</html>)
4.結果
Servlet Container
3.実行
OPAS
Seminar
HelloCreW.class
CreW
Creative Workspace
要求と返答のまとめ
1.ブラウザがWebサーバに接続し、HTTPリクエストを送信する
2.Tomcat Serverはリクエストを受け取り、Servlet Containerに処理を委
託する
3.Servlet Containerは指定されたServletをRequest,Responseオブジェ
クトを引数に指定し,実行する
4. ServletはRequestオブジェクトを介して要求を受け取り,処理をし,結
果をResponseオブジェクトを通してWeb Serverに返す
5.Webサーバは処理結果をレスポンスとしてブラウザに返す
CreW
Creative Workspace
HelloCreWの欠点
このHelloCreWってWebアプリですか?
他のWebアプリケーションにあって,HelloCreWにな
いものは何でしょう?
CreW
Creative Workspace
人を幸せにするWebアプリ
コンセプトを付ける
ユーザからのメッセージを受け取り、何らかの処理
をして結果を返すインタラクティブなものにする
CreW
Creative Workspace
今回の目標(その2)
「入力→処理→出力」をするWebアプリケーション
が作れるようになる
フォーム(*注)を使って入力する仕組みを作れるように
なる
フォームから送信された入力情報を,Servletで取得で
きるようになる
Webアプリケーションにおける「入力→処理→出力」の
流れが説明できるようになる
今回,「処理」の部分はそれほどやりません
*注)フォーム(form)は「記入用紙」の意味で,Web関係ではユーザからの入力を受け
付けるテキストフィールドやチェックボックス,ラジオボックス,ボタン等のことを言いま
す
CreW
Creative Workspace
題材:「サブゼミ支援Webアプリ」
名前:
コンセプト:
「サブゼミ疑問解決掲示板」
概要:
授業外で生じた疑問を質問として掲示板に
投稿。投稿者の疑問を解決できると思う人が
回答を投稿する。
対象:
研究会のみんな
運営:
実際に、サブゼミを支援するために公開します。
みんなでいいものを作ろう!
授業外で生じた疑問をみんなで共有・解決し、
授業の理解を深めて、よりよいサブゼミにする。
CreW
Creative Workspace
画面遷移図
Webアプリの顔
トップページ
index.html
投稿画面
投稿の結果が
表示される
メッセージの送信
toukou.html
CreW
ToukouServlet
Creative Workspace
利用シナリオ
投稿者: 杉浦 学
タイトル: web.xmlの冒頭宣言に関する質問
内容:web.xmlの冒頭宣言はなんであんなに
長いんですか??
ちょっと気になったので質問してみました。
デモを見てみよう!!
CreW
Creative Workspace
シナリオの流れ
ApplicationServer
WebBrowser
GET toukou.html
<html> <head>
<title>投稿画面</title>…
GET ToukouServlet
投稿者=“杉浦学”…
杉浦 学
toukou.html
<html> <head>…
<h2>杉浦学さんの投稿</h2> …
ToukouServlet.class
CreW
Creative Workspace
実際に動かしてみよう!
サブゼミ支援アプリケーションを作成する
Tomcatを起動する
サブゼミ支援アプリケーションのトップペー
ジを表示する
何か疑問を投稿してみよう!
CreW
Creative Workspace
Webアプリの構造(復習)
Webアプリのディレクトリ構造を作って関連ファイルを入れ
ましょう(Webアプリ名は題材の例なので、自分のものに変えてもかまいませ
ん)
seminar
WEB-INF
classes
ToukouServlet.class
src
ToukouServlet.java
web.xml
html
index.html
toukou.html
CreW
Creative Workspace
メッセージ送信編
CreW
Creative Workspace
メッセージの入力から送信まで
ApplicationServer
WebBrowser
GET toukou.html
<html> <head>
<title>投稿画面</title>…
toukou.html
杉浦学
GET ToukouServlet
投稿者=“杉浦学”…
CreW
Creative Workspace
送信時に必要な情報(1)
送信時に入力した情報は何ですか?(具体的に)
杉浦 学
web.xmlの冒頭宣言に関する質問
web.xmlの冒頭宣言はなんであんなに長いんですか??
ちょっと気になったので質問してみました。
これら3つの情報をServer側が受け取った時に,
どれが投稿者の情報なのか分かりません.どうし
たら解決できるでしょう?
CreW
Creative Workspace
送信時に必要な情報(2)
複数の情報を識別するためにデータ名(Key)を付けます.ま
た,Keyに対する具体的な値をこれからはValueと呼びます.
Key
投稿者
Value
杉浦 学
Key
タイトル
Value
web.xmlの冒頭宣言に
関する質問
Key
内容
Value
web.xmlの冒頭宣言はなんであんなに長いんですか??
ちょっと気になったので質問してみました。
この概念はフォームの入力部品を作成するときに重要になります
CreW
Creative Workspace
メッセージを送信するHTMLフォーム
HTMLフォームを作成するには主に3つの設定をします
1.フォームを宣言する
2.入力部品を作る
3.送信のための部品を作る
CreW
Creative Workspace
HTMLフォームを使う(1)
HTMLフォームの宣言方法
<form method=“get” action=“../servlet/ToukouServlet”>
</form>
フォームの情報の送信先
<form>タグ内に各部品を設定する
CreW
Creative Workspace
HTMLフォームを使う(2)
メッセージを入力するための部品の作成方法
<input type= " text " name= " contributor " size= " 20 " />
Key
contributor(投稿者)
Value
Key
content(内容)
Value
<textarea name= " content " cols="50" rows="10" />
CreW
Creative Workspace
HTMLフォームを使う(3)
メッセージを送信するための部品
<input type= " submit " value= "投稿" >
"submit"ボタンは,<form>タグに書かれたaction先へ
フォームの情報を送信します.
情報を消去する部品(任意に設定します)
<input type= " reset " value= "リセット" >
"reset"ボタンは,フォームの情報を消去します.
CreW
Creative Workspace
メッセージ送信編 終了
質問どうぞ~
CreW
Creative Workspace
メッセージ受信編
CreW
Creative Workspace
メッセージの受信から返答まで
ApplicationServer
WebBrowser
GET ToukouServlet
投稿者=“杉浦学”
<html> <head>…
<h2>杉浦学さんの投稿</h2> …
杉浦学
ToukouServlet.class
CreW
Creative Workspace
送られてきたメッセージ
Tomcatには以下の情報が送信されます.Tomcatはこの情報
からKeyとValueの対応表を作成します.
Key
contributor
Value
杉浦 学
Key
title
Value
web.xmlの冒頭宣言に
関する質問
Key
content
Value
web.xmlの冒頭宣言はなんであんなに長いんですか??
ちょっと気になったので質問してみました。
CreW
Creative Workspace
ハッシュテーブルとは
鍵(Key)と値(Value)からなる表です(詳しい説明は省略します)
Keyから特定のValueを取得できます
今回の場合…
<input>タグで指定したnameの値がKeyになります
テキストフィールド等に入力された文字列がValueになります
Key
Value
contributor
杉浦 学
title
web.xmlの冒頭宣言
content
web.xmlの冒頭宣言はなんで…
CreW
Creative Workspace
サーブレットの説明
//送信されたメッセージが格納されたハッ…
request.setCharacterEncoding("Shift_JIS");
String contributor = request.getParameter("contributor");
String title = request.getParameter("title");
String content = request.getParameter("content");
//結果を出力する
response.setContentType("text/html;charset=Shift_JIS");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<hr>");
out.println("<b><font size=4>" + contributor + "さんの投稿</font></b>");
out.println("(投稿時刻:" + new Date() + ")");
out.println("<br/>");
out.println("<p><font size=5>" + title + "</font></p>");
out.println("<hr>");
out.println("<p>" + content + "</p>");
out.println("<hr>");
out.println("</body>");
out.println("</html>");
out.close();
メッセージを
受け取る部分
HTMLを生成する
部分
CreW
Creative Workspace
送信された文字のエンコーディング
ブラウザから入力された情報で,日本語の
ような2バイト文字を取得する場合にはエン
コーディングが必要です
これにより文字化けを防ぐことができます
request.setCharacterEncoding("Shift_JIS");
CreW
Creative Workspace
メッセージの取得方法
送信されたメッセージが格納されたハッシュテーブルから,
Keyを指定してValueを取得し,変数に代入する
例えば,変数contributorには"杉浦 学"といった値が代入さ
れます
Key
Value
contributor
杉浦 学
title
web.xmlの冒頭宣言
content
web.xmlの冒頭宣言
はなんで…
String contributor = request.getParameter("contributor");
String title = request.getParameter("title");
String content = request.getParameter(“content");
CreW
Creative Workspace
送信される文字のエンコーディング
ブラウザへの出力に,日本語のような2バイト文字
を出力する場合にはエンコーディングが必要です
これにより文字化けを防ぐことができます
response.setContentType("text/html;charset=Shift_JIS");
CreW
Creative Workspace
ブラウザに出力する
ResponseクラスのgetWriter()メソッドによって,出力するため
のPrintWriterオブジェクトを取得できます
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<hr>");
out.println("<b><font size=4>" + contributor + "さんの投稿</font></b>");
out.println("(投稿時刻:" + new Date() + ")");
out.println("<br/>");
out.println("<p><font size=5>" + title + "</font></p>");
out.println("<hr>");
out.println("<p>" + content + "</p>");
out.println("<hr>");
out.println("</body>");
out.println("</html>");
CreW
Creative Workspace
メッセージ受信編 終了
質問どうぞ~
CreW
Creative Workspace
今回の目標(その3)
GETとPOSTの違いが説明できるようにな
る
CreW
Creative Workspace
現在の掲示板の欠点
現在の掲示板に,大量の文字を入力して送信し
て下さい.何が起こるでしょうか.
大量の文字を送信できない原因は,Tomcatへの
送信方法に問題があります.現在は,GETという
方法によって送信しています.
CreW
Creative Workspace
GETとは?
GETはリクエストのメソッドの1つです
GETはブラウザから指定したファイルを得るため
に,Serverに問合わせる際に使用します
便利な場合があるので,GETによってファイルを
得る際に,多少情報を付加してServerに問合わ
せることができます
ただし,GETによって送れるデータ量には限界が
あります(データ量はServerやクライアントに依存します)
CreW
Creative Workspace
POSTとは?
ブラウザ側からサーバへ,データ量に制限なく送
るためにPOSTがあります
それでは,実際に掲示板をPOSTに変更して,大
量の文字を投稿しましょう
送信方法をPOSTにするために,<form>タグの
method="get"をmethod="post"に変更します
サーブレットがPOSTに対して処理を行うために,
doGet()メソッドをdoPost()メソッドに変更します
CreW
Creative Workspace
GETとPOSTの違い
GETは,サーバへ送信できるデータ量に制
限がある(POSTは制限がない)
GETは,送信されるデータがURLに加わり
送信される(POSTは加わらない)
移動するURLをユーザに知らせたくない場合に
POSTが用いられる→セキュリティ強化
CreW
Creative Workspace
では,実習です
テキストボックス、テキストエリア以外のHTMLフォーム部
品を掲示板に加えてください。投稿結果画面にも反映させ
てください(例:Webアプリに「質問」、「回答」選択欄)
CreW
Creative Workspace
補足資料 ~HTMLフォーム部品~
text-テキストボックス
textarea-テキストエリア
radio-ラジオボタン
checkbox-チェックボックス
select-リストボックス
submit-送信ボタン
reset-リセットボタン
その他password、hidden
*「とほほWWW入門」に詳細なHTMLリファレンスがあります
http://tohoho.wakusei.ne.jp/www.htm
CreW
Creative Workspace
お疲れ様でした!!!
今後は、今回作ったWebアプリを拡張していきま
す。
次回は投稿をファイルに保存する方法を学びま
す。わくわくo(^-^)o
CreW
Creative Workspace