JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > サーブレット (Servlet)編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  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