サーブレットとは第2回

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を書き換えてブラウザから実行できるように
してください。