- ベストアンサー
Servletの置き場所(ディレクトリ)
現在、Windows2000+Apache1.3.20+TomCATにてAPPサーバを構築したのですが、作成したServletやJSPはどこへ置けばいいのでしょうか? Apacheのドキュメントルートは DocumentRoot "D:/Program Files/Apache Group/Apache/htdocs" でTomCATは D:\Program Files\jakarta-tomcat-3.2.3\ の中にconfやbin,webappsなどすべてのファイル/フォルダが入っています。 どうやら、サンプルはwebappsに入っているようです。 Apacheを起動しなくても、8080ポートで接続すればTomCATの画面が現れるので、なぜApacheが必要なのかという疑問と、ServletやJSPの置き場所は?という疑問にぶつかってます。 どなたかよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> WEB-INF/classes > がURLでは > servlet > となるんでしょうか?決まりですか? 明示的に定義をしなかった場合の決まりです。ここにしか置けない、ということでは 無いです。 URL と実際のファイルの対応付けは、web.xml で行なえます。例えば、 WEB-INF/classes/test.class という名前で置いてあるサーブレットは、 http://ホスト名/servlet/test という URL でアクセスすることになるのは、 前の回答で書きましたが、それを http://ホスト名/test という URL で アクセスしたければ、web.xml に <web-app> <servlet> <servlet-name> test </servlet-name> <servlet-class> test </servlet-class> </servlet> <servlet-mapping> <servlet-name> test </servlet-name> <url-pattern> /test </url-pattern> </servlet-mapping> </web-app> こんな感じの定義をします。servlet タグで、サーブレットのクラスに名前を 割り当ててあげて、servlet-mapping タグで、その名前に対して URL を割り当てる という感じです。 web.xml は、conf/ 配下にもありますし、WEB-INF/ 配下にもあります。 サーブレットの URL の定義だったら、WEB-INF/ 配下の方が良いでしょう。 > ApacheのWEBサーバでAliasを作成したわけでもないのになぜこんなことができてしまうのか? mod_jk を使っているんですね? conf/mod_jk.conf をベースにした定義ファイルを apache の httpd.conf に 記述するか、インクルードしていると思います。それがポート:80 を使った場合の 動作の定義になります。 mod_jk.conf にある JkMount で定義したパターンに当てはまる URL は tomcat の方に転送されます。デフォルトのままだとポート:8007 が使われるはず。 ポート:8080 を使った場合には、conf/server.xml の Connector タグでの 記述が使われます。
その他の回答 (2)
>Apacheを起動しなくても、8080ポートで接続すればTomCATの画面が現れるので、 >なぜApacheが必要なのかという疑問 上記の疑問ですが、単純にサーブレットを実行するだけであれば、tomcatが持つ WEBサーバ機能だけで十分です。 ただし、tomcatが持つWEBサーバ機能はあくまでサーブレットの単体テストを 行う環境を提供する程度の意味しかもたず、実際にインターネット上に公開して サーブレットを実行できるようなWEBサーバを構築しようと思った場合、tomcat のWEBサーバ機能は、セキュリティなどの面であまりにも貧弱です。 というわけで、通常はtomcatに限らず、いろんなサーブレットコンテナは とりあえずWEBサーバ機能は持っているものの、ApacheやIISといった本職の WEBサーバにアドオンして動作出来るように作られています。 > あと、URLでexamples以下のディレクトリは > port8080でもport80でも同じ画面が出てきます。 > port80はApacheのWEBサーバ機能 > port8080はTomcatのWEBサーバ機能 > ということはわかっているのですが、ApacheのWEBサーバでAliasを作成した > わけでもないのになぜこんなことができてしまうのか?ひょっとすると > ApacheTomcat連携モジュールであるmod_jk.dllをD:\Program Files\Apache > Group\Apache\modulesにインストールしたからでしょうか? これは、おっしゃる通り連携モジュールのおかげです。 連携モジュールの中身を見たわけではないので、類推に過ぎませんが、 tomcatのApache連携モジュールは、Apacheへのリクエストを監視して、 それが自分のコンフィグファイル(server.xml)に記述されたURLへの 参照である場合に、ユーザからのリクエストを横取りして処理を行っている ようです。 なので、Apacheのhttpd.confの中にtomcat用の連携モジュールのロード命令が あるはずですが、それをコメントアウトすると、ポート80ではexamples配下の 内容は見えなくなるはずです。 # 試したわけではありませんが。。。
お礼
ありがとうございます。 簡易WEBサーバとしてなら、Tomcatでも言いということですね。スッキリしました。ありがとうございます
- a-kuma
- ベストアンサー率50% (1122/2211)
> 作成したServletやJSPはどこへ置けばいいのでしょうか? tomcat のインストールディレクトリの下にある conf ディレクトリの server.xml で 置き場所を定義します。 デフォルトで、以下のような定義があるはずです。 <Context path="/examples" docBase="webapps/examples" crossContext="false" debug="0" reloadable="true" > </Context> これは http://ホスト名/examples/なんとか というリクエストは、(インストール ディレクトリ配下の)webapps/examples の下を探すよ、という意味です。 基本的に jsp は、html と同じように、配置ディレクトリが URL に対応すると 思って良いです。例えば、webapps/examples/a-kuma/test.html というファイルは http://ホスト名/examples/a-kuma/test.html という URL に対応します。 servlet は、基本的に配置ディレクトリ配下の WEB-INF/classes に配置します。 何も考えなければ、webapps/examples/WEB-INF/classes/test.class という servlet は、http://ホスト名/examples/servlet/test という URL に対応します。 ただ、java で言うパッケージや、classpath の通し方、web.xml というファイルの 定義で、ファイルと URL の対応はいろいろバリエーションがあります。
お礼
ありがとうございました。 servletだけちょっと変わったところにおく必要があるんですね。でもなんで WEB-INF/classes がURLでは servlet となるんでしょうか?決まりですか?それともどこかで定義しているんでしょうか? あと、URLでexamples以下のディレクトリは port8080でもport80でも同じ画面が出てきます。 port80はApacheのWEBサーバ機能 port8080はTomcatのWEBサーバ機能 ということはわかっているのですが、ApacheのWEBサーバでAliasを作成したわけでもないのになぜこんなことができてしまうのか?ひょっとするとApacheTomcat連携モジュールであるmod_jk.dllをD:\Program Files\Apache Group\Apache\modulesにインストールしたからでしょうか?
お礼
ありがとうございます。非常によく理解できました。 今後ともよろしくお願いします。