JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > サーブレット (Linux)編  
メニュー
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/11/22  田中宏和
Last Update 2003/01/30
サーブレット (Linux)編
◆サーブレットとは?
サーブレットは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 RedHat Linux 7.3
J2SE SDK 1.4.1_01
Tomcat 4.1.18
◆Java実行環境の構築
アプリケーション編を参考にしてJavaの実行環境を構築してください。
◆サーブレットを動かす環境の構築
<tar.gzファイルからインストール>
■Tomcatのダウンロード
The Apache Jakarta ProjectからTomcatをダウンロードします。ここではtar.gz形式のバージョン4.1.18をダウンロードしました。
ダウンロードしたファイル:
jakarta-tomcat-4.1.18.tar.gz
■Tomcatのインストール
 1.ファイルの解凍
Linux コンソール
[root@redhat src]# tar -xzvf jakarta-tomcat-4.1.18.tar.gz
 2.フォルダのコピー
Linux コンソール
[root@redhat src]# cp -fr jakarta-tomcat-4.1.18 /usr/local/tomcat4
[root@redhat src]#
これ以降 /usr/local/tomcat4 を[Tomcatのフォルダ]と表現します。
■Tomcatの起動
Linux コンソール
[root@redhat src]# /usr/local/tomcat4/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat4
Using CATALINA_HOME: /usr/local/tomcat4
Using CATALINA_TMPDIR: /usr/local/tomcat4/temp
Using JAVA_HOME: /usr/java/j2sdk1.4.1_01
[root@redhat src]#
起動には少し時間がかかります。
◆Tomcatの動作確認
http://Linuxサーバーのアドレス:8080/のURLを指定してTomcatが動作しているかどうか確認します。
おおおおおお!
 
■Tomcatの停止
Tomcatを停止するには
/usr/local/tomcat4/bin/shutdown.sh
を実行すれば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>");
  } 
}
 
◆CLASSPATHの設定
/usr/local/tomcat4/common/lib/servlet.jarをCLASSPATHに設定します。Javaを実行するユーザーのホームディレクトリにある「.bash_profile」ファイルを編集します。(バージョンが1.4.0_03の場合)
■.bash_profileの設定例
.bash_profile
・・・・・・・・・・
・・・・・・・・・・(省略)

JAVA_HOME=/usr/java/j2sdk1.4.0_03
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:/usr/local/tomcat4/common/lib/servlet.jar

export JAVA_HOME PATH CLASSPATH

以下のコマンドを実行して設定を反映させます。
Linux コンソール
[tanaka@redhat tanaka]$ source ~/.bash_profile
◆コンパイル
Linux コンソール
[root@redhat javahello]# javac HelloWorldServlet.java
[root@redhat javahello]#
◆Tomcatでサーブレットを動かす
上でコンパイルしてできたクラスファイルを [Tomcatのフォルダ]/webapps/example
s/WEB-INF/classesの下にコピーしてください。
Linux コンソール
[root@redhat javahello]# cp HelloWorldServlet.class /usr/local/tomcat4/webapps/example
s/WEB-INF/classes/
[root@redhat javahello]#
コピーしましたら次のURLを指定してみてください。
http://linuxサーバーのアドレス: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://linuxサーバーのアドレス: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 * というコマンドで作成できます。
Linux コンソール
[root@redhat /]# cd /usr/local/tomcat4/webapps/javahello/
[root@redhat javahello]# jar -cvf javahello.war *
マニフェストが追加されました。
WEB-INF/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
WEB-INF/classes/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
WEB-INF/classes/HelloWorldServlet.class を追加中です。(入 = 877) (出 = 505)(42%
収縮されました)
WEB-INF/lib/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
WEB-INF/web.xml を追加中です。(入 = 201) (出 = 169)(15% 収縮されました)
[root@redhat javahello]#
これで、javahello.warというファイルができます。このファイルを別のサーバーの[Tomcatのフォルダ]/webappsの下に置いて(server.xmlへのContextタグの追加は不要)Tomcatを再起動するだけで「Hello World」と表示できます。 便利ですね。
 
■関連
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
サーブレット(web.xml)編
HTTP編
Apache + Tomcat編
■書籍
Java関連の書籍
サーブレット関連の書籍

 
  ネットで買えば断然お得!お買い物なら楽天市場
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME