前回のJSP,サーブレットを新規コンテキスト(アプリケーション)で実行記 事では
新規コンテキストをデプロイした時にコンテキストのサーブレットを有効にするために
%CATALINA_HOME%\conf\web.xmlファイルの編集をしなければいけないことを書いた。
しかし、そのファイルにこんな記述が・・・
<!-- ======================== Introduction ============================== -->
<!-- This document defines default values for *all* web applications -->
<!-- loaded into this instance of Tomcat. As each application is -->
<!-- deployed, this file is processed, followed by the -->
<!-- "/WEB-INF/web.xml" deployment descriptor from your own -->
<!-- applications. -->
<!-- -->
<!-- WARNING: Do not configure application-specific resources here! -->
<!-- They should go in the "/WEB-INF/web.xml" file in your application. -->
訳
この設定ファイルは全てのコンテキストに適用されるよ。
それぞれのコンテキスト毎に設定したければ/WEB-INF/web.xmlを編集しなさい。
また、両方に同様の設定を記述した場合は/WEB-INF/web.xmlの方が優先される。
最後に警告。
まぁ、上記のようにこの設定ファイルでコンテキストの設定を有効に出来るけどこれは弄るな。
/WEB-INF/web.xmlを弄るようにしろ。
そうなの?なんで?
まぁ、しょうがないのでで/WEB-INF/web.xmlでコンテキストを設定できるように編集してみた。
hogeContextというコンテキスト下のWEB-INF配下にclassesフォルダ,libフォルダ,web.xmファイルを作成。
classesフォルダにhoge.classサーブレット。
また、hogefolderというフォルダも作成しここにもhoge.classサーブレットを準備。
そして、/WEB-INF/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>hoge</servlet-name>
<servlet-class>hoge</servlet-class>HelloWorldServlet
</servlet>
<servlet-mapping>
<servlet-name>Hhoge</servlet-name>
<url-pattern>/hoge</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>hogefolderhoge</servlet-name>
<servlet-class>hogefolder.hoge</servlet-class>HelloWorldServlet
</servlet>
<servlet-mapping>
<servlet-name>hogefolderhoge</servlet-name>
<url-pattern>/hogefolder/hoge</url-pattern>
</servlet-mapping>
</web-app>
tomcatを再起動して終了。
http://localhost:8080/hogeContext/hoge
http://localhost:8080/hogeContext/hogefolder/hoge
でサーブレットが実行される事が確認できました。
しかし、web.xmlファイルではクラスを1つづつマッピングさせないといけないのか?
いや、そんなメンドウな事はないでしょ。この辺りを調査してみよう。