Download presentation
Presentation is loading. Please wait.
Published byPäivi Kivelä Modified 約 5 年前
1
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール 6.4 Webアプリケーション 6.5 チャットアプリケーション
2
6.4 Webアプリケーション 6.4.1 WWW ■ WWW(World Wide Web :「 世界中に張りめぐらされた蜘蛛の巣」の意味) ・ 本来は,研究論文の公開・共有を目的としたもの。 ・ 商用に使えない制限が外れたため,認証技術や暗号化技術の導入と共にビジネス用としても使えるようになった。
3
(1)ハイパーテキスト hyper text リンク(link)と呼ばれる機構を導入することで,
文書中から別の文書への接続を可能にすることで, 非連続的な文書の閲覧を可能にしたもの。 インターネット上で実現したもの=WWW 記述言語 : HTML(Hyper Text Markup Language)
4
(2)WWWクライアント ■WWWサーバから受取ったレスポンスデータを表示する機能。 ■「ブラウザ(browser)」と呼ばれる。 [例]
NCSA(National Center for Supercomputing Applications)のMosaic Internet Explorer Netscape Navigator
5
(3)WWWサーバ ■サーバ側に保管されている情報をWWWクライアントに提供するシステム [例]Apache
セキュリティ上の配慮から,直接インターネットに接続するのではなく,クライアントからのリクエストを外部のインターネット上のサーバに送る方式も採用されるようになってきた。 代理サーバ(プロキシサーバ:proxy server)と呼ばれる。
6
(4)HTML ■SGML(Standard Generalized Markup Language)を単純化して,タグ方式で処理軽量化を図った言語 書式やリンク指定,組込み画像等をタグで指定する。
7
6.4.2 HTTP Hyper Text Transfer Protocol
■ Webページを閲覧する際のプロトコル(Well known port : 80) ■ アクセスする際は,URL(Uniform Resource Locator)を指定する。 ■ クライアントからの接続した状態を保持するための機構を「クッキー」という。 [URLの書式構成] ファイルのパス名 ドメイン名 プロトコル(http,https)
8
(1)リクエストとレスポンス ■ クライアントからはメソッドと呼ばれるHTTPコマンドで指定し,Webサーバからレスポンスが返却される。
■ クライアントからはメソッドと呼ばれるHTTPコマンドで指定し,Webサーバからレスポンスが返却される。 リクエストメッセージ レスポンストメッセージ リクエスト行 ステータス行 リクエストヘッダ レスポンスヘッダ 空行(CR+LF) 空行(CR+LF) リクエストボディ レスポンスボディ リクエスト行例:GET /index.html HTTP/1.0 ステータス行例:HTTP/ OK
9
代表的なメソッドとステータスコード HTTP1.1の代表的なメソッド HTTP1.1のステータスコード メソッド 機 能
メソッド 機 能 GET URLで指定した情報を取り出す。 POST フォームに入力したデータを送信するなど,サーバにデータを送信する。 HEAD ファイルの最終更新日など,URLで指定したリソースのヘッダ情報を取得する。 PUT URLで指定したサーバ上のファイルを置き換える(アップロードなど)。 DELETE URLで指定したサーバ上のファイルを削除する。 HTTP1.1のステータスコード コード 意 味 1XX 処理の経過状況等の通知 2XX 正常終了 3XX リダイレクト(何らかの別のアクションが必要) 4XX クライアント側のエラー 5XX サーバ側のエラー
10
ヘッダ情報 HTTP1.1の代表的なリクエストヘッダとレスポンスヘッダ
ヘッダ情報を読み込むことで,サーバ側,クライアント側でのバージョン等に応じた処理が可能になる HTTP1.1の代表的なリクエストヘッダとレスポンスヘッダ ヘッダの種類 書式 Accept:レスポンスで受取り可能なメディアのタイプ リクエストヘッダ Host:ホスト名 Referrer:要求元のURL User-Agent:Webブラウザの種類 Server:Webサーバの種類 レスポンスヘッダ Date:メッセージの生成日時 Location:リダイレクトするURL Cache-Control:キャッシュの指示 共通ヘッダ Content-Type:メディアタイプ Content-Length:ボディ部の長さ
11
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
12
(2)HTMLによるフォーム処理 Webページでユーザ入力を受け付ける部分をフォーム(form)という。 Webクライアント Webサーバ
テキストボックス データ処理と HTMLページ の生成 フォームに入力 されたデータ チェックボックス ラジオボタン 送信ボタン サーバに転送するため記述 生成された HTMLページ ① GETリクエスト <form method=“GET” action=“GetServlet”> ② POSTリクエスト <form method=“POST” action=“PostServlet”>
13
HTML定義例 POSTリクエストの例 <html><head></head><body>
<form action=" method ="post"> <h2>問合せ:</h2> <p>名前<INPUT TYPE="text" SIZE="20" Name="param1"></p> <p> <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>
14
(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の形式で出力)
15
リクエストメソッド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'};
16
subject=About your condition msg= Haw are you?[改行] This+is+Yutaka.
CGIから受取るデータの形式 ①コントロール名と入力内容が「=」を挟んで1組となり,「&」でつながっている。 ②スペースは「+」に変換されている。 ③その他の文字は,先頭に%が付いた2桁の16進数に変換されている。 [取得データの例] name=yutaka subject=About your condition msg= Haw are you?[改行] This+is+Yutaka. [意味]
17
① Active Server Pages ② Servlet ③ JavaServer Pages
B. CGIを利用しない方法 ① Active Server Pages ② Servlet ③ JavaServer Pages ここでは Servlet について説明する
18
① 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用のサーブレットを構築するための機能が提供されている。
19
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"); }
20
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]); }
21
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()); }
22
(4)文字エンコーディングの指定 エンコーディング : コンピュータで扱う文字を整数値に変換する方式 ① ASCII : 1バイト文字用
エンコーディング : コンピュータで扱う文字を整数値に変換する方式 ① ASCII : 1バイト文字用 ② ISO : 1バイト文字用 ③ EUC(Extended Unix Code) : 2バイト文字用 ④ Shift JIS : 2バイト文字用 [Servlet のコード実行で,Webブラウザに送信されたデータが文字化けをするとき] Servlet から送信されるHTMLコードのエンコーディング方式(ISO )が 表示のエンコーディング方式と異なる
23
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[] = {“名前”, “ ”, “学年”, “内容"}; 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(); -----(続く) -----
24
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();
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.