Thursday, June 07, 2007

Web アプリケーションのコンテクストパスを多重化する方法はあるか?

webapp1 という Web アプリケーションがあるとしよう。Tomcat ならば、CATALINA_HOME/webapps/ に webapp1.war というファイルがあるものとする(むろん、配備の仕方はこれ以外にもあるが)。

このとき、

http://www.fortune.com/webapp1/SomethingServlet

のようなパスでこの Web アプリにアクセスできる。これに /packman というコンテクストパスでもアクセスできるようにするには、CATALINA_HOME/webapps/ に次のような内容の XML フラグメントファイルをおけばいい。


<?xml version="1.0" encoding="EUC-JP" ?>
<!--
ファイル名は packman.xml でも hoge.xml でも何でもいい。
-->
<Context path="/packman" docBase="./webapp1.war"
debug="0" privileged="true">
</Context>


こうしてから、

http://www.fortune.com/packman/SomethingServlet

によるアクセスが成功する。ただし、この方法には重大な欠陥がある。これだと、webapp1 というアプリケーションが二重に起動されてしまうのだ。つまり、アプリケーションのインスタンスが2つできてしまう

一方の Web アプリから他方の Web アプリにリクエストを転送することで1つの Web アプリを共用化することはできる。ただ、いろいろ調べてみたが、Unix のシンボリックリンクのようにパスを多重化しつつ、ファイルの実体は1つだけにするというようなことはできないようだ。

検索をかけてみると、日本語のページはヒットしなかったが、英語では1つだけヒットした。

How to configure multiple context path for a webapps

No comments: