Eclipse java.lang.IllegalArgumentException:名为[X]和[Y]的servlet都映射到不允许的url模式[/url]

Eclipse java.lang.IllegalArgumentException:名为[X]和[Y]的servlet都映射到不允许的url模式[/url],eclipse,tomcat,servlets,mapping,illegalargumentexception,Eclipse,Tomcat,Servlets,Mapping,Illegalargumentexception,我试图添加这个servlet package com.classmgt.servlet; @WebServlet("/ControllerServlet") public class ControllerServlet extends HttpServlet {} 通过如下编辑web.xml,可以访问我的Eclipse项目 <servlet> <description>Servlet to print out Hello World!</descript

我试图添加这个servlet

package com.classmgt.servlet;

@WebServlet("/ControllerServlet")
public class ControllerServlet extends HttpServlet {}
通过如下编辑
web.xml
,可以访问我的Eclipse项目

<servlet>
    <description>Servlet to print out Hello World!</description>
    <display-name>ControllerServlet</display-name>
    <servlet-name>ControllerServlet</servlet-name>
    <servlet-class>com.classmgt.servlet.ControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>/ControllerServlet</url-pattern>
</servlet-mapping>
我尝试将
metadata complete=“true”
添加到
web.xml
,但它不再识别servlet

原因:java.lang.IllegalArgumentException:名为 [ControllerServlet]和[com.classmgt.servlet.ControllerServlet]是 两者都映射到url模式[/ControllerServlet],该模式不是 允许的

您似乎混合了基于
@WebServlet
注释和基于
web.xml
的配置

我怀疑您是否使用“创建Servlet”向导创建了Servlet,该向导使用url模式创建web.xml条目,然后添加了一个
@WebServlet
注释,该注释复制了您可能在web.xml中放置的任何内容

你应该使用其中一个,而不是两个。从
web.xml
中删除映射,然后只使用
@WebServlet
注释

阅读更多:和

我在不同的包(name='syncro')中创建了新的servlet。我的servlet位于syncro.SynchronizeServlet中 当我在部署描述符(web.xml)中添加关于这个servlet的信息时,我发现了一个错误:IllegalArgumentException

不正确的描述符部件示例:

<servlet>
    <description></description>
    <display-name>SynchronizeServlet</display-name>
    <servlet-name>SynchronizeServlet</servlet-name>
    <servlet-class>SynchronizeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SynchronizeServlet</servlet-name>
    <url-pattern>/SynchronizeServlet</url-pattern>
    <url-pattern>/SynServlet</url-pattern>
  </servlet-mapping>

同步伺服阀
同步伺服阀
同步伺服阀
同步伺服阀
/同步伺服阀
/SynServlet
当我为servlet添加正确的路径时,错误消失了。请更正以下描述:

<servlet>
    <description></description>
    <display-name>syncro.SynchronizeServlet</display-name>
    <servlet-name>syncro.SynchronizeServlet</servlet-name>
    <servlet-class>syncro.SynchronizeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>syncro.SynchronizeServlet</servlet-name>
    <url-pattern>/SynchronizeServlet</url-pattern>
    <url-pattern>/SynServlet</url-pattern>
  </servlet-mapping>

syncro.SynchronizeServlet
syncro.SynchronizeServlet
syncro.SynchronizeServlet
syncro.SynchronizeServlet
/同步伺服阀
/SynServlet

==>73

只需从
ControllerServlet
中删除注释
@WebServlet(“/ControllerServlet”)
,因为它已经添加到
web.xml

中,对我有效的是做一个“清理”

我的问题是在重命名Servlet类时引起的。但是,原始的.class文件保留在目标目录中(带有Servlet注释)。看起来您将ControllerServlet移动到了一个包中

Jetty似乎并不介意这些明显的重复,但Tomcat7给出了您的答案 “两者都映射到url模式”异常


要想知道这是否导致了您的问题,最简单的方法是查看战争中的旧类(在您的例子中,[ControllerServlet]和[com.classmgt.servlet.ControllerServlet])是否都在那里。

至于我,我将tom cat版本添加到我的pom文件中,并且成功了

<properties>
    <tomcat.version>7.0.52</tomcat.version>
</properties>
<dependencies>

7.0.52
名为[Register]和[com.teamination.controller.Register]的servlet 都映射到不允许的url模式[/Register]

如果出现此错误,您必须从web.xml中删除servlet映射,只需添加@WebServlet(“/Register”)注释+url

<servlet>
     <servlet-name>Register</servlet-name>
     <servlet-class>com.TeamWork.controller</servlet-class>
  </servlet>

它会工作的,谢谢

看起来有两个servlet和相同的url模式,但是根据web.xml,只有一个,也许wront web.xml正在运行?尝试重新编译并重新启动?是否混合了基于注释的配置和基于web.xml的配置?在我的ControllerServlet中,我放了以下内容:
@WebServlet(“/ControllerServlet”)
,在我的表单中,我放了以下内容:
您好!73-在业余无线电中,意思是“祝你好运、成功、好运”,谢谢。那是一种高级的利兹峰。
<properties>
    <tomcat.version>7.0.52</tomcat.version>
</properties>
<dependencies>
<servlet>
     <servlet-name>Register</servlet-name>
     <servlet-class>com.TeamWork.controller</servlet-class>
  </servlet>
@WebServlet("/Register")`
public class Register extends HttpServlet { }