しかし、まあ、「五十の手習い」で今更ながら Java の勉強なんか始めると、いろいろ戸惑うことも多いですなあ。
いろいろテストしてみるためにサーバに Tomcat を入れたんですが(インストール自体は仕事で何度もしたことありますが)、webapps の下の ROOT ってなんですのん?
いや、いわゆる DocumentRoot なんだろうけど、でも、war ファイルを webapps 上にデプロイして展開した Web サービスって、ROOT ディレクトリと同じ並びにできるじゃん?
例えば、struts1 のサンプルである struts-examples-1.3.10.war ファイルを webapps 上に転送すると、デプロイされて、struts-examples-1.3.10 ってディレクトリ以下にコンテンツが配置されるじゃん。ROOT の下にじゃなくて、ROOT と同じ並びに。
で、
http://www.exsample.jp:8080/
にアクセスすれば webapps/ROOT の下が参照されるし、
http://www.exsample.jp:8080/struts-examples-1.3.10/
にアクセスすれば、webapps/struts-examples-1.3.10 の下が参照されるよね。(Tomcat のポート番号が 8080 の場合)
で、これ、ROOT の下に同じ名前「struts-examples-1.3.10」ってのが存在していたらどうなるんかね?
うちのテストサーバで試してみた。
うちは Apache と Tomcat を連携させていて、直接ポート番号指定で Tomcat にアクセスしてもダメなようにしてる。
httpd.conf には、
<Location /s/>ProxyPass ajp://localhost:8080/</Location>
こういうプロキシ設定が書き込まれている。
これで、http://www.exsample.jp/s/ にアクセスすると、http://www.exsample.jp:8080/ にアクセスしたのと同じ内容が参照できるわけやね。Tomcat の webapps/ROOT ディレクトリ以下を見ている。
で、http://www.exsample.jp/s/struts-examples-1.3.10/ にアクセスすれば、http://www.exsample.jp:8080/struts-examples-1.3.10/ にアクセスしたのと同様の内容が参照される。
まあ、/s/ を Tomcat の /(ルート)に連携しているんだからそうなるわな。
この時、ROOT の下に struts-examples-1.3.10 という名前のディレクトリを掘って、http://www.exsample.jp/s/struts-examples-1.3.10/ にアクセスしても、決して webapps/ROOT/struts-examples-1.3.10 は参照されない。
参照されるのは、必ず webapps/struts-examples-1.3.10 である。
どこかに設定が書き込まれているのかと grep してみたけど無いようだなあ。
ということは、Tomcat が(例えば起動時や、デプロイ時に)webapps の下を見て動的に制御してるってことか。
もちろん struts-examples-1.3.10 以外の、例えば test というディレクトリを ROOT 以下に掘ってやれば、http://www.exsample.jp/s/test/ でそのディレクトリが参照される。
つまり、ROOT と同じ並びにあるディレクトリと同じ名前のディレクトリを ROOT 以下に作ってもダメってことだな。
webapps ディレクトリが DocumentRoot で、Apache で言えば、
<Location />ProxyPass /webapps/ROOT/</Location>
<Location /struts-examples-1.3.10/>ProxyPass /webapps/struts-examples-1.3.10/</Location>
みたいなプロキシ情報が自動で生成されているってことか?
なんかこの ROOT の存在がほんと気持ち悪いんだけど、気にせず先に進むことにしよう(^^;
コメントする