存在“@WebServlet”注释时出现Servlet Mapping错误

时间:2014-07-14 16:09:24

标签: java xml servlets

我的web.xml看起来像这样:

    <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.ajayramesh.jrecycled.servlets.Login</servlet-class>
    </servlet>

  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>

我有一个名为Login.java的类,其中包含一个自动生成的注释:

@WebServlet("/login")

在我的HttpServlet类扩展声明之上。当存在此注释时,当我尝试启动服务器时出现以下错误:

The servlets named [LoginServlet] and [com.ajayramesh.jrecycled.servlets.Login] are both mapped to the url-pattern [/login] which is not permitted

我的web.xml只有一个定义,只有一个web.xml。当我删除此注释时,服务器工作正常。根据我的理解,注释不应该对程序的运行时有影响,而只是为了优化编译?在旁注中,该注释究竟做了什么?

1 个答案:

答案 0 :(得分:2)

您不能对注释和web.xml使用相同的映射,您可以使用其中任何一个。应用服务器将其视为重复的网址映射。

基本上,在web.xml中声明servlet和servlet-mapping元素等同于用@WebServlet注释servlet类。