2

In my servlet class, I have annotated the class with:

@WebServlet("/OnlinePostListener/testFromAnnotation")
public class OnlinePostListener extends HttpServlet {
   ...
}

My web.xml contains the following:

<servlet>
    <description>
    </description>
    <display-name>OnlinePostListener</display-name>
    <servlet-name>OnlinePostListener</servlet-name>
    <servlet-class>com.me.forwardingProxy.OnlinePostListener</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>OnlinePostListener</servlet-name>
    <url-pattern>/testFromWebXML</url-pattern>
</servlet-mapping>

My servlet only responds when I access the URL:

http://localhost:8080/forwardingProxy/OnlinePostListener/testFromAnnotation

but not:

http://localhost:8080/forwardingProxy/OnlinePostListener/testFromWebXML

What is the difference between the @WebServlet's annotation and servlet-mapping? Why is the servlet-mapping not working for this URL-pattern?

4

2 回答 2

5

这是因为您在后一种情况下使用错误的 url 来获取 servlet。

使用正确的网址:

http://localhost:8080/forwardingProxy/testFromWebXML

错误:您在后一种情况下使用了额外的 /OnlinePostListener。

在第一种情况下,您为指定 servlet 映射的 URL"/OnlinePostListener/testFromAnnotation"因此您已使用此字符串作为附加 URL,http://localhost:8080/forwardingProxy但在后一种情况下,您已将 servlet 映射到/testFromWebXML( AND NOT /OnlinePostListener/testFromWebXML)。

但是,如果您坚持使用 URLhttp://localhost:8080/forwardingProxy/OnlinePostListener/testFromWebXML来利用 web.xml,您应该进行以下更改:

<servlet-mapping>
    <servlet-name>OnlinePostListener</servlet-name>
    <url-pattern>/OnlinePostListener/testFromWebXML</url-pattern>
</servlet-mapping>
于 2014-11-05T12:35:56.183 回答
4

因为 Servlet 规范要求 web.xml 中定义的映射覆盖而不是添加到注释中定义的映射。原因是没有这个,就无法禁用注释中定义的映射。

于 2012-07-12T18:38:45.980 回答