tomcat - 了解 Tomcat 中的 servlet 路径扩展

标签 tomcat web-applications servlets

我已经到处寻找答案/教程,但并不高兴。这个问题一定太琐碎了。

我已经安装了 Tomcat 7.0.27,并且正在处理现有示例。示例存储在 webapps/examples 中,server.xml 表示 docBasewebapps。示例的 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.classservlets 目录中唯一的东西是 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/

相关文章:

android - 分析移动 Web 应用程序的最佳方法是什么?

user-interface - 生产中使用的错误处理策略

tomcat - Servlet 可以直接在 localhost 上访问,但不能在站点名称后访问

java - 在 Tomcat 6 的 List Applications 中找不到已部署的应用程序

java - 有没有等同于@Startup的spring?

mysql - 无法重启 Tomcat 盒式磁带

java - 动态更改 JSESSIONID cookie 的域?

java - 两个 Web 应用程序之间的 session 共享 : tomcat

facebook - Facebook 的 "Single Sign On"可以在移动网络应用程序中实现吗?

java - HTTP 404 资源未找到