【发布时间】:2011-06-29 04:43:20
【问题描述】:
如何使用以下 URL 调用简单的 servlet: http://localhost:8080/servlet/MyServlet
我把它放在文件夹里:tomcat\webapps\ROOT\WEB-INF\classes
我已经读过没有必要在 web.xml 中提及 servlet。我也这样做了。尽管如此,我还是无法调用它。
【问题讨论】:
如何使用以下 URL 调用简单的 servlet: http://localhost:8080/servlet/MyServlet
我把它放在文件夹里:tomcat\webapps\ROOT\WEB-INF\classes
我已经读过没有必要在 web.xml 中提及 servlet。我也这样做了。尽管如此,我还是无法调用它。
【问题讨论】:
我已经读过 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 {
// ...
}
然后你就可以按照你想要的方式访问它了。
【讨论】:
你的 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 sphere 中实现这一点。通过按类名属性启用 Serve Servlet,需要按照以下步骤执行此操作。
【讨论】: