2012-04-16 4 views
0

私はこれについての高低を喜んで検索しました。あまりにも簡単な質問でなければなりません。Tomcatでのサーブレットのパスの拡張の理解

私はTomcat 7.0.27をインストールしました。在庫の例を使いこなしています。例はwebapps/examplesに格納され、server.xmldocBasewebappsと表示されています。例のHTMLインデックスにはhttp://localhost:8080/examples/servlets/でアクセスします。ここまでは順調ですね。

このページでは、「Hello World」サーブレットの「実行」リンクにカーソルを置くと、パスは次のように展開されます。http://localhost:8080/examples/servlets/servlet/HelloWorldExample、もちろん正常に実行されます。しかし、servletWEB-INF/classesに拡大されるはずです。だから私はクラスへのディスク上のパスがwebapps/examples/servlets/WEB-INF/classes/HelloWorldExample.classであることを期待します。それはそうではありません。実際のパスはwebapps/examples/WEB-INF/classes/HelloWorldExample.classです。 servletsディレクトリにある唯一のものは、HTMLおよびイメージファイルです。質問#1:それは何ですか? examples/servlets/servletexamples/WEB-INF/classesにどのように再ルーティングされましたか?

質問#2:コンパイルされたクラスFoo.classWEB-INF/classesにドロップし、http://localhost:8080/examples/servlets/servlet/Foohttp://localhost:8080/examples/servlet/Fooの両方にアクセスしようとします。どちらも404が見つかりません。 Tomcatを再起動しました(必要はないはずですが、何が乾草か)。何がありますか?

答えて

0

このようには機能しません。サーブレット!= CGI。拡張はありません。

サーブレットは、web.xml内で具体的にURLにマップされます。それらのパッケージ名、またはWEB-INF内の.classとしての.jar内の配置、またはクラスパス上の他の場所に配置されたURLは、それらがマップされているURLに関係しません。

Addena、サーブレット3.0では、web.xmlにマップされずに注釈を付けることができます。コンパイルされたクラスが「ちょうど落とされた」ということを必ずしも意味するわけではありません。それはコンテナの機能ですが、Tomcatが許可するかどうかは言えません。

+1

[Tomcatの下でサーブレットを実行する](http://cs.calstatela.edu/~abbott/Courses/CS_320b/Running%20a%20Servlet%20under%20Tomcat.html)が古くなっていることに感謝します。しかし、それは不正確ですか? – boettger1

+0

私はその正確さについて話すことができません。Tomcatがこれをサポートしているかどうかはわかりません。 Tomcat 3は非常に古く、かつてこのような仕組みをサポートしていたことは驚きではありませんでしたが、それは "Web App"(すなわちWARファイルとその構造と内容)のコンセプトがキヤノンになる前です。今日、Webアプリケーションは標準のデプロイメント・メカニズムです。たとえTomcatがこれをまだサポートしていたとしても、私はそれを離れて、単純なWAR形式で作業します。 Tomcat 3は13歳です... –

関連する問題