【问题标题】:issue with deployment descriptor部署描述符问题
【发布时间】:2011-03-22 20:38:18
【问题描述】:

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

【问题讨论】:

    标签: jsp servlets web.xml deployment-descriptor


    【解决方案1】:

    这是 Tomcat 特有的旧版 InvokerServlet,它出现在古老版本的 Apache Tomcat 中(并且仍然在糟糕和过时的教程/书籍中提到)。在黑暗时代,无需在 web.xml 中映射它们就可以调用 servlet。您只需在/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

    【讨论】:

    • 非常感谢您的回复。是的..你是对的。这是一个非常古老的应用程序(在 2000 年左右开发),现在他们希望我修复其中的错误 :( :(。我从来没有使用过旧版本的 tomcat(
    • 关于上下文根.. 不,只有当我直接在上下文根下调用资源时它才有效(我的意思是在 WEB-INF 之外).. 就像 jsp 文件一样。如果我用 /servlet 调用某些东西,我会收到错误
    • 还是删除它。您需要自己映射所有缺少的 servlet。扫描extends HttpServlet 的类并验证它们是否映射到web.xml
    • 好的,谢谢。会尝试的。但只是为了知识..这个应用程序仍然在生产机器上的 Tomcat6 上成功运行。那么服务器上是否配置了一些东西以使其正常运行?为什么我会收到错误消息?
    • 老实说,我不确定。可能是一些 Tomcat 内置预防措施,以防止 InvokerServlet 获取(ab)使用 :) 你使用的是什么 Tomcat 版本?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2020-02-15
    • 1970-01-01
    相关资源
    最近更新 更多