【问题标题】:@WebServlet Annotation and servlet-mapping differences@WebServlet 注解和 servlet-mapping 的区别
【发布时间】:2012-07-12 17:52:30
【问题描述】:

在我的 servlet 类中,我使用以下注释对该类进行了注释:

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

我的 web.xml 包含以下内容:

<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>

我的 servlet 仅在我访问 URL 时响应:

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

但不是:

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

@WebServlet 的注解和 servlet-mapping 有什么区别? 为什么 servlet 映射不适用于此 URL 模式?

【问题讨论】:

    标签: web-services servlets web.xml url-pattern


    【解决方案1】:

    这是因为你在后面的情况下使用了错误的 url 来获取 servlet。

    使用正确的网址:

    http://localhost:8080/forwardingProxy/testFromWebXML
    

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

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

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

    <servlet-mapping>
        <servlet-name>OnlinePostListener</servlet-name>
        <url-pattern>/OnlinePostListener/testFromWebXML</url-pattern>
    </servlet-mapping>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我知道由于规范,应该总是有一个 servlet 映射。但是,我在 servlet-mapping 中包含的 URL 根本不起作用,而注解起作用。
      • 抱歉误读了这个问题。您引用的第二个 URL 与 web.xml 中的内容不匹配。您在 URL 模式中缺少 /OnlinePostListener。
      • 看完答案后我也觉得不满意。在发布我自己的答案之前没有阅读评论。
      猜你喜欢
      • 2011-11-25
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 2012-01-05
      • 2019-08-20
      • 2013-05-10
      • 2012-08-22
      • 1970-01-01
      相关资源
      最近更新 更多