JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > サーブレット(web.xml)編  
メニュー
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編
  2003/01/30  田中宏和
サーブレット(web.xml)編
◆サーブレットとは?
サーブレットはWEBサーバー上で動くJavaのクラスです。通常、クライアントのWEBブラウザからHTTPリクエストで要求があると、サーブレットのプログラムがHTMLやその他のリソースを動的に生成して結果をWEBブラウザに返します。サーブレットは一度、サーバ上でロードされると、クライアントからの要求にはマルチスレッドで応答します。CGI(Common Gateway Interface)のように、リクエストのたびにプロセスを起動しないため高速に動作します。
◆web.xmlとは?
WEBアプリケーションの設定を記述するファイルのことです。WEBアプリケーション毎に様々な設定を記述することができます。web.xmlはWEBアプリケーションのフォルダのWEB-INFフォルダの下に置きます。
◆ここでの環境
OS Windows XP
J2SE SDK 1.4.1_01
Tomcat 4.1.18
◆Javaの実行環境の構築
アプリケーション編を参考にJ2SE SDKをインストールしてJavaの実行環境を構築します。
◆サーブレットの実行環境の構築
Servlet編を参考にしてサーブレットの実行環境を構築します。
◆javahelloという自分のWEBアプリケーションを作成
Servlet編を参考にして自分のWEBアプリケーションを作成してます。
 
サーブレットマッピング
サーブレットマッピングとはあるURLにリクエストがあったときに、どのサーブレットを呼び出すか制御することです。「http://localhost:8080/javahello/servlet/myservlet」というURLにリクエストがあったときに「javahello.HelloWorldParamServlet」を呼び出すには以下のようにします。
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>
  <servlet>
    <servlet-name>myservlet</servlet-name>
    <servlet-class>javahello.HelloWorldParamServlet</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>myservlet</servlet-name>
    <url-pattern>/servlet/myservlet</url-pattern>
  </servlet-mapping>
</web-app>
 
まず、<servlet>〜</servlet>でサーブレットを定義します。servlet-nameにサーブレットの名前、servlet-classにサーブレットの完全修飾クラス名を指定します。
次に、<servlet-mapping>〜</servlet-mapping>であるURLにリクエストがあったときにどのサーブレットを呼び出すか指定します。servlet-nameに上で定義したサーブレットの名前を指定し、url-patternにそのサーブレットを呼び出す場合のURLを指定します。ここには「/helloworld/*」のようにワイルドカードも使用できます。
 
サーブレットに初期パラメータを渡す方法
ここではサーブレットに初期パラメータを渡すように設定します。web.xmlファイルに記述したパラメータをサーブレットで受け取ることができます。
■サーブレットの作成
HelloWorldParamServlet.java(ここからダウンロード)
package javahello;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorldParamServlet extends HttpServlet {
  public void service(HttpServletRequest request,
                      HttpServletResponse response)
                          throws ServletException, IOException {

    // "message"という名前の初期パラメータ取得
    String message = this.getInitParameter("message");
    // "no"という名前の初期パラメータ取得
    String no = this.getInitParameter("no");

    // 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("message:" + message + "<br>");
    out.println("no:" + no);
    out.println("</body>");
    out.println("</html>");
  }
}
 
上のサーブレットをコンパイルしてクラスファイルを[Tomcatのフォルダ]\javahello\WEB-INF\classes\javahelloの下にコピーしてください。
■web.xmlの編集
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>
  <servlet>
    <servlet-name>myservlet</servlet-name>
    <servlet-class>javahello.HelloWorldParamServlet</servlet-class>
    <init-param>
      <param-name>message</param-name>
      <param-value>Hello World</param-value>
    </init-param>
    <init-param>
      <param-name>no</param-name>
      <param-value>5</param-value>
    </init-param>
  </servlet>


  <servlet-mapping>
    <servlet-name>myservlet</servlet-name>
    <url-pattern>/servlet/myservlet</url-pattern>
  </servlet-mapping>
</web-app>
サーブレットに初期パラメータを渡すには<servlet>〜</servlet>に中にinit-param要素を入れます。init-param要素は複数作成することができます。init-param要素の中のparam-nameにパレメータの名前、param-valueにパラメータの値を指定します。
■表示
web.xmlファイルの変更を反映させるためにTomcatを再起動します。再起動したら以下のURLをブラウザで開いてください。
http://localhost:8080/javahello/servlet/myservlet
おおおお!初期パラメータを取得して表示できましたね!
 
サーブレットをWEBアプリケーション開始時にロードする方法方法
WEBアプリケーション開始時(Tomcat起動時)にサーブレットを前もってロードしておくことができます。サーブレットがロードされるとサーブレットクラスのinitメソッドが呼び出されます。
サーブレットをWEBアプリケーション開始時(Tomcat起動時)にロードするにはweb.xmlファイルの<servlet>〜</servlet>にload-on-startup要素を入れます。load-on-startupの値には起動する順番を表す0以上の整数値を設定します。数値が小さいほど早くロードされます。
■web.xmlの編集
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>
  <servlet>
    <servlet-name>myservlet1</servlet-name>
    <servlet-class>javahello.HelloWorldTestServlet1</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet>
    <servlet-name>myservlet2</servlet-name>
    <servlet-class>javahello.HelloWorldTestServlet2</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>
</web-app> 
上記の設定だとWEBアプリケーション開始時にまずjavahello.HelloWorldTestServlet1がロードされて、次にjavahello.HelloWorldTestServlet2がロードされます。サーブレットのinitメソッドの中にWEBアプリケーション開始時にする処理を記述しておくことができます。
■サーブレットの作成
HelloWorldTestServlet1.java(ここからダウンロード)
package javahello;

import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorldTestServlet1 extends HttpServlet {
  // 初期化処理
  public void init() throws ServletException {
    System.out.println("HelloWorldTestServlet1の初期化処理でHello World");
  }
}
HelloWorldTestServlet2.java(ここからダウンロード)
package javahello;

import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorldTestServlet2 extends HttpServlet {
  // 初期化処理
  public void init() throws ServletException {
    System.out.println("HelloWorldTestServlet2の初期化処理でHello World");
  }
}
 
上の2つのサーブレットをコンパイルしてクラスファイルを[Tomcatのフォルダ]\javahello\WEB-INF\classes\javahelloの下にコピーしてください。
■Tomcatの起動
Tomcatを起動してみます。Tomcatが起動したコマンドプロンプトの窓を見てみてください。おおお!!
Start Tomcat
・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・
サービス Tomcat-Standalone を起動します
Apache Tomcat/4.1.18
HelloWorldTestServlet1の初期化処理でHello World
HelloWorldTestServlet2の初期化処理でHello World
・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・
サーブレットがロードされてinitメソッドが呼び出されていますね!
 
■関連
サーブレット編

 
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME