在我的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模式?
答案 0 :(得分:5)
这是因为你在后一种情况下使用了错误的url来获取servlet。
使用正确的网址:
http://localhost:8080/forwardingProxy/testFromWebXML
错误:您在以后的情况下使用了额外的/ OnlinePostListener。
在第一种情况下,指定servlet的映射URL为"/OnlinePostListener/testFromAnnotation"
,因此您已使用此字符串作为http://localhost:8080/forwardingProxy
BUT的附加URL,稍后您将servlet映射到{{1} (而不是/testFromWebXML
)。
但是,如果您坚持使用网址/OnlinePostListener/testFromWebXML
来利用web.xml,则应进行以下更改:
http://localhost:8080/forwardingProxy/OnlinePostListener/testFromWebXML
答案 1 :(得分:3)
因为Servlet规范要求web.xml中定义的映射覆盖而不是添加到注释中定义的映射。原因是如果没有这个,就无法禁用注释中定义的映射。