部署描述符问题

时间:2011-03-22 20:38:19

标签: jsp servlets web.xml deployment-descriptor

我正在尝试将应用程序加载到本地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

1 个答案:

答案 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