|
|
| |
2002/02/03 田中宏和 |
| Last Update
2003/01/30 |
|
 |
サーブレット
(Servlet)編 |
 |
|
| ◆サーブレットとは |
| サーブレットはWEBサーバー上で動くJavaのクラスです。通常、クライアントのWEBブラウザからHTTPリクエストで要求があると、サーブレットのプログラムがHTMLやその他のリソースを動的に生成して結果をWEBブラウザに返します。サーブレットは一度、サーバ上でロードされると、クライアントからの要求にはマルチスレッドで応答します。CGI(Common
Gateway Interface)のように、リクエストのたびにプロセスを起動しないため高速に動作します。 |
| ◆リクエストの種類とそれに対応するサーブレットのメソッド |
| クライアントからサーバーにリクエストを送信する際にHTTPメソッドと呼ばれる命令を使用します。HTTPメソッドには以下のような種類があります。(メソッドといってもここではHTTPプロトコルのメソッドです。Javaのメソッドとは違うので混乱しないように注意してください) |
| HTTPメソッド |
説明 |
| GET |
サーバーから指定したリソースの取得 |
| POST |
データをサーバーに転送する |
| HEAD |
レスポンスのヘッダーのみを取得する |
| PUT |
データをサーバーに転送して指定したリソースをそのデータと置き換える |
| DELETE |
リソースを削除する |
| TRACE |
サーバーの動作の診断情報を取得する |
| OPTIONS |
使用できるメソッドの一覧を取得する |
|
複数のHTTPメソッドがありますが、よく使用されるHTTPメソッドはGETとPOSTです。GETメソッドは通常WEBブラウザでWEBページを見る際に使っているHTTPメソッドです。POSTメソッドはログイン画面などの入力フォームからユーザー名やパスワードなどのデータをサーバーに送信する際に使用されるHTTPメソッドです。
サーバーにリクエストが送られるとそのHTTPメソッドに対応したサーブレットのJavaのメソッドが呼び出されます。以下が対応するサーブレットのJavaのメソッドです。 |
| HTTPメソッド |
サーブレットのメソッド |
| GET |
doGet |
| POST |
doPost |
| HEAD |
doHead |
| PUT |
doPut |
| DELETE |
doDelete |
| TRACE |
doTrace |
| OPTIONS |
doOptions |
|
(メモ)
これらのJavaのメソッドの前には必ずserviceメソッドが呼び出されています。serviceメソッドの中でリクエストの種類に応じてdoXXXメソッドが呼び出されるようになっています。serviceメソッドをオーバーライドするとそこにリクエストの種類に関係なくする処理を記述することができます。この場合doXXXメソッドは呼び出されなくなるので、doXXXメソッドを呼び出す場合は自分でserviceメソッドの中で呼び出す必要があります。 |
| ◆ここでの環境 |
| OS |
Windows 2000 |
| J2SE SDK |
1.4.0 |
| Tomcat |
4.1.12 |
|
|
|
|
| ◆Java実行環境の構築 |
| アプリケーション編を参考にして環境変数JAVA_HOME、PATH、CLASSPATHを設定してください。 |
| ◆サーブレットを動かす環境の構築 |
| ■Tomcatのダウンロード
|
| サーブレットを動かすにはサーブレットコンテナが必要ですのでダウンロードしましょう。ここではTomcatというのサーブレットエンジンを使用します(ここではバージョン4.1.12を使用)。TomcatはThe
Jakarta Projectからダウンロードできます。バイナリー形式とソース形式がありますが、バイナリーの方がコンパイルしない分、簡単なので、ここではバイナリー形式のものダウンロードすることにします。(ここではjakarta-tomcat-4.1.12.exe) |
 |
| ■Tomcatのインストール |
| ダウンロードしたファイルをダブルクリックしてインストールしてください。インストールが終了すると、デフォルトではC:\Program
Files\Apache Group\Tomcat 4.1の下にファイルが展開されます。これでサーブレットを動かす環境が整いました。これ以降、Tomcatがインストールされたフォルダを[Tomcatのフォルダ]とします。 |
| ■Tomcatの起動 |
[Tomcatのフォルダ]\binの下にある「startup.bat」というファイルをダブルクリックすることでTomcatを起動することができます。Tomcatが起動しましたら、動いているかどうかブラウザで確認してみましょう。ブラウザを開いて http://localhost:8080/ のURLを指定してみてください。以下のような画面が表示されれば成功です。
|
| おおおお!! |
|
|
| ■Tomcatの停止 |
| Tomcatを停止するには[Tomcatのフォルダ]\binの下にある「shutdown.bat」というファイルをダブルクリックすればOKです。 |
| ■Tomcatのディレクトリ構成 |
| [Tomcatのフォルダ]の下にはいくつかのサブディレクトリが存在しています。以下がその説明です。 |
| サブディレクトリ |
説明 |
| bin |
Tomcatの起動、停止を行う実行ファイルなどが置かれている |
| common |
Tomcatで使用するJARファイルが置かれています。サーブレットのコンパイルに必要なservlet.jarもここに置かれています。 |
| conf |
Tomcatの設定ファイルが置かれています。サーバーの設定を行うservlet.xmlファイルやWEBアプリケーション全体の設定を行うweb.xmlなどがあります。 |
| logs |
ログが格納されます。 |
| server |
サーバーの実行に使用するファイルが置かれています。 |
| shared |
WEBアプリケーション全体で使用するクラスファイルやJARファイルはここに置きます。 |
| temp |
一時ファイルが格納されます。 |
| webapps |
WEBアプリケーションを置くデフォルトの場所です。 |
| work |
JSPが実行されるときに変換されたサーブレットのソースや、それがコンパイルされたクラスファイルが格納されます。 |
|
|
|
| ◆Javaソースコード |
| サーブレットのソースを作ります。 |
| HelloWorldServlet.java(ここからダウンロード) |
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorldServlet extends HttpServlet {
public void service(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// ContentTypeを設定
response.setContentType("text/html; charset=Shift_JIS");
// 出力用PrintWriterを取得
PrintWriter out = response.getWriter();
// 出力
out.println("<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>");
}
} |
|
|
|
|
| ◆コンパイル |
| MS-DOSプロンプト(コマンドプロンプト)を立ち上げてコンパイルしてみましょう。 |
| コマンドプロンプト |
C:\Documents and
Settings\tanaka>cd C:\作業フォルダ\JavaHello
C:\作業フォルダ\JavaHello>javac HelloWorldServlet.java
HelloWorldServlet.java:2: パッケージ javax.servlet は存在しません。
import javax.servlet.*;
^
HelloWorldServlet.java:3: パッケージ javax.servlet.http は存在しません。
import javax.servlet.http.*;
^
HelloWorldServlet.java:5: シンボルを解釈処理できません。
シンボル: クラス HttpServlet
位置 : HelloWorldServlet の クラス
public class HelloWorldServlet extends HttpServlet {
・・・・・・・・・・・・
・・・・・・・・・・・・
エラー 6 個 |
|
| エラーがでてコンパイルできませんでした涙。これはサーブレットのソースで使われているクラスが環境変数CLASSPATHに追加されてないためです。サーブレットで使用するjarファイル(Javaのアーカイブファイル)は[Tomcatのフォルダ]\common\lib の下のservlet.jarというファイルです。アプリケーション編を参考にしてCLASSPATHにservlet.jarを追加してください。 |
| CLASSPATHを設定したら同じようにコンパイルしてみてください。コンパイルが成功し「HelloWorldServlet.class」というクラスファイルが生成されます。 |
| ◆サーブレットを動かしてみよう |
まず、先ほどコンパイルした「HelloWorldServlet.class」ファイルを[Tomcatのフォルダ]\webapps\examples\WEB-INF\classes の下にコピーしてください。コピーしましたら次のURLを指定してみてください。
http://localhost:8080/examples/servlet/HelloWorldServlet おおおお!!! |
 |
| 表示されましたね! |
|
|
| ◆WEBアプリケーションの追加 |
| 上の例では元々TomcatにあるexamplesというWEBアプリケーションでサーブレットを表示しましたが、ここでは自分で作ったjavahelloという名前のWEBアプリケーションでサーブレットを表示したいと思います。 |
| ■WEBアプリケーションとは |
| WEBアプリケーションとは、サーブレット、JSP、HTML、Javaのクラスファイルなどを一つのパッケージとしてまとめたものです。こうすることによって別のサーバーにWEBアプリケーション単位で移動したりすることが容易になります。 |
| ■WARファイルとは |
| WEBアプリケーションに含まれる、JSP、HTML、Javaのクラスファイルなどを一つのファイルにまとめたものをWARファイルといいます。WARファイルはある決まったディレクトリ構成のものをJARファイルと同じ形式でまとめられたものです。 |
| ■WEBアプリケーションのディレクトリ構成と設定ファイル |
(例)WEBアプリケーションの名前がjavahelloの場合
| [Tomcatのフォルダ] |
\webapps |
\javahello |
\ |
JSPやHTMLファイルを置く。フォルダを作って階層状態にしてもOK。 |
| |
|
|
\WEB-INF\web.xml |
このWEBアプリケーションの設定ファイル。 |
| |
|
|
\WEB-INF\classes |
このWEBアプリケーションで使用するクラスファイルを置く。サーブレットのクラスファイルもここに置く。 |
| |
|
|
\WEB-INF\lib |
このWEBアプリケーションで使用するJARファイル(Javaのアーカイブファイル)を置く。 |
| |
|
|
|
|
|
|
| javahello以下をまとめてjavahello.warというWARファイルを作成して他のサーバーへの配布などを行うことができます。 |
|
|
| ■TomcatへのWEBアプリケーションの追加方法 |
| 具体的にjavahelloという名前のWEBアプリケーションをTomcatに追加してみたいと思います。 |
| <フォルダと設定ファイルの作成>
1.javahelloフォルダの作成
WEBアプリケーションが入るフォルダを作成します。どこに作ってもいいのですが、ここではTomcatでのWEBアプリケーションの置き場所であるwebappsフォルダの下に作りました。
2.WEB-INFフォルダの作成
javahelloフォルダの下にWEB-INFというフォルダを作ります。
3.classesフォルダとlibフォルダの作成
WEB-INFフォルダの下にclassesフォルダとlibフォルダを作ります。
4.web.xmlファイルの作成
WEB-INFフォルダの下にweb.xmlファイルを作ります。ここでは何も設定しないので下記のようになります。実際の運用では<web-app>〜</web-app>の中にいろいろな設定が書かれることになります。 |
| web.xml |
<?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>
</web-app>
|
|
| <TomcatへのWEBアプリケーションの登録> |
TomcatへWEBアプリケーションを登録します。登録方法はserver.xmlファイルにContextタグを追加します。
ここでは最小限の設定でよいので以下のような2行を追加します。追加する場所は<Host>〜</Host>のHostタグの中です。server.xmlは[Tomcatのフォルダ]\confの下にあります。
<Context path="/javahello" docBase="javahello"
debug="0" reloadable="true" >
</Context> (メモ)
[Tomcatのフォルダ]\webapppsの下にWEBアプリケーションを配置した場合、Tomcatの起動時に自動的に認識するため上記のContextタグを追加しなくても動きます。 |
<サーブレットのクラスファイルのコピー>
HelloWorldServlet.classファイルを[Tomcatのフォルダ]\javahello\WEB-INF\classesの下にコピーしてください。 |
| <Tomcatの再起動> |
| Tomcatを再起動して上記の設定を有効にします。 |
| <表示> |
| 表示してみましょう!http://localhost:8080/javahello/servlet/HelloWorldServlet |
 |
| おおおおお!表示されましたね! |
|
|
(Tomcatバージョン4.1.12以上を使用する場合の注意)
Tomcat4.1.12以上を使用する場合、上記のURLを指定するとHTTP Status 404 が帰ってきます。これはデフォルトの設定では/servlet/*にアクセスがあった場合、サーブレットを実行するようになっていないためです。
<解決方法>
[Tomcatのフォルダ]\conf\web.xmlを編集します。
273行目付近の以下の赤字の2行のコメントアウトの行をはずします。
(修正前) <!-- <servlet-mapping>
<servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern>
</servlet-mapping> -->
(修正後) <servlet-mapping> <servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
この修正で/servlet/*にアクセスがあった場合にサーブレットが実行されるようになります。編集が終了したらTomcatを再起動してください。
実際の運用では上記のコメントの削除は行わずweb.xmlでサーブレットマッピングを行うことでサーブレットにアクセスすることをお勧めします。
http://www.hellohiro.com/servletwebxml.htm |
|
| <WARファイルの作成> |
| このWEBアプリケーションのWARファイルを作ってみましょう。javahelloフォルダに移動してjar
-cvf javahello.war * というコマンドで作成できます。 |
| コマンドプロンプト |
| C:\>cd
C:\Program Files\Apache Group\Tomcat 4.1\webapps\javahello
C:\Program Files\Apache
Group\Tomcat 4.1\webapps\javahello>jar
-cvf javahello.war *
マニフェストが追加されました。
エントリ META-INF/ を無視します。
エントリ META-INF/MANIFEST.MF を無視します。
WEB-INF/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
WEB-INF/classes/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
WEB-INF/classes/HelloWorldServlet.class を追加中です。(入 =
890) (出 = 522)(41%
収縮されました)
WEB-INF/lib/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
WEB-INF/web.xml を追加中です。(入 = 210) (出 = 172)(18% 収縮されました)
C:\Program Files\Apache Group\Tomcat
4.1\webapps\javahello> |
|
| これで、javahello.warというファイルができます。このファイルを別のコンピューターの[Tomcatのフォルダ]\webappsの下に置いて(server.xmlへのContextタグの追加は不要)Tomcatを再起動するだけで「Hello
World」と表示できます。 便利ですね。 |
|
|
■関連 JSP編
サーブレット(Linux)編 サーブレット(セッション)編
サーブレット(クッキー)編 サーブレット(フィルタ)編
サーブレット(web.xml)編 HTTP編
Apache + Tomcat編 |
■書籍
Java関連の書籍 サーブレット関連の書籍 |
|
| |
|
|
| ツールの部屋
- Java関連の書籍
- デザインパターン - 情報交換掲示板
- HOME |