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 2026 ExpyDoc