我已经到处寻找答案/教程,但并不高兴。这个问题一定太琐碎了。
我已经安装了 Tomcat 7.0.27,并且正在处理现有示例。示例存储在 webapps/examples
中,server.xml
表示 docBase
是 webapps
。示例的 HTML 索引可通过 http://localhost:8080/examples/servlets/
访问。到目前为止,一切都很好。
在此页面上,将鼠标悬停在“Hello World”servlet 的“执行”链接上,路径扩展为: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/Foo
并通过 http://localhost:8080/examples/servlet/Foo
。两者都产生 404 not found。重新启动 Tomcat(不应该,但没有帮助)。给了什么?
最佳答案
不是这样的。小服务程序!= CGI。没有展开。
Servlet 在 web.xml 中专门映射到它们的 URL。它们的包名称或在 WEB-INF 中作为 .class、.jar 或位于类路径上的其他位置的位置与它们映射到的 URL 无关。
Addena,在Servlet 3.0中,它们可以被注解而不是映射到web.xml中。这并不一定意味着可以“直接插入”已编译的类。那将是一个容器功能,我不能说 Tomcat 是否允许这样做。
关于tomcat - 了解 Tomcat 中的 servlet 路径扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10178803/