第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール

Slides:



Advertisements
Similar presentations
第6章 インターネットアプリケー ション 6.1 インターネットアプリケーション 6.2Java によるネットワーク処理 6.3 電子メール 6.4Web アプリケーション 6.5 チャットアプリケーション.
Advertisements

ネットワークプログ ラミング論 平成27年 11 月 1 6日 森田 彦. 【基礎課題 6-1 】の解答 ① サーブレットを記述して保管するとコン パイルが自動的に行われる。 ② サーブレットの記述後、開発者がコンパ イル命令を実行しなければならない。 ③ プロジェクト名が Web アプリケーション.
Web アプリケーション開発入門 大岩研究会 今野隆平 2002 年 5 月 9 日 Introduction to Web Application Development.
情報アプリケーション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.
インターネットのアプリケーション 情報ネットワーク 後藤(2) 教科書:  第8章 アプリケーション プロトコル pp
WWW のおはなし 神戸大学理学部地球惑星科学科 4 回生 佐伯 拓郎 (地球および惑星大気科学研究室) 藤田 哲也 (宇宙物理学研究室)
神戸大学理学部地球惑星科学科 4回生 柏本 光司
情報基礎A 情報科学研究科 徳山 豪.
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
Webアプリケーションの 通信メカニズム WEBアプリ研究プロジェクト 第2回.
JPAを利用した RESTful Webサービスの開発
第2章 ネットサービスとその仕組み(前編) [近代科学社刊]
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Applet 岡部 祐典 鈴木 敬幸.
インターネットの通信メカニズム 概要 WEBアプリ研究会 2回目.
エンタープライズアプリケーション II 第10回 / 2006年7月23日
JSFによるWebアプリケーション開発 第11回
Servlet J2EE I 第8回 /
アプレット (Applet)について.
Servlet入門(2) 入力フォームをつかったWebアプリ
ネットワークプログラミング論 平成27年10月12日 森田 彦.
WWW (=World Wide Web)とは
JavaServlet&JSP入門 01K0018 中村太一.
独習Java ・ 12.1  インターネットアドレス ・ 12.2  サーバーソケットとソケット  12月 19日    小笠原 一恵.
「コンピュータと情報システム」 07章 インターネットとセキュリティ
第4回 個人の動画配信補足のためのWeb構築
佐賀大学 理工学部知能情報システム学科 講師 大月 美佳
Bottle/Pythonによる Webアプリ入門
担当教官:大月 美佳(佐賀大学) 2001年度 総合科目
HTTPプロトコルとJSP (1) データベース論 第3回.
JQueryでAjax 藤田@ジャストプレイヤー ※参考しまくり文献 jQuery日本語リファレンス.
HTTPプロトコル J2EE I 第7回 /
第8章 データベースシステムの発展 8.1 オブジェクトリレーショナルデータベース 8.2 分散データベース 8.3 インターネットとデータベース.
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
情報コミュニケーション入門 総合実習(1) 基礎知識のポイント(2)
Servlet入門(2) 入力フォームをつかったWebアプリ
ネットワークプログラミング論 平成28年10月17日 森田 彦.
データベース設計 第9回 Webインタフェースの作成(1)
情報アプリケーション1 2006年 10月 5日 第三回資料 担当 重定 如彦 .
第8章 Web技術とセキュリティ   岡本 好未.
ネットワークプログラミング論 平成28年11月21日 森田 彦.
HTTPとHTML 技術領域専攻 3回 中川 晃.
情報コミュニケーション入門b 第10回 Web入門(1)
情報コミュニケーション入門b 第10回 Web入門(1)
TomcatによるWebアプリケーション開発入門
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
制作技術ー4 アクセスカウンタ等付加機能 PHP と Javascript
ネットワークプログラミング論 平成28年11月7日 森田 彦.
Javaによる Webアプリケーション入門 第6回
ネットワークプログラミング論 平成28年10月31日 森田 彦.
制作技術ー3 双方向通信 : CGIシステムと環境変数
情報コミュニケーション入門e 第11回 Part2 Web入門(1)
Javaによる Webアプリケーション入門 第2回
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
ネットワークプログラミング (3回目) 05A1302 円田 優輝.
Javaによる Webアプリケーション入門 第11回
コンピュータ プレゼンテーション.
Servlet ソフトウェア特論 第7回.
Servlet J2EE I (データベース論) 第12回 /
Servlet データベース論 第6回.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
WebアプリケーションとTomcat ― これまでの復習とこれからの予習 ―
JSPの基本 データベース論 第2回.
Jakarta Struts (1) ソフトウェア特論 第10回.
JSPの基本 J2EE I (データベース論) 第8回 /
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
HTTPプロトコルの詳細 M1 峯 肇史.
Presentation transcript:

第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール 第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール 6.4 Webアプリケーション 6.5 チャットアプリケーション

6.4 Webアプリケーション 6.4.1 WWW ■ WWW(World Wide Web :「 世界中に張りめぐらされた蜘蛛の巣」の意味) ・ 本来は,研究論文の公開・共有を目的としたもの。 ・ 商用に使えない制限が外れたため,認証技術や暗号化技術の導入と共にビジネス用としても使えるようになった。

(1)ハイパーテキスト hyper text リンク(link)と呼ばれる機構を導入することで, 文書中から別の文書への接続を可能にすることで, 非連続的な文書の閲覧を可能にしたもの。 インターネット上で実現したもの=WWW 記述言語 : HTML(Hyper Text Markup Language)

(2)WWWクライアント ■WWWサーバから受取ったレスポンスデータを表示する機能。 ■「ブラウザ(browser)」と呼ばれる。 [例] NCSA(National Center for Supercomputing Applications)のMosaic Internet Explorer Netscape Navigator

(3)WWWサーバ ■サーバ側に保管されている情報をWWWクライアントに提供するシステム [例]Apache セキュリティ上の配慮から,直接インターネットに接続するのではなく,クライアントからのリクエストを外部のインターネット上のサーバに送る方式も採用されるようになってきた。 代理サーバ(プロキシサーバ:proxy server)と呼ばれる。

(4)HTML ■SGML(Standard Generalized Markup Language)を単純化して,タグ方式で処理軽量化を図った言語 書式やリンク指定,組込み画像等をタグで指定する。

6.4.2 HTTP Hyper Text Transfer Protocol ■ Webページを閲覧する際のプロトコル(Well known port : 80) ■ アクセスする際は,URL(Uniform Resource Locator)を指定する。 ■ クライアントからの接続した状態を保持するための機構を「クッキー」という。 [URLの書式構成] http://www.aaa.bbb.jp/xxx/yyy.html ファイルのパス名 ドメイン名 プロトコル(http,https)

(1)リクエストとレスポンス ■ クライアントからはメソッドと呼ばれるHTTPコマンドで指定し,Webサーバからレスポンスが返却される。 ■ クライアントからはメソッドと呼ばれるHTTPコマンドで指定し,Webサーバからレスポンスが返却される。 リクエストメッセージ レスポンストメッセージ リクエスト行 ステータス行 リクエストヘッダ レスポンスヘッダ 空行(CR+LF) 空行(CR+LF) リクエストボディ レスポンスボディ リクエスト行例:GET /index.html HTTP/1.0 ステータス行例:HTTP/1.0 200 OK

代表的なメソッドとステータスコード HTTP1.1の代表的なメソッド HTTP1.1のステータスコード メソッド 機 能 メソッド               機 能 GET URLで指定した情報を取り出す。 POST フォームに入力したデータを送信するなど,サーバにデータを送信する。 HEAD ファイルの最終更新日など,URLで指定したリソースのヘッダ情報を取得する。 PUT URLで指定したサーバ上のファイルを置き換える(アップロードなど)。 DELETE URLで指定したサーバ上のファイルを削除する。 HTTP1.1のステータスコード コード               意 味 1XX 処理の経過状況等の通知 2XX 正常終了 3XX リダイレクト(何らかの別のアクションが必要) 4XX クライアント側のエラー 5XX サーバ側のエラー

ヘッダ情報 HTTP1.1の代表的なリクエストヘッダとレスポンスヘッダ ヘッダ情報を読み込むことで,サーバ側,クライアント側でのバージョン等に応じた処理が可能になる HTTP1.1の代表的なリクエストヘッダとレスポンスヘッダ ヘッダの種類               書式 Accept:レスポンスで受取り可能なメディアのタイプ リクエストヘッダ Host:ホスト名 Referrer:要求元のURL User-Agent:Webブラウザの種類 Server:Webサーバの種類 レスポンスヘッダ Date:メッセージの生成日時 Location:リダイレクトするURL Cache-Control:キャッシュの指示 共通ヘッダ Content-Type:メディアタイプ Content-Length:ボディ部の長さ

6.4.3 ServletによるHTMLフォーム処理 (1)クライアントサイドとサーバサイドの技術 6.4.3 ServletによるHTMLフォーム処理 (1)クライアントサイドとサーバサイドの技術 Webアプリケーションは以下のように分類できる。 ■ クライアントサイドのアプリケーション   Webブラウザ側で実行されるプログラム。 [例]Javaアプレット,JavaScript ■ サーバサイドのアプリケーション   サーバ側で実行されるプログラム。   [例]Perl/CGI,Active Server Pages, Servlet, JSP [用語]   Perl : Practical Extraction and Report CGI : Common Gateway Interface JSP : JavaScript Pages

(2)HTMLによるフォーム処理 Webページでユーザ入力を受け付ける部分をフォーム(form)という。 Webクライアント Webサーバ テキストボックス データ処理と HTMLページ の生成 フォームに入力 されたデータ チェックボックス ラジオボタン 送信ボタン サーバに転送するため記述 生成された HTMLページ ① GETリクエスト  <form method=“GET” action=“GetServlet”> ② POSTリクエスト <form method=“POST” action=“PostServlet”>

HTML定義例 POSTリクエストの例 <html><head></head><body> <form action="http://localhost:8080/webap/servlet/WebAp" method ="post"> <h2>問合せ:</h2> <p>名前<INPUT TYPE="text" SIZE="20" Name="param1"></p> <p>Email:<INPUT TYPE="text" SIZE="30" Name="param2"></p> <p>学年<select name="param3"> <option value="1">情報工学科 1 年</option> <option value="2">情報工学科 2 年</option> <option value="3">情報工学科 3 年</option> <option value="4">情報工学科 4 年</option> </select></p> <p>質問内容</p><p><textarea name="param4" row="5" cols="60"></textarea></p> <INPUT TYPE="submit" VALUE="送信"> <INPUT TYPE="reset" VALUE="リセット"> </form> </body> </html>

(3)Servetによるデータ処理 A. その前にCGI(Common Gateway Interfaceの仕組み) Webブラウザからのリクエストに対応する処理を 外部プログラムを動かすことで実現する仕組み Webサーバ #! c:/perl/bin/perl (空白行) print "Contents-type: text/plain\n\n" print "Hellow CGI !" 外部プログラムの起動 c:/perl/bin/perl 外部プログラム (perl処理系) 標準入力 標準出力 Contents-type: text/plain Hellow CGI ! CGIヘッダの 「Contents-type: text/plain」 が取り除かれて出力される Hello CGI ! Webクライアントへの出力 Webブラウザ (通常HTMLの形式で出力)

リクエストメソッドPOSTとGETのデータ  環境変数QUERY_STRING ■Putの場合  標準入力からデータ受け取り  (文字の長さ:環境変数CONTENT_LRNGTH) Perl によるフォームデータ取得の例 if($ENV{'REQUEST_METHOD'} eq 'POST'){ read(STDIN,$query, $ENV{'CONTENTS_LENGTH'}); } else { $query = $ENV{’QUERY_STRING'};

subject=About your condition msg= Haw are you?[改行] This+is+Yutaka. CGIから受取るデータの形式 ①コントロール名と入力内容が「=」を挟んで1組となり,「&」でつながっている。 ②スペースは「+」に変換されている。 ③その他の文字は,先頭に%が付いた2桁の16進数に変換されている。 [取得データの例] name=yutaka&email=yutaka@souzousha.com&subject=About+your+condition&msg=Haw+are+you%3F%0D%0AThis+is+Yutaka. name=yutaka email=yutaka@souzousha.com subject=About your condition msg= Haw are you?[改行] This+is+Yutaka. [意味]

① Active Server Pages ② Servlet ③ JavaServer Pages B. CGIを利用しない方法 ① Active Server Pages ② Servlet ③ JavaServer Pages ここでは Servlet について説明する

① HttpServlet クラスは,HTTPを使ったサーブレットに必要な機能を実装するクラス HttpServlet クラスを拡張する ① HttpServlet クラスは,HTTPを使ったサーブレットに必要な機能を実装するクラス ② doGet メソッド(WebのmethodがGETのとき) ③ doPost メソッド(WebのmethodがPOSTのとき) ■ protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException HTTPのGETリクエストを処理するとき,このメソッドを実装する。 引数に使われているHttpServletRequest クラスは, ServletRequest を拡張したクラスであり,HTTP用のサーブレットを構築するための機能が提供されている。

HttpServletRequest クラスの代表的なメソッド(その1/3) ① public String getParameter(String name) 親インターフェースの ServletRequest で定義されている。   リクエストパラメータを取得する。 [例] public class Sample extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { String val = req.getParameter("name"); }

HttpServletRequest クラスの代表的なメソッド(その2/3) ② public String getParameterValues(String name) 親インターフェースの ServletRequest で定義されている。   指定された名前で指定できるリクエストパラメータすべてを取得する。 [例] public class Sample extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { String vals[] = req.getParameterValues("name"); if(vals != nulls) for(int i=0; i<vals.length; i++) out.println(vals[i]); }

HttpServletRequest クラスの代表的なメソッド(その3/3) ② public Enumeration getParameterNames() 親インターフェースの ServletRequest で定義されている。   リクエストに含まれているパラメータ名をStringオブジェクトで構成されるEnumerationオブジェクトを返す。 Enumeration:数え上げ型 [例] public class Sample extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { Enumeration names = req.getParameterNames(); while (names.hasMoreElements()) out.println((String)names.nextElement()); }

(4)文字エンコーディングの指定 エンコーディング : コンピュータで扱う文字を整数値に変換する方式 ① ASCII : 1バイト文字用 エンコーディング : コンピュータで扱う文字を整数値に変換する方式 ① ASCII : 1バイト文字用 ② ISO-8859-1 : 1バイト文字用 ③ EUC(Extended Unix Code) : 2バイト文字用 ④ Shift JIS : 2バイト文字用 [Servlet のコード実行で,Webブラウザに送信されたデータが文字化けをするとき] Servlet から送信されるHTMLコードのエンコーディング方式(ISO-8859-1)が 表示のエンコーディング方式と異なる

ISO-8859-1のコードとして扱われるのをshift JISとして扱う例(その1/2) import javax.servlet.http.*; import javax.servlet.*; import java.io.*; import java.util.*; public class Sample extends HttpServlet { private String paramName[] = {“名前”, “E-Mail”, “学年”, “内容"}; public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { PrintWriter pw = res.getWriter(); res.setContentsType("text/html; charset=Shift_JIS"); pw.write("<head><title>Servlet Application Sample</title></head>"); pw.write("<body>"); //HTMLフォームで送信されたデータのShift_JISへの変換 req.setCharacterEncoding("Shift_JIS") Enumeration em = req.getParameterNames();    -----(続く) -----

ISO-8859-1のコードとして扱われるのをshift JISとして扱う例(その2/2)    -----(前シートから続く) ----- //POSTされたパラメータと値の格納 Hashtable ht = new Hashtable(); while (em.hasMoreElements()){ String param = "param" + String.valueOf(j+1); String value = req.getParameterValues(name)[0]; ht.put(name,value) } pw.write("<h2>送信データの確認:</h2><br>"); for(int j=0;j<paraName.length; j++) { if(j==2) { pw.write(paraName[j] + ": " + "情報工学科" + ht.get(param) + "年<p>"); else pw.write(paraName[j] + ": " + ht.get(param)+"<p>"); pw.write("</body></html>"); pw.close();