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

Slides:



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

Web アプリケーション開発入門 大岩研究会 今野隆平 2002 年 5 月 9 日 Introduction to Web Application Development.
1 JSP の作成 JSF による Web アプリケーション 開発 第 4 回. 2 ここでの内容 JSF での JSP の作り方と動かし方につい て学ぶ。
Servlet にメッセージを送ろ う! 杉浦学・山下純一・北川敦規 今日の目標です サーブレットとブラウザのメッセージ 送受信 ブラウザでサーブレットにメッセージを送信で きる サーブレットでメッセージを受信できる 実習で実際にアプリを作れるようにな る.
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 22 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明 准教授等による以前の講義資料をもとにしています。
Servlet 矢口 洋介 清水 麗雄. 準備  Java フォルダに入ってから mkdir Servlet ln – s ~/public_html/Servlet.  フォルダの移動 cd public_html/Servlet/WEB-INF/classes/*.  ファイルのコピー cp.
ASP入門 - Windows 2000 Server 活用 -.
Webアプリケーションの 通信メカニズム WEBアプリ研究プロジェクト 第2回.
JPAを利用した RESTful Webサービスの開発
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
Struts1.xの脆弱性(CVE ) に対するSDEの対処:推奨タイプ (サンプルソースコードの公開)
エンタープライズアプリケーション II 第10回 / 2006年7月23日
Servlet J2EE I 第8回 /
アプレット (Applet)について.
ネットワークプログラミング論 平成27年10月12日 森田 彦.
JavaServlet&JSP入門 01K0018 中村太一.
Webコミュニケーショングループ ~PHPの基礎~ M1 宮崎 真.
第4回 個人の動画配信補足のためのWeb構築
Bottle/Pythonによる Webアプリ入門
卒研:データベースチーム 第4回 DOMを使った処理
Web App Semi 2008 #1 Web App Semi 2008 #1.
ビューとコントローラ.
HTTPプロトコルとJSP (1) データベース論 第3回.
Webを利用した授業支援システムの開発 北海道工業大学 電気電子工学科 H 渋谷 俊彦.
Curlの仕組み.
情報アプリケーション1 2008年 12月 3日 第四回資料 担当 重定 如彦 .
JSFによるWebアプリケーション開発 第6回
HTTPプロトコル J2EE I 第7回 /
JSPの作成 J2EE II 第3回 2005年4月10日.
Servlet入門(2) 入力フォームをつかったWebアプリ
ネットワークプログラミング論 平成28年10月17日 森田 彦.
ServletによるWebアプリ作成 入門
利用者を識別するWebアプリ を作ろう! 2004年6月10日 武田林太郎.
データベース設計 第9回 Webインタフェースの作成(1)
情報アプリケーション1 2006年 10月 5日 第三回資料 担当 重定 如彦 .
第8章 Web技術とセキュリティ   岡本 好未.
ネットワークプログラミング論 平成28年11月21日 森田 彦.
TomcatによるWebアプリケーション開発入門
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
総合政策学部4年 伊藤玲子 総合政策学部4年 阿部雅美 +CreWな皆様
制作技術ー4 アクセスカウンタ等付加機能 PHP と Javascript
ネットワークプログラミング論 平成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日 第四回資料 担当 重定 如彦 .
Javaによる Webアプリケーション入門 第11回
コンピュータ プレゼンテーション.
Servlet ソフトウェア特論 第7回.
Servlet J2EE I (データベース論) 第12回 /
Servlet データベース論 第6回.
情報コミュニケーション入門b 第11回 Web入門(2)
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
Javaによる Webアプリケーション入門 第8回
Javaによる Webアプリケーション入門 第4回
Webページに動きを持たせるJavascript言語について 例題のプログラムを通して体験的に理解することとします。
WebアプリケーションとTomcat ― これまでの復習とこれからの予習 ―
JSPの基本 データベース論 第2回.
Jakarta Struts (1) ソフトウェア特論 第10回.
JSPの基本 J2EE I (データベース論) 第8回 /
システムプログラミング 第10回 プロセス間通信3 簡易Web server(準備) Chat プログラム 担当:青木義満、篠埜 功
データベース第3回目 意味ごとにテーブルを分ける
例題のプログラムを通して JavaScriptの仕組みを理解することとします。
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
HTTPプロトコルの詳細 M1 峯 肇史.
Presentation transcript:

Servlet入門(2) 入力フォームをつかったWebアプリ 大岩研究会 今野隆平 s00395rk@sfc.keio.ac.jp

前回やったこと Webアプリとは何かを知った アプリケーションサーバとは何かを知った サーブレットとは何かを知った サーブレットがアプリケーションサーバによって実行される仕組みを知った Webアプリを作成できるようになった(^^)v Webアプリとは何かを知った WebすなわちWWWは、HTML、HTTP、URLという方式を使った遠隔ファイル閲覧システムです。そのサーバー上でアプリケーションを稼動させるのがWebアプリケーションです。(IBM) アプリケーションサーバとは何かを知った サーブレットとは何かを知った Webアプリを作成できるようになった(^^)v

前回やったこと(1) Webアプリとは何かを知った アプリケーションサーバとは何かを知った サーブレットとは何かを知った HTTPを利用して稼動させるサーバ上のアプリケーション アプリケーションサーバとは何かを知った サーブレットとは何かを知った Webアプリを作成できるようになった(^^)v Webアプリとは何かを知った WebすなわちWWWは、HTML、HTTP、URLという方式を使った遠隔ファイル閲覧システムです。そのサーバー上でアプリケーションを稼動させるのがWebアプリケーションです。(IBM) アプリケーションサーバとは何かを知った サーブレットとは何かを知った Webアプリを作成できるようになった(^^)v

前回やったこと(2) Webアプリとは何かを知った アプリケーションサーバとは何かを知った サーブレットとは何かを知った WebサーバをWebアプリケーションのために拡張したもの サーブレットの実行環境を実装している サーブレットとは何かを知った Webアプリを作成できるようになった(^^)v Webアプリとは何かを知った WebすなわちWWWは、HTML、HTTP、URLという方式を使った遠隔ファイル閲覧システムです。そのサーバー上でアプリケーションを稼動させるのがWebアプリケーションです。(IBM) アプリケーションサーバとは何かを知った サーブレットとは何かを知った Webアプリを作成できるようになった(^^)v

前回やったこと(3) Webアプリとは何かを知った アプリケーションサーバとは何かを知った サーブレットとは何かを知った サーバ側で動作するJavaのプログラム HTTPリクエストを受け取り何らかの処理をしてHTTPレスポンスで結果を返す Webアプリを作成できるようになった(^^)v Webアプリとは何かを知った WebすなわちWWWは、HTML、HTTP、URLという方式を使った遠隔ファイル閲覧システムです。そのサーバー上でアプリケーションを稼動させるのがWebアプリケーションです。(IBM) アプリケーションサーバとは何かを知った サーブレットとは何かを知った Webアプリを作成できるようになった(^^)v

前回やったこと(4) Webアプリとは何かを知った アプリケーションサーバとは何かを知った サーブレットとは何かを知った Webアプリを作成できるようになった(^^)v Webアプリ用ディレクトリを作成 Webアプリのフォルダ構成を構築 簡単なServletを実装、コンパイル、配置 Webアプリをブラウザから起動!!!! Webアプリとは何かを知った WebすなわちWWWは、HTML、HTTP、URLという方式を使った遠隔ファイル閲覧システムです。そのサーバー上でアプリケーションを稼動させるのがWebアプリケーションです。(IBM) アプリケーションサーバとは何かを知った サーブレットとは何かを知った Webアプリを作成できるようになった(^^)v

今回の目標 ブラウザからメッセージを送信して、サーブレットでそれを受信する仕組みが説明できるようになる。 HTMLフォームへの入力をServletに送り、なんらかの処理をさせて結果をブラウザに表示するWebアプリを作る。

Servletが実行される仕組み(1) ~みんなのイメージでは~ TimeServletを要求 Web Browser Tomcat ??? 現在時刻が表示された! TimeServlet.class

Servletが実行される仕組み(2) ~実際に起こっていたこと~ Web Application Server (Tomcat) Http Request GET TimeServlet HTTP/1.0 ①要求 Web Browser Web Server Http Response Header+ Body(<html>… <h1>11:45 JST</h1> …</html>) ⑤結果 ②委託 ④結果 Servlet Engine TimeServlet.class ③実行

Servletが実行される仕組み(3) ブラウザがWebサーバに接続し、HTTPリクエストを送信する。 サーブレットコンテナは指定されたサーブレットをリクエスト、レスポンスオブジェクトを引数に実行する。 サーブレットはリクエストオブジェクトを介して要求を受け取り、処理をし、結果をレスポンスオブジェクトを通してWebサーバに返す。 Webサーバは処理結果をレスポンスとしてブラウザに返す。

Webアプリに重要なこと Q.Webアプリにとって重要なことって何でした? A.人を幸せにするコンセプトを持っている。 ⇒単なる動的なページではだめ!

立派なWebアプリへの第一歩 前回のWebアプリは これから作るWebアプリは リクエストがあった日付を表示する。 ユーザーの意志をプログラムに伝えることができない。 これから作るWebアプリは ユーザからのメッセージを受け取り、何らかの処理をして結果を返すインタラクティブなもの。 コンセプトも付けよう。

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

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

利用シナリオ-サブゼミ支援Webアプリ 投稿者: 杉浦学 タイトル: web.xmlの冒頭宣言に関する質問 内容: デモを見てみよう!

ブラウザとServletのメッセージ送受信 WebBrowser ApplicationServer GET toukou.html <html> <head> <title>投稿画面</title>… toukou.html POST ToukouServlet 投稿者=“杉浦学”… 杉浦学 <html> <head>… <h2>杉浦学さんの投稿</h2> … ToukouServlet.class

HTTP GETとHTTP POST 先ほどの図でGET、POSTと出てきました。役割の違いは何でしょう? ファイルを取得するための要求。 メッセージを送って、処理した結果のHTMLをもらうための要求。

メッセージ送信編

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

メッセージを送信するHTMLフォーム ..<form name="form1" method="post“ action="../servlet/ToukouServlet"> <font size=“+1”>投稿者:</font> <input type="text" size="20" name="contributor"> <font size="+1">タイトル:</font> <input type="text" size="50" name="title" > <font size="+1">内容:</font> <textarea name=“content" cols="50" rows="10"> </textarea> <input type=“submit” name=“submit” value=“投稿”> <input type=“reset” name=“reset” value=“リセット”> </form>..

HTMLフォームを使う(1) ~フォームを宣言する~ <form name=“form1” method=“post” action=“../servlet/ToukouServlet”>… “action”・・・メッセージの送信先 メッセージの入力を受け付ける部品を書く(後述)。 メッセージを送信するための部品を書く(後述)。 …</form>

HTMLフォームを使う(2) ~メッセージを入力するための部品~ <input type= " text " size= " 20 " name= " contributor " > “name”・・・部品の名前 <textarea name= " content " cols="50" rows="10"></textarea>

HTMLフォームを使う(3) ~メッセージを送信するための部品~ <input type= " submit " name= " submit " value= "投稿" > <input type= " reset " name= " reset " value= "リセット" >

送信される形式 HTTP POSTで送ったメッセージは のような形式で送られます。 POST ../servlet/ToukouServlet HTTP/1.1 Length: 64 contributor=杉浦学&title=web.xmlの冒頭宣言 &question= web.xmlの冒頭宣言はなんであんなに… のような形式で送られます。 *HTTP GETでもメッセージを送ることができます。その場合、 GET ./servlet/ToukouServlet?contributor=杉浦学&title=web.xml… HTTP/1.1 のようにメッセージがURLに付加されて送信されます。 これは、HTTP POST誕生以前の手法です。

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

メッセージ受信編

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

送られてきたメッセージ すると・・・ アプリケーションサーバ(Tomcat)が ハッシュテーブルにマッピングしてくれる POST ./servlet/ToukouServlet HTTP/1.1 Length: 64 contributor=杉浦学&title=web.xmlの冒頭宣言 &question= web.xmlの冒頭宣言はなんであんなに… リクエストのメッセージ すると・・・ アプリケーションサーバ(Tomcat)が ハッシュテーブルにマッピングしてくれる

ハッシュテーブルとは 文字列を鍵(Key)として値(Value)を取得することができる。 今回の場合。。。 フォームの部品に指定した“name”がKey フォームに入力された文字列がValue Key Value contributor =  杉浦学 title =  web.xmlの冒頭宣言 name =  web.xmlの冒頭宣言はなんで…

サーブレット2つの部分 ToukouServlet.java アプリケーションサーバから メッセージを (ハッシュテーブル) 受け取る部分 HTMLを生成する 部分 ブラウザへ

メッセージを 受け取る部分 HTMLを生成する 部分 public class ToukouServlet extends HttpServlet { /** * doPost() メソッドは、POSTリクエストがブラウザー * からプログラムに発信されたときに呼び出されるメソッド **/ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ //*****ここからメッセージを受信するための部分***** * HTMLフォームからのメッセージを受け取る前に、 * メッセージのエンコーディングを指定して文字化けを防ぐ。 request.setCharacterEncoding("Shift_JIS"); * 送信されたメッセージが格納されたハッシュテーブルから、 * キーを指定してバリューをそれぞれの変数に格納する String contributor = request.getParameter("contributor"); //キーcontributorのバリューを取得して文字列contributorに入れる String title = request.getParameter("title"); //キーtitleのバリューを取得して文字列titleに入れる String content = request.getParameter("content"); //キーcontentのバリューを取得して文字列contentに入れる //*****ここまででメッセージを受信できた***** //*****ここからがメッセージを表示する為の部分***** //出力を日本語形式に指定して、ブラウザでの文字化けを解消する。 response.setContentType("text/html;charset=Shift_JIS"); //データの出力に必要なPrintWriterを作成する。 PrintWriter out = response.getWriter(); //**HTMLタグと受信したメッセージを出力する**/ out.println("<html>"); out.println("<body bgcolor=\"#33CCFF\" text=\"#000000\">"); out.println("<hr>"); //投稿者と現在の日付を出力する。 out.print("<b><font size=4><p>"+contributor+"さんの投稿</font></b>"); out.print("(投稿時刻:"+ new java.util.Date() + ")<BR/></p>"); //タイトルを出力する。 out.println("<p><font size=5 color=\"#00339\"></font><font size=5>"+title+"</font></p><hr/>"); //内容を出力する out.println(content+"</p><hr/>"); out.println("</body>"); out.println("</html>"); //*****ここまででメッセージを表示できた***** } メッセージを 受け取る部分 HTMLを生成する 部分

メッセージを受け取る準備 ~入力を日本語形式に指定する~ HTMLフォームからのメッセージを受け取る前に、 メッセージのエンコーディングを指定して文字化けを防ぐ。 request.setCharacterEncoding("Shift_JIS");

メッセージを受け取る String contributor = request.getParameter("contributor"); 送信されたメッセージが格納されたハッシュテーブルから、 キーを指定してバリューを取得し、それぞれの変数に代入する。 String contributor = request.getParameter("contributor"); //キーcontributorのバリューを取得して文字列contributorに入れる String type = request.getParameter("type"); //キーtypeのバリューを取得して文字列typeに入れる String content = request.getParameter(“content"); //キーcontentのバリューを取得して文字列contentに入れる

投稿者の例で確認しよう Key Value contributor = 杉浦学 title = web.xmlの冒頭宣言 String contributor = request.getParameter("contributor"); Key Value contributor =  杉浦学 title =  web.xmlの冒頭宣言 name =  web.xmlの冒頭宣言はなんで… 文字列 contributor 杉浦学

HTML生成を生成する準備 ~出力を日本語形式に指定する~ 出力を日本語形式に指定して、 ブラウザでの文字化けを解消する。 response.setContentType("text/html;charset=Shift_JIS"); レスポンスに文字列を出力するための PrintWriterを取得する。 PrintWriter out = response.getWriter();

HTML生成を生成する *「“」を文字列として出力する場合は注意!「\”」と書きます。 out.println("<html>"); out.println("<body bgcolor=\"#33CCFF\" text=\"#000000\">"); out.println("<hr>"); //投稿者と現在の日付を出力する。 out.print(“<b><font size=4><p>”+contributor+“さんの投稿</font></b>"); out.print("(投稿時刻:"+ new java.util.Date() + ")<BR/></p>"); //タイトルを出力する。 out.println("<p><font size=5>"+title+"</font></p><hr/>"); //内容を出力する out.println(content+"</p><hr/>"); out.println("</body>"); out.println("</html>"); //*****ここまででメッセージを表示できた***** *「“」を文字列として出力する場合は注意!「\”」と書きます。

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

では、実習です。 ①自分で、コンセプトがあって人が幸せになるような掲示板を考えて、実装しましょう。 ②テキストボックス、テキストエリア以外の (題材のソースは、配布します。参考にしてください) ②テキストボックス、テキストエリア以外の HTMLフォーム部品を自分の掲示板に加えてください。投稿結果画面にも反映させてください。 (例:題材Webアプリに「質問」、「回答」選択欄)

Webアプリの構造(復習) Webアプリのディレクトリ構造を作って関連ファイルを入れましょう。 GimonKaiketu-Web WEB-INF classes ToukouServlet.class lib web.xml html toukou.html index.html

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

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