了解Tomcat中的servlet路径扩展

时间:2012-04-16 17:30:27

标签: tomcat web-applications servlets

我已经搜索了高低不同的答案/教程而没有任何快乐。问题一定是太微不足道了。

我已经安装了Tomcat 7.0.27并且正在搞乱库存示例。示例存储在webapps/examplesserver.xml中,表示docBasewebapps。可以通过http://localhost:8080/examples/servlets/访问示例的HTML索引。到现在为止还挺好。

在此页面上,将鼠标悬停在“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.classservlets目录中唯一的内容是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(不应该,但干草)没有帮助。是什么给了什么?

1 个答案:

答案 0 :(得分:0)

不能那样工作。 Servlets!= CGI。没有扩张。

Servlet在web.xml中专门映射到其URL。它们的包名称,或WEB-INF中作为.class放置在.jar中,或位于类路径上的其他位置,与它们映射到的URL无关。

Addena,在Servlet 3.0中,可以对它们进行注释,而不是在web.xml中进行映射。这并不一定意味着编译的类可以“只是放入”。那将是一个容器功能,我不能说Tomcat是否允许这样做。