Servlet入門(1) TomcatによるWebアプリケーション開発入門 大岩研究会 高橋純平 2003年5月15日 本日の目標 Webアプリケーションとは何か説明できる ・掲示板はWebアプリかという質問に答えられる ・CGIとServletの違いを説明できるようになる Webアプリケーションの単位で ファイルを管理できる ・web.xmlの設定をいじれるようになる Servletを使った基本的なプログラムが書 けるようなる Webアプリケーションとは ・サーバー上でHTTPを用いてアプリケーションを稼動させるのが Webアプリケーション。 ・では、掲示板はWebアプリと言えるか? 動的なページ ≠ Webアプリ Webアプリにはコンセプトが無くてはならない コンセプトの無い掲示板はただの動的なページ ・ではどんなものがWebアプリなのか? 例:SFCの体育予約システム Webアプリケーションの例 SFCの体育予約システムを見てみよう 体育予約システムではどんなことができるか ・ ・ ・ ・ ・ ログイン 予約の確認・取り消し 予約する どんな授業があるか閲覧する 今までの履修の確認 これらは一つ一つは「機能」であって「Webアプリ」とは言えない。 すべての機能を合わせて、「体育の出欠状況を管理する」という コンセプトを満たしているので、全部で一つの「Webアプリ」と言える。 ではこのようなWebアプリはサーバー上でどのように動いているのだろうか Webアプリを使うための環境 サーバー上では複数のWebアプリが動いている 体育予約実行 システム 生徒A ブラウザからHTTPリクエストを送る 英語履修 システム 実行 生徒B レポート システム 実行 生徒C アプリケーションサーバー ではアプリケーションサーバーとはなんだろう? アプリケーションサーバとは 別名をWebアプリケーションサーバと言う WebサーバをWebアプリケーションのために拡張したもの HTTPで通信する サーブレットなどのサーバサイドJavaの実行環境を実装している Webアプリを管理するために便利な機能を持つ 各Webアプリを一つのディレクトリで管理する 各Webアプリごとに決まりごとを設定できるなど・・・ アプリケーションサーバ Tomcatはアプリケーションサーバの一つである Tomcat クライアントとWebアプリが HTTPリクエスト/レスポンスを利用して 対話するときの仲介役になる サーブレットとは サーバ側で動作するJavaのプログラム クライアント(ブラウザなど)からHTTPリクエストがくると実行される HTTPリクエストを受け取り何らかの処理をしてHTTPレスポンスで結果を返す 単独では動作せず、サーブレットを実行できる環境が必要 普通のJavaプログラムの実行 main(){ _________ _________ _________ } java HOGE 実行 Servletプログラムの実行 doGet(){ _________ _________ ________ } アプリケーションサーバ サーブレットはアプリケーションサーバが実行する HTTPリクエスト 実行 サーブレットのソース import java.io.*; import javax.servlet.*; import javax.servlet.http.*; Servlet関係のクラスをインポートします public class HelloWorldServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { GETでリクエストがあったときに実行する // ContentTypeを設定 処理を書きます response.setContentType("text/html; charset=Shift_JIS"); // 出力用PrintWriterを取得 PrintWriter out = response.getWriter(); HTMLを書き出すための準備 // 出力 out.println("<html>"); HTMLへの書き出し out.println("<head>"); out.println("<title>Hello World Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("Hello World"); out.println("</body>"); out.println("</html>"); } } Tomcatのサンプルサーブレットを実行してみる ①Tomcatを起動する ②Webブラウザで http://localhost:8080/examples/servlet/HelloWorldExample と入力する するとこんなページが表示される クライアントとサーブレットがHTTPリクエスト/レスポンスを利用して 対話するのを見る 同じサーブレットをGETリクエストで起動してみよう ①Tomcatを起動する ②DOSプロンプトを開く ③C:>telnet localhost 8080 と打って改行 ④GET /examples/servlet/HelloWorldExample HTTP/1.0 と打って改行2回 手順 するとこんなHTTPレスポンスがサーブレットから返ってくる HTTP/1.1 200 OK Content-Type: text/html Date: Wed, 08 May 2002 07:32:58 GMT Server: Apache Tomcat/4.0.1-b1 (HTTP/1.1 Connector) Connection: close <html> <body bgcolor=“white”> ・・・・ <h1>Hello World!</h1> </body> </html> ホストとの接続が切断されました。 クライアントからのリクエストに対して サーブレットが処理した結果を 送信してきたのが分かりましたか? 自分でWebアプリケーションを作る 以下の手順でWebアプリケーションを作ります。 ①Webアプリ用のディレクトリの準備 ②WEB-INFディレクトリを作る ③web.xmlファイルを作る ④プログラム書く ⑤プログラムをコンパイルする ⑥クラスファイルを配置する では、上の手順にそってWebアプリを作成していきましょう Webアプリの宣言 ・ TOMCAT_HOME/webapps/直下に新しいディレクトリを作る ・ TOMCAT_HOME/webapps/Webアプリ名 ・ Webアプリ名のつけ方に気をつけよう ・ このディレクトリがルートになる ・ http://localhost:8080/Webアプリ名/から このWebアプリにアクセスする TOMCAT_HOME/ webapps Webアプリ名 Webアプリケーションのファイル構成 Webアプリケーションのファイル構成 /Webアプリ名/WEB-INF/classes/ /WEB-INF/lib/ /WEB-INF /web.xml /index.html Webアプリケーションの呼び出し方法 (web.xmlで指定可) ・サーブレットの呼び出し http://ホスト名:ポート番号/webアプリ名/servlet/クラス名 例:http://localhost:8080/examples/servlet/HelloWorldServlet ・index.htmlの呼び出し http://ホスト名:ポート番号/webアプリ名/index.html プログラムの配置 ・ TOMCAT_HOME/webapps/Webアプリ名以下にWEB-INFディレクトリを作成する ・ その中にコンパイルしたクラスを配置するclassesディレクトリを作る ・クラスファイルを格納するディレクトリ。Web アプリケーションを実行する際にはここが クラスパスに自動的に設定される。作成したサーブレットはここに置く必要がある。 ・ libディレクトリを作る(今回は触れない) Webアプリ名 WEB-INF classes lib CGIでWebアプリを作ると CGIとサーバサイドJavaでWebアプリを2つ作ってみた・・・何が違うだろう? /public_html taikuLogin.html 例 englishLogin.html /cgi 2個目を作ると・・・ ファイルの関連性が わかりづらいので 管理が大変 taiikuLogin.cgi englishLogin.cgi 数多くのファイルが関連するWebアプリの扱いが大変! Webアプリという概念がない CGIは動的なページを作るにとどまる技術 セーブレットでWebアプリを作ると サーバサイドJavaでWebアプリを作る場合、1つのディレクトリに関連するファイ ルをすべて設置する。そしてそのディレクトリを1つのソフトウェアのように扱う /Taiiku 例 /WEB-INF index.html web.xml 2個目を作ると・・・ /English Webアプリごとに まとまっているので 管理がしやすい /WEB-INF index.html web.xml Webアプリを一つのディレクトリで管理する仕組みがある Webアプリという概念がある サーバサイドJavaはWebアプリを作るための技術 Webアプリの設定 ・ ディレクトリの準備ができたので、このWEBアプリケーションの設定ファイルで あるweb.xml をWEB-INF以下に作成する。 ・ web.xmlを使うとWebアプリごとに決まりごとを設定できる! ・ 具体的には以下のようなものが設定できる ①サーブレットの初期化パラメータ ②セッションコンフィグレーション ③サーブレット/JSPの定義 ④サーブレット/JSPのマッピング ⑤MIMEタイプのマッピング ⑥ウェルカムファイルリスト ⑦エラーページ ⑧セキュリティー Webアプリ名 基本ファイル構成の出来上がり WEB-INF classes lib web.xml ・ 今回設定するのはサーブレットの定義とマッピングです。 web.xmlファイルを作る サーブレットマッピングとはあるURLにリクエストがあったときに、どのサーブレットを呼び出すか制御す ることです。 「http://localhost:8080/examples/greeting..html」というURLにリクエストがあったときに 「HelloWorldServlet」を呼び出すには以下のように記述します。 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>HelloWorldServlet</servlet-name> サーブレット名と <servlet-class>HelloWorldServlet</servlet-class> クラスを関連つける </servlet> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/greeting.html</url-pattern> </servlet-mapping> </web-app> サーブレット名と 呼び出すときの URLを関連つける server.xmlファイルをいじる server.xmlをいじることでアプリケーションサーバーの設定もできる。 Tomcatディレクトリ以外のディレクトリに置いてあるWebアプリを実行可能にするには、server.xmlの中の <Host></Host>で挟まれている中にWebアプリの場所等を下記のように記述する。 <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="/test" docBase="C:\programing\java\test" debug="0"/> </Host> 「pathで指定されたURLがクライアントから要求された際、docBaseで指定されたディレクトリをWebアプリ ケーションとして実行せよ」という設定になる 上記の追記により、「http://[サーバ名またはIPアドレス]:8080/test/」というURLが要求された場合、 「 C:\programing\java\test 」ディレクトリの内容がWebアプリケーションとして実行可能になる。 この設定により、WebアプリのファイルをTomcatのディレクトリ以下に置かなくても良くなる では実習課題 1.日付を表示するサーブレットを作ってさっきのやり方で簡単なWebアプリを作る ※TOMCAT_HOME/conf/web.xml の273行目と278行目のコメントアウトを消してください 2.自分のWebアプリにトップページを加えてください。上で作ったサーブレットをリ ンクで呼び出せるようにしてください。HTMLファイルの置き場所に気をつけてく ださい。 3.作成したWebアプリのweb.xmlを修正し、 http://localhost:8080/date/clock.html にアクセスしたらTimeServletが実行されるようにする 上の三つの課題が終わった人は。。。 4.作成したWebアプリをTomcatのディレクトリ以外のディレクトリに 移し、server.xmlを書き換えてブラウザから実行できるように してください。
© Copyright 2024 ExpyDoc