2012-04-16 134 views
0

我已經搜索了高和低的答案/教程沒有喜悅。這個問題一定是微不足道的。瞭解Tomcat中的Servlet路徑擴展

我已經安裝了Tomcat 7.0.27並且正在處理庫存的例子。示例存儲在webapps/examplesserver.xml中,docBasewebapps。示例的HTML索引可通過http://localhost:8080/examples/servlets/訪問。到現在爲止還挺好。

在此頁面上,將鼠標懸停在「Hello World」servlet的「Execute」鏈接上,路徑展開爲:http://localhost:8080/examples/servlets/servlet/HelloWorldExample,當然這會成功執行。但servlet應該擴大到WEB-INF/classes。所以我希望該類的磁盤路徑爲webapps/examples/servlets/WEB-INF/classes/HelloWorldExample.class,事實並非如此。實際路徑是webapps/examples/WEB-INF/classes/HelloWorldExample.class。在servlets目錄中唯一的是HTML和圖像文件。問題1:那是怎麼回事? examples/servlets/servlet如何被重新路由到examples/WEB-INF/classes

問題#2:我將一個已編譯的類Foo.class放入WEB-INF/classes並嘗試通過http://localhost:8080/examples/servlets/servlet/Foohttp://localhost:8080/examples/servlet/Foo訪問它。兩者都產生404未找到。重新啓動的Tomcat(不應該,但乾草什麼)沒有幫助。是什麼賦予了?

回答

0

不能這樣工作。 Servlets!= CGI。沒有擴張。

Servlets在web.xml中專門映射到它們的URL。他們的軟件包名稱或者在WEB-INF中作爲.class放置在.jar中,或者位於類路徑的其他位置,與它們映射到的URL無關。

Addena,在Servlet 3.0中,它們可以被註釋而不是映射到web.xml中。這並不意味着編譯後的類可以「只是放下」。這將是一個容器功能,我不能說Tomcat是否會允許。

+1

我明白這[在Tomcat下運行一個Servlet](http://cs.calstatela.edu/~abbott/Courses/CS_320b/Running%20a%20Servlet%20under%20Tomcat.html)是舊的。但它不準確嗎? – boettger1 2012-04-16 17:44:48

+0

我不能說它的準確性,我不知道Tomcat現在是否支持它。 Tomcat 3非常古老,它並沒有讓我感到驚訝,它曾經支持過這種機制,但是在「Web App」(即WAR文件及其結構和內容)的概念成爲canon之前,這已經回來了。今天,Web應用程序是標準的部署機制。即使Tomcat仍然支持這一點,我會遠離它,只需使用標準的WAR格式。雄貓3歲13歲... – 2012-04-16 20:07:55