UNIXな生活
更新:2004/6/10  
Linuxな生活  FreeBSDな生活
 Solarisな生活
 JAVAな生活
 Practical use
 掲示版
web.xmlの設定によるTomcat Webアプリケーションの制御

 web.xml(展開記述子)によって、WEBアプリケーションの動作を制御します。
 Tomcatでは、web.xmlは以下の2つ存在します。
 $CATALINA_HOME/conf/web.xml <---------------------Tomcatに含まれる全てのアプリケーションが対称
 $CATALINA_HOME/webapps/アプリ/WEB-INF/web.xml <--個別のアプリケーションが対称
 *要素の使用方法は、私が普段よく使用する物に付いてのみ記述してあります。

Tomcatのweb.xml($CATALINA_HOME/conf/web.xml)
 このファイルは、Tomcatで動作するアプリケーション全てのデフォルト値として利用されます。
 最低限変更(確認)するべき場所は、Servletの簡易呼出(invoker)の設定です。これはコメントにしておきましょう。
<!--
	<servlet>
	<servlet-name>invoker</servlet-name>
	<servlet-class>
			org.apache.catalina.servlets.InvokerServlet
	</servlet-class>
-->

*servletの簡易呼び出し(invoker)
 invokerの設定があると、 "http://localhost/test/servlet/Hello"でServletの呼び出しができます。
 本来、Servletへのアクセスは web.xmlの<servlet-mapping>で指定しアクセスさせるべきもので、これは無効にしておきます。
 もし、簡易アクセスができる場合は、ユーザーから直接実行されては困るクラスを呼び出される可能性があり、場合によってはセキュリティーホールにもなりかねます。
 なお、この設定方法は、Tomcat-4と5系用ですがTomcat-3では違う方法になります。
 Tomcat-3系は、$CATALINA_HOME/conf/server.xmlの<RequestInterceptor --中略-- />行をコメントにします。

アプリケーション用web.xml($CATALINA_HOME/webapps/アプリ/WEB-INF/web.xml)
ヘッダとルート要素を指定しweb.xmlファイルを作成する
 web.xmlを作成します。この時Tomcatのバージョンによってヘッダの書式が異なります。
・Tomcat-5系と4系
<?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-3系
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app 
	 PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" 
				"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
</web-app>

これがweb.xmlの雛型になります。この中の<web-app>から</web-app>間にいろいろな要素を設定して行きます。
なお、要素を記述するのには、要素の順番に注意してください。順番はページ末の表を参照してください。

アプリケーション全体での初期化パラメータを定義する。(<context-param>)
この要素に設定した値は、WEBアプリケーション内から取得することができます。
<context-param>
    <param-name>CommonValue</param-name>
    <param-value>This Common Message</param-value>
</context-param>
この要素から値を取得するには、
ServerContext context = getServletContext();
String value = context.getInitParameter("CommonValue");
注)取得するデータ型はStringです。

JSPやServletに初期化パラメータを付加する。(<servlet>)
・Servlet編
<servlet>
    <servlet-name>logs</servlet-name>
    <servlet-class>LogWriterServlet</servlet-class>
    <init-param>
          <param-name>logFile</param-name>
          <param-value>/WEB-INF/logs/app.log</param-value>
    </init-param>
</servlet>
この例は、私が使用しているLogを出力するクラスで、書き出すログファイルのPATHをweb.xmlから取得しています。
LogWriterServlet上から、以下のメソッドで値を取得します。
ServletConfig config =getServletConfig();
String logFilePath=config.getInitParameter("logFile");
注)取得できる値は、Stringです。

・JSP編
<servlet>
    <servlet-name>index</servlet-name>
    <jsp-file>/index.jsp</jsp-file>
    <init-param>
          <param-name>message</param-name>
          <param-value>Welcome My Page</param-value>
    </init-param>
</servlet>
これでindex.jspから値を取得できます。値の取得方法はServletの時と同様です。
注)取得できる値は、Stringです。

Tomcatの起動と同時に、Servletクラスを呼び出す(<servlet>)
Tomcatの起動と同時に開始したいServletを指定します。
例は、私が利用しているDBコネクションプーリングを実現するDBConnectionPoolクラスの場合です。
<servlet>
        <servlet-name>dbpool</servlet-name>
        <servlet-class>dbutil.DBConnectionPoolStart</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>
複数のサーブレットを起動したい場合は、<load-startup>の数字で順番を指定します。
注)対称はServletクラスです。通常のJAVAクラスやBeanは指定できません。

JSPとServletにカスタムURLを定義する。(<servlet>,<servlet-mapping>)
ブラウザから任意のURLでアクセスできるようにします。
*アプリケーション=test
*JSP=test/index.jsp
*Servlet=test/WEB-INF/classes/Hello.class
<servlet>
      <servlet-name>index</servlet-name>
      <jsp-file>/index.jsp</jsp-file>
</servlet>
<servlet>
      <servlet-name>Hello</servlet-name>
      <servlet-class>Hello</servlet-class>
</servlet>
<servlet-mapping>
      <servlet-name>index</servlet-name>
      <url-pattern>/index.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
      <servlet-name>Hello</servlet-name>
      <url-pattern>/hello.html</url-pattern>
</servlet-mapping>
まず、<servlet>内の、<servlet-name>でJSPファイルやServletに、web.xml内で使用する名前を付けます。
この時、JSPは<jsp-file>で指定、Servletは<servlet-class>で指定します。
次に、<servlet-mapping>で、それぞれのURL呼び出しを指定します。
<servlet-name>では、<servlet>で付けた名前を指定します。
<url-mapping>で、JSPまたはServletに対しての、呼び出しURLを指定します。
今回の例では、
URL=http://localhost/test/index.html <------index.jspの呼び出しURL
URL=http://localhost/test/hello.html <------Hello.classの呼び出しURL

セッションのタイムアウト時間を設定する(<session-config>)
アプリケーション内で保持しているセッションオブジェクトを規定時間で消去します。
指定は、"分"です。
<session-config>
     <session-timeout>60</session-timeout>
</session-config>

URLがディレクトリ指定だった場合に返す初期ファイルを指定する(<welcome-file-list>)
ここでは2つ定義してあります。
<welcome-file-list>
     <welcome-file>index.jsp</welcome-file>
     <welcome-file>../index.jsp</welcome-file>
</welcome-file-list>
1番目は、"http: //localhost/maindir/"でアクセスされた場合。
2番目は、"http://localhost/maindir/subdir/"などでアクセスされた場合。
返されるのは、トップのindex.jspを指定しています。
welcom-file-listには、jsp.htmlが指定できます。また、Tomcat-5.0系からはServletも指定できます。
(mappingしてあるURLにはアクセスできません。)

エラーページを指定する(<error-page>)
HTTPステータスエラーやjava,exceptionが発生した場合に、指定のファイルにリダイレクトします。
<error-page>
    <error-code>404</error-code>
    <location>/err/404.html</location>
</error-page>
<error-page>
   <exception-type>java.sql.SQLException</exception-type>
   <location>/err/db.html</location>
</error-page>
1番目は、HTTPステータスコード:404が返された場合の、旋回ページを指定。
2番目は、java.sql.SQLExceptionがthrowされた場合の、旋回ページを指定。

タグライブラリの場所を指定し、JSPから簡素に呼び出せるようにする。(<taglib>)
JSPでタグライブラリを使用する場合に便利です。
<taglib>
    <taglib-uri>/mytag.tld</taglib-uri>
    <taglib-location>/WEB-INF/tlds/mytag-taglib.tld</taglib-location>
</taglib>
この場合、JSPから以下のようにすると、tagライブラリにアクセスします。
<%@ taglib uri="/mytag.tld" prefix="******" %>

web-app展開記述子の要素項目一覧
注)要素は、下記表の順番で <web-app>内に記述する必要があります。
<
要素名設定できる内容
iconGUIツールがこのアプリケーションを表すために使用するイメージファイルを指定
display-nameGUIツールが使用する、このアプリケーションのラベルを指定
descriptionGUIツールが使用する、アプリケーションの説明を記述
distributableこのアプリケーションを、クラスタサーバに配布しても安全であることを示す
context-paramアプリケーションで全域で使用する、初期化パラメータを指定
filterjavax.servlet.Filterインターフェースを実装したクラスに名前を付ける
filter-mapping名前付けされたフィルタを、JSPや Servletと関連付ける
listenerセッションやサーブレットコンテキストが、" 作成された/修正された/破壊された"のいずれかに該当する場合のイベント通知を行うイベントリスナークラスを指定
servletサーブレットやJSPの初期化パラメータや URL割り当てを行う場合にJSPやサーブレットに名前付けする
servlet-mapping名前付けしたサーブレットにアクセスする URLを指定
session-configセッションのデフォルトタイムアウト時間を設定
mime-mapping特殊なファイルに確実にMIMEを設定したい場合は、ここでファイルにMIMEを設定。
$CATALINA_HOME/conf/web.xmlに設定があります。書式はそちらを参照してください。
welcome-file-listURLがディレクトリ指定だった場合に返すデフォルトファイルを指定
error-pageHTTPステータスコードや Exceptionが投げられた場合に、クライアントに返されるファイルを指定
taglibタグライブラリデスクプタファイルのエイリアスを指定
resource-env-refリソースに結び付いているオブジェクトを指定
resource-refリソースファクトリで使用する、外部のリソースを指定
security-constraintアクセス制限するURLを指定
login-configアクセス制限されたURLへのアクセスがあった時のユーザー認証方法を指定
security-role高度なIDEがセキュリティー情報を操作するための指定
env-entry環境エントリーを指定
ejb-refEJBのホームの参照を指定
ejb-local-refEJBのローカルホームを指定



Producted by Tomoya Sakurai