如何在web.xml中没有映射的情况下调用servlet?

时间:2011-02-17 15:32:57

标签: java tomcat servlets

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

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

我读过没有必要在web.xml中提到servlet。我做了同样的事。不过,我无法援引它。

3 个答案:

答案 0 :(得分:23)

  

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

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

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

package com.example;

@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {

    // ...

}

然后您就可以按照自己的方式访问它了。

另见:

答案 1 :(得分: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>

答案 2 :(得分:0)

您可以在Web范围内实现此功能。通过按类名称启用Serve Servlet属性,需要按照以下步骤执行此操作。 1.转到WebSphere Admin Console。 2.右键单击WebSphere Server - &gt;管理控制台。 3.单击服务器 - &gt;服务器类型 - &gt; WebSphere应用程序服务器 - &gt; server_name(服务器名称的名称) - &gt; Web容器设置 - &gt; Web容器。 4.将自定义属性com.ibm.ws.webcontainer.disallowServeServletsByClassname值设置为false。