我正在尝试将应用程序加载到本地tomcat实例。当我在启动tomcat后将地址输入到URL栏中时,即使资源存在,我也会收到404-not found错误。我做了很多试验和错误,并在DD文件中找到了一些东西。部署描述符的一部分包含以下代码..
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
当我从web.xml文件中评论此部分时,我能够成功从浏览器获取资源。所以我很确定问题出现在这段代码中,但我无法理解它是什么。有人可以解释这段代码在做什么以及为什么我会收到这个错误。提前谢谢。
编辑:为了记录,我试图直接访问根文件夹下的资源。 .. http://localhost/myapp/index.jsp
答案 0 :(得分:0)
这是遗留的特定于Tomcat的InvokerServlet
,它存在于古老版本的Apache Tomcat中(并且仍在穷人和过时的教程/书中提到)。在黑暗时代曾经能够调用servlet而无需在web.xml
中映射它们。您只需在/servlet
路径后面的URL中输入完全限定的servlet类名。
后来证实它是security hole and vulrenable to attacks。它在2002年左右在Tomcat 5.0上被禁用和弃用(!),并在2009年左右在Tomcat 7.0中被删除。
您可以安全地删除它。它没有增加任何价值。从Tomcat 7.0 / Servlet 3.0开始,您甚至不需要在web.xml
中映射servlet了。您可以改为使用@WebServlet
注释。
package com.example;
@WebServlet(urlPatterns = { "/MyServlet" })
public class MyServlet extends HttpServlet {
// ...
}
至于具体的问题,为什么在删除它之后它会起作用,你可能会使用错误的URL。也许你已经调用了你的上下文根路径servlet
?