【问题标题】:How to invoke a servlet without mapping in web.xml?如何在没有映射 web.xml 的情况下调用 servlet?
【发布时间】:2011-06-29 04:43:20
【问题描述】:

如何使用以下 URL 调用简单的 servlet: http://localhost:8080/servlet/MyServlet

我把它放在文件夹里:tomcat\webapps\ROOT\WEB-INF\classes

我已经读过没有必要在 web.xml 中提及 servlet。我也这样做了。尽管如此,我还是无法调用它。

【问题讨论】:

    标签: java tomcat servlets


    【解决方案1】:

    我已经读过 web.xml 中没有必要提及 servlet。

    您可能对旧版本的 Apache Tomcat 中存在的遗留 Tomcat 内置 InvokerServlet 感到困惑(并且仍然在糟糕和过时的教程/书籍中提到)。它确实允许调用这样的 servlet,而无需映射任何东西。不过后来证实是security hole and vulrenable to attacks。它在 Tomcat 5.0 上被禁用和弃用,并在 Tomcat 7.0 上被删除。在这种情况下,您确实需要将您的 servlet 映射到 web.xml(并将其放入一个包中!)。

    另一个混乱的来源可能是新的 Servlet 3.0 @WebServlet 注释。当您已经在使用像 Tomcat 7.0 这样的 Servlet 3.0 容器时,您可以使用此注解来映射 servlet,而无需摆弄web.xml

    package com.example;
    
    @WebServlet("/MyServlet")
    public class MyServlet extends HttpServlet {
    
        // ...
    
    }
    

    然后你就可以按照你想要的方式访问它了。

    另见:

    【讨论】:

    • 绝对!非常感谢巴鲁斯!!这是我的第二个问题,你回答了这两个问题。再次感谢!
    • 呃,我在your profile 中没有看到另一个问题?您的帐户似乎未注册。我强烈建议您注册您的帐户,然后请求 SO 版主团队合并您的其他未注册帐户。这样您就可以在任何地方使用同一个用户帐户。
    • @BalusC - 这是我的另一个问题:stackoverflow.com/questions/4737011/… 如何将此问题与我的帐户相关联?非常感谢!
    • 您可以通过标记问题以引起版主注意来做到这一点。我已经为你做了。另一个帐户将很快合并:)
    • 找到“什么是 Servlet Invoker?”在这个页面:javapapers.com/servlet/what-is-servlet-mapping
    【解决方案2】:

    你的 web.xml 文件必须是这样的

    <web-app>
    
    <servlet>
        <servlet-class>mypackage.myservlet</servlet-class> 
                <!--  the full name of your class  -->
        <servlet-name>name</servlet-name>
                <!-- name has be the same in servlet and servlet-mapping -->
    </servlet>
    
    <servlet-mapping>
        <servlet-name>name</servlet-name>
        <url-pattern>/servlet/MyServlet</url-pattern>
    </servlet-mapping>
    

    【讨论】:

    • 我知道如何处理 web.xml!我看了,servlet映射放在ROOT就不用提了。
    【解决方案3】:

    您可以在 web sphere 中实现这一点。通过按类名属性启用 Serve Servlet,需要按照以下步骤执行此操作。

    1. 转到 WebSphere 管理控制台。
    2. 右键单击 WebSphere 服务器 --> 管理控制台。
    3. 单击服务器 --> 服务器类型 --> WebSphere 应用程序服务器 --> server_name(您的服务器名称) --> Web 容器设置 --> Web 容器。
    4. 将定制属性 com.ibm.ws.webcontainer.disallowServeServletsByClassname 值设置为 false。

    【讨论】:

    • 认真的吗?主题是关于Tomcat的。
    • 嗯,问题与 J2EE 有关,没有提到服务器,所以我在 websphere 服务器上发布了答案
    • 好的,如果您认为它的主题不正确,我将删除答案
    猜你喜欢
    • 2018-07-18
    • 2015-03-01
    • 2013-01-20
    • 2016-02-05
    • 2014-06-06
    • 2020-03-27
    • 2012-01-02
    • 1970-01-01
    相关资源
    最近更新 更多