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

Slides:



Advertisements
Similar presentations
ネットワークプログ ラミング論 平成27年 11 月 1 6日 森田 彦. 【基礎課題 6-1 】の解答 ① サーブレットを記述して保管するとコン パイルが自動的に行われる。 ② サーブレットの記述後、開発者がコンパ イル命令を実行しなければならない。 ③ プロジェクト名が Web アプリケーション.
Advertisements

Web アプリケーション開発入門 大岩研究会 今野隆平 2002 年 5 月 9 日 Introduction to Web Application Development.
Servlet にメッセージを送ろ う! 杉浦学・山下純一・北川敦規 今日の目標です サーブレットとブラウザのメッセージ 送受信 ブラウザでサーブレットにメッセージを送信で きる サーブレットでメッセージを受信できる 実習で実際にアプリを作れるようにな る.
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 22 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明 准教授等による以前の講義資料をもとにしています。
情報基礎演習I(プログラミング) 第9回 6月22日 水曜5限 江草由佳
ASP入門 - Windows 2000 Server 活用 -.
Webアプリケーションの 通信メカニズム WEBアプリ研究プロジェクト 第2回.
JPAを利用した RESTful Webサービスの開発
エンタープライズアプリケーション II 第10回 / 2006年7月23日
Servlet J2EE I 第8回 /
Servlet入門(2) 入力フォームをつかったWebアプリ
ネットワークプログラミング論 平成27年10月12日 森田 彦.
Digital Network And Communication
JavaServlet&JSP入門 01K0018 中村太一.
メールの利用 計算機実習室でThunderbird.
第4回 個人の動画配信補足のためのWeb構築
Bottle/Pythonによる Webアプリ入門
セッション管理 J2EE I 第9回 /
ビューとコントローラ.
HTTPプロトコルとJSP (1) データベース論 第3回.
Webを利用した授業支援システムの開発 北海道工業大学 電気電子工学科 H 渋谷 俊彦.
JQueryでAjax 藤田@ジャストプレイヤー ※参考しまくり文献 jQuery日本語リファレンス.
Curlの仕組み.
JSFによるWebアプリケーション開発 第6回
HTTPプロトコル J2EE I 第7回 /
経済学のための情報処理 ホームページの作成.
JSPの作成 J2EE II 第3回 2005年4月10日.
ネットワークプログラミング論 平成28年10月17日 森田 彦.
ServletによるWebアプリ作成 入門
利用者を識別するWebアプリ を作ろう! 2004年6月10日 武田林太郎.
データベース設計 第9回 Webインタフェースの作成(1)
データベースとJavaをつなげよう! ~JDBC~
情報アプリケーション1 2006年 10月 5日 第三回資料 担当 重定 如彦 .
QuestionnairToolの開発 中村太一.
第8章 Web技術とセキュリティ   岡本 好未.
ネットワークプログラミング論 平成28年11月21日 森田 彦.
データベースを使ったプログラミング ~JDBCを使ってみよう~
TomcatによるWebアプリケーション開発入門
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
総合政策学部4年 伊藤玲子 総合政策学部4年 阿部雅美 +CreWな皆様
第二回 VB講座 電卓を作ろう.
Webアプリケーションの方向性 データベース論 第13回.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
ネットワークプログラミング論 平成28年11月7日 森田 彦.
Javaによる Webアプリケーション入門 第6回
ネットワークプログラミング論 平成28年10月31日 森田 彦.
WEBアプリケーションの開発 2002年度春学期 大岩研究会2.
制作技術ー3 双方向通信 : CGIシステムと環境変数
Jakarta Struts (2) ソフトウェア特論 第11回.
Javaによる Webアプリケーション入門 第2回
情報アプリケーション1 2006年 10月 19日 第四回資料 担当 重定 如彦 .
ネットワークプログラミング (5回目) 05A1302 円田 優輝.
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
Javaによる Webアプリケーション入門 第11回
コンピュータ プレゼンテーション.
Servlet ソフトウェア特論 第7回.
Servlet J2EE I (データベース論) 第12回 /
Servlet データベース論 第6回.
人を幸せにするアプリケーションの開発 2004年度春学期 大岩研究プロジェクト2 2004年4月8日(木) 発表:武田林太郎.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
Javaによる Webアプリケーション入門 第8回
Javaによる Webアプリケーション入門 第4回
WebアプリケーションとTomcat ― これまでの復習とこれからの予習 ―
JSPの基本 データベース論 第2回.
Jakarta Struts (1) ソフトウェア特論 第10回.
JSPの基本 J2EE I (データベース論) 第8回 /
データベース第3回目 意味ごとにテーブルを分ける
HTTPプロトコルの詳細 M1 峯 肇史.
Presentation transcript:

Servlet入門(2) 入力フォームをつかったWebアプリ 2004年5月20日発表 有田 直弘

前回までの復習 Webアプリケーションの様々な概念を学んだ Webアプリケーション作成の流れを学んだ Webアプリケーション Tomcat Servlet Webアプリケーション作成の流れを学んだ アプリケーションディレクトリ作成場所 フォルダ構成 サーブレット作成・コンパイル・配置 -次のことを質問して理解度を確認して下さい Q:Webアプリ用ディレクトリはどこに作成するか→webapps以下 Q:フォルダ構成で必要なもの→WEB-INF/classes,(web.xml) Q:コンパイル後に必要な操作は→Tomcat Managerを使って,Webアプリケーションを再ロードする

前回のイメージ Web Browser 21番ポート:FTP Server 25番ポート:SMTP Server 1.Tomcat ServerのseminarのHelloCreWを要求 サーバ 21番ポート:FTP Server 25番ポート:SMTP Server 80番ポート:HTTP Server 8080番ポート:Tomcat Server Web Browser -要求するための手段を確認しましょう→http://localhost:8080/seminar/HelloCreW - http://localhost:8080/seminar/HelloCreWのどの部分が何を意味しているか確認しましょう 2.要求に対して返答する("HelloCreW"と表示する) 中で何をしているのだろう?

今回の目標(その1) 要求から返答までのTomcat Serverでの処理の流れを説明できる

要求と返答の詳細(1) 21番ポート:FTP Server 25番ポート:SMTP Server 80番ポート:HTTP Server Tomcat Server Seminar OPAS IRC HelloCreW.class Servlet Container サーバ 21番ポート:FTP Server 25番ポート:SMTP Server 80番ポート:HTTP Server 8080番ポート:Tomcat Server 拡大します

1.ブラウザがWebサーバに接続し、HTTPリクエストを送信する 要求と返答の詳細(2) 1.ブラウザがWebサーバに接続し、HTTPリクエストを送信する Http Request GET /seminar/servlet/HelloCreW HTTP/1.0 1.要求 8080番ポート:Tomcat Server Seminar OPAS IRC HelloCreW.class Servlet Container Web Browser

要求と返答の詳細(3) Web Browser 2.Tomcat Serverはリクエストを受け取り、Servlet Containerに処理を委託する Http Request GET /seminar/servlet/HelloCreW HTTP/1.0 1.要求 8080番ポート:Tomcat Server Seminar OPAS IRC HelloCreW.class Servlet Container 2.委託 Web Browser

要求と返答の詳細(4) Web Browser 3.Servlet Containerは指定されたServletをRequest,Responseオブジェクトを引数に指定し,実行する Http Request GET /seminar/servlet/HelloCreW HTTP/1.0 1.要求 8080番ポート:Tomcat Server Seminar OPAS IRC HelloCreW.class Servlet Container 2.委託 Web Browser 3.実行

要求と返答の詳細(5) Web Browser 4. ServletはRequestオブジェクトを介して要求を受け取り,処理をし,結果をResponseオブジェクトを通してWeb Serverに返す Http Request GET /seminar/servlet/HelloCreW HTTP/1.0 1.要求 8080番ポート:Tomcat Server Seminar OPAS IRC HelloCreW.class Servlet Container 2.委託 Web Browser 3.実行 4.結果

5.Webサーバは処理結果をレスポンスとしてブラウザに返す 要求と返答の詳細(6) 5.Webサーバは処理結果をレスポンスとしてブラウザに返す Http Request GET /seminar/servlet/HelloCreW HTTP/1.0 1.要求 8080番ポート:Tomcat Server Seminar OPAS IRC HelloCreW.class Servlet Container 2.委託 Web Browser 3.実行 Http Response Header+ Body(<html>… <h1>11:45 JST</h1> …</html>) 5.結果 4.結果

要求と返答のまとめ 1.ブラウザがWebサーバに接続し、HTTPリクエストを送信する 2.Tomcat Serverはリクエストを受け取り、Servlet Containerに処理を委託する 3.Servlet Containerは指定されたServletをRequest,Responseオブジェクトを引数に指定し,実行する 4. ServletはRequestオブジェクトを介して要求を受け取り,処理をし,結果をResponseオブジェクトを通してWeb Serverに返す 5.Webサーバは処理結果をレスポンスとしてブラウザに返す

HelloCreWの欠点 このHelloCreWってWebアプリですか? 他のWebアプリケーションにあって,HelloCreWにないものは何でしょう? -2番目の質問に対しては色々と考えてみましょう (例:コンセプトがない,入力するものがない,動的でない,つまらない)

人を幸せにするWebアプリ コンセプトを付ける ユーザからのメッセージを受け取り、何らかの処理をして結果を返すインタラクティブなものにする

今回の目標(その2) 「入力→処理→出力」をするWebアプリケーションが作れるようになる フォーム(*注)を使って入力する仕組みを作れるようになる フォームから送信された入力情報を,Servletで取得できるようになる Webアプリケーションにおける「入力→処理→出力」の流れが説明できるようになる 今回,「処理」の部分はそれほどやりません -「入力→処理→出力」は,アプリケーションの基本的な流れです -「入力→処理→出力」は,人を幸せにするアプリケーションには不可欠です *注)フォーム(form)は「記入用紙」の意味で,Web関係ではユーザからの入力を受け付けるテキストフィールドやチェックボックス,ラジオボックス,ボタン等のことを言います

題材:「サブゼミ支援Webアプリ」 名前: 「サブゼミ疑問解決掲示板」 コンセプト: 概要: 対象: 運営: 授業外で生じた疑問をみんなで共有・解決し、 授業の理解を深めて、よりよいサブゼミにする。 概要: 授業外で生じた疑問を質問として掲示板に 投稿。投稿者の疑問を解決できると思う人が 回答を投稿する。 対象: 研究会のみんな 運営: 実際に、サブゼミを支援するために公開します。 みんなでいいものを作ろう!

画面遷移図 Webアプリの顔 トップページ 投稿の結果が index.html 表示される 投稿画面 メッセージの送信 ToukouServlet 投稿の結果が 表示される index.html toukou.html 投稿画面 メッセージの送信

利用シナリオ 投稿者: 杉浦 学 タイトル: web.xmlの冒頭宣言に関する質問 内容:web.xmlの冒頭宣言はなんであんなに 長いんですか?? ちょっと気になったので質問してみました。 デモを見てみよう!!

シナリオの流れ GET toukou.html <html> <head> WebBrowser ApplicationServer GET toukou.html <html> <head> <title>投稿画面</title>… toukou.html GET ToukouServlet 投稿者=“杉浦学”… 杉浦 学 <html> <head>… <h2>杉浦学さんの投稿</h2> … ToukouServlet.class

実際に動かしてみよう! サブゼミ支援アプリケーションを作成する Tomcatを起動する サブゼミ支援アプリケーションのトップページを表示する 何か疑問を投稿してみよう!

Webアプリの構造(復習) Webアプリのディレクトリ構造を作って関連ファイルを入れましょう(Webアプリ名は題材の例なので、自分のものに変えてもかまいません) seminar WEB-INF classes web.xml index.html html ToukouServlet.class toukou.html src ToukouServlet.java

メッセージ送信編

メッセージの入力から送信まで GET toukou.html <html> <head> WebBrowser ApplicationServer GET toukou.html <html> <head> <title>投稿画面</title>… toukou.html GET ToukouServlet 投稿者=“杉浦学”… 杉浦学

送信時に必要な情報(1) 送信時に入力した情報は何ですか?(具体的に) 杉浦 学 web.xmlの冒頭宣言に関する質問 web.xmlの冒頭宣言はなんであんなに長いんですか?? ちょっと気になったので質問してみました。 これら3つの情報をServer側が受け取った時に,どれが投稿者の情報なのか分かりません.どうしたら解決できるでしょう? -2つの質問を聞いて下さい -1つ目の質問を聞いた時に,投稿者,タイトルといった抽象的なことを答えたら,具体的に入力した値を聞いて下さい

この概念はフォームの入力部品を作成するときに重要になります 送信時に必要な情報(2) 複数の情報を識別するためにデータ名(Key)を付けます.また,Keyに対する具体的な値をこれからはValueと呼びます. Key タイトル Value web.xmlの冒頭宣言に関する質問 Key 投稿者 Value 杉浦 学 Key 内容 Value web.xmlの冒頭宣言はなんであんなに長いんですか?? ちょっと気になったので質問してみました。 この概念はフォームの入力部品を作成するときに重要になります

メッセージを送信するHTMLフォーム HTMLフォームを作成するには主に3つの設定をします 1.フォームを宣言する 2.入力部品を作る 3.送信のための部品を作る

<form>タグ内に各部品を設定する HTMLフォームを使う(1) HTMLフォームの宣言方法 <form method=“get” action=“../servlet/ToukouServlet”> </form> フォームの情報の送信先 <form>タグ内に各部品を設定する

HTMLフォームを使う(2) メッセージを入力するための部品の作成方法 <input type= " text " name= " contributor " size= " 20 " /> Key contributor(投稿者) Value Key content(内容) Value <textarea name= " content " cols="50" rows="10" />

HTMLフォームを使う(3) メッセージを送信するための部品 情報を消去する部品(任意に設定します) <input type= " submit " value= "投稿" > "submit"ボタンは,<form>タグに書かれたaction先へ フォームの情報を送信します. 情報を消去する部品(任意に設定します) <input type= " reset " value= "リセット" > "reset"ボタンは,フォームの情報を消去します.

メッセージ送信編 終了 質問どうぞ~

メッセージ受信編

メッセージの受信から返答まで GET ToukouServlet 投稿者=“杉浦学” <html> <head>… WebBrowser ApplicationServer GET ToukouServlet 投稿者=“杉浦学” <html> <head>… <h2>杉浦学さんの投稿</h2> … 杉浦学 ToukouServlet.class

送られてきたメッセージ Tomcatには以下の情報が送信されます.Tomcatはこの情報からKeyとValueの対応表を作成します. Key title Value web.xmlの冒頭宣言に関する質問 Key contributor Value 杉浦 学 Key content Value web.xmlの冒頭宣言はなんであんなに長いんですか?? ちょっと気になったので質問してみました。

ハッシュテーブルとは Key Value 鍵(Key)と値(Value)からなる表です(詳しい説明は省略します) 今回の場合… <input>タグで指定したnameの値がKeyになります テキストフィールド等に入力された文字列がValueになります Key Value contributor 杉浦 学 title web.xmlの冒頭宣言 content web.xmlの冒頭宣言はなんで…

サーブレットの説明 メッセージを 受け取る部分 HTMLを生成する 部分 //送信されたメッセージが格納されたハッ… 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("<p>" + content + "</p>"); out.println("</body>"); out.println("</html>"); out.close(); メッセージを 受け取る部分 HTMLを生成する 部分

ブラウザから入力された情報で,日本語のような2バイト文字を取得する場合にはエンコーディングが必要です 送信された文字のエンコーディング ブラウザから入力された情報で,日本語のような2バイト文字を取得する場合にはエンコーディングが必要です これにより文字化けを防ぐことができます request.setCharacterEncoding("Shift_JIS");

メッセージの取得方法 送信されたメッセージが格納されたハッシュテーブルから,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");

送信される文字のエンコーディング ブラウザへの出力に,日本語のような2バイト文字を出力する場合にはエンコーディングが必要です これにより文字化けを防ぐことができます response.setContentType("text/html;charset=Shift_JIS");

ブラウザに出力する 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("<p>" + content + "</p>"); out.println("</body>"); out.println("</html>"); -getWriter()やPrintWriterについては,おまじない程度に覚えてくれれば良いです

メッセージ受信編 終了 質問どうぞ~

今回の目標(その3) GETとPOSTの違いが説明できるようになる

現在の掲示板の欠点 現在の掲示板に,大量の文字を入力して送信して下さい.何が起こるでしょうか. 大量の文字を送信できない原因は,Tomcatへの送信方法に問題があります.現在は,GETという方法によって送信しています.

GETとは? GETはリクエストのメソッドの1つです GETはブラウザから指定したファイルを得るために,Serverに問合わせる際に使用します 便利な場合があるので,GETによってファイルを得る際に,多少情報を付加してServerに問合わせることができます ただし,GETによって送れるデータ量には限界があります(データ量はServerやクライアントに依存します) 「リクエストのメソッド」と言う以前に次の事を理解する必要があります 1.HTTPプロトコルは,リクエストとレスポンスのやり取りから成り立つプロトコル 2.リクエストを送るにはメソッドが必要 3.リクエストのために用要されているメソッドは8つ(OPTIONS,GET,HEAD,POST,PUT,DELETE,CONNECT,TRACE)

POSTとは? ブラウザ側からサーバへ,データ量に制限なく送るためにPOSTがあります 送信方法をPOSTにするために,<form>タグのmethod="get"をmethod="post"に変更します サーブレットがPOSTに対して処理を行うために,doGet()メソッドをdoPost()メソッドに変更します -ここでみんなにPOSTへ変更して,大量の文字を投稿させて下さい

GETとPOSTの違い GETは,サーバへ送信できるデータ量に制限がある(POSTは制限がない) GETは,送信されるデータがURLに加わり送信される(POSTは加わらない) 移動するURLをユーザに知らせたくない場合にPOSTが用いられる→セキュリティ強化

では,実習です テキストボックス、テキストエリア以外のHTMLフォーム部品を掲示板に加えてください。投稿結果画面にも反映させてください(例:Webアプリに「質問」、「回答」選択欄)

補足資料 ~HTMLフォーム部品~ text-テキストボックス textarea-テキストエリア radio-ラジオボタン checkbox-チェックボックス select-リストボックス submit-送信ボタン reset-リセットボタン その他password、hidden *「とほほWWW入門」に詳細なHTMLリファレンスがあります   http://tohoho.wakusei.ne.jp/www.htm

お疲れ様でした!!! 今後は、今回作ったWebアプリを拡張していきます。 次回は投稿をファイルに保存する方法を学びます。わくわくo(^-^)o