Tomcatでhttp://localhost:8080/ で任意のアプリを動かす
なんとかならないものかと何年も前から思いつつもそれほど大問題というわけでもないのでほっといた件を少しだけ調べてみた。「http://localhost:8080/applicationname/(index.jsp) ではなくて http://localhost:8080/(index.jsp) でアプリを提供するためのスマートな方法はないものか?」
Tomcatをポート8080番で立ち上げているとして、http://localhost:8080/ でアクセスできるapplicationルートは $CATALINA_HOME/webapps/ROOT/index.html(or index.jsp) である。普通はTomcatのネコの絵が描いてあるおなじみの画面が見える。この「ROOT」という名前は変更することができない。Tomcat内部でハードコーディングされてしまっているから。
しょうがないからROOTというディレクトリ名で我慢するとして、ROOTアプリケーションの設定値=普通はserver.xmlに書くような=をどうするかというと、
$CATALINA_HOME/conf/server.xml の内部に
<Context path="" ....
とか
<Context path="/" ....
とか
<Context path="ROOT" ....
とかやってもだめ。設定が利かない(俺だけ?)。正解は
$CATALINA_HOME/conf/Catalina/localhost/ROOT.xml
の中に
<Context docBase="/foo/bar/fugaapp" ...
のように書く。それで http://localhost:8080/ というURLで ファイルシステム上の /foo/bar/fugaapp/index.jsp
が呼ばれるようになる。path="アプリ名" の部分はいらない。あっても無視されるっぽい。
初耳だったのが、
Apache Tomcat 設定リファレンス - Context コンテナ
Tomcat 6 では,Tomcat 4.x と異なり, <Context> 要素を直接 server.xml ファイルに置くことは推奨されない。 なぜなら,Tomcat を再起動することなしにはメインの conf/server.xml ファイルを再ロードできないから,Context 設定の修正がより出しゃばったものになるからである。
そういわれるとそのとおりだが、いつのまにそんなことに。Tomcat4.x時代を引きずりすぎなオレ化石(涙)。つまり、「$CATALINA_HOME/conf/Catalina/localhost/Webアプリ名.xml」で設定するほうがいまはフツーらしい。5.5のドキュメントにも同じこと書いてあった。

コメントする
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)