java.lang.IollegalArgumentException:名为[X]和[Y]的servlet都映射到url



我尝试添加这个servlet

package com.classmgt.servlet;
@WebServlet("/ControllerServlet")
public class ControllerServlet extends HttpServlet {}

到我的Eclipse项目,通过如下编辑web.xml

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

然而,我得到了以下例外:

SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ClassManagementSystem]]
    at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ClassManagementSystem]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 7 more
Caused by: java.lang.IllegalArgumentException: The servlets named [ControllerServlet] and [com.classmgt.servlet.ControllerServlet] are both mapped to the url-pattern [/ControllerServlet] which is not permitted
    at org.apache.catalina.deploy.WebXml.addServletMapping(WebXml.java:335)
    at org.apache.catalina.startup.ContextConfig.processAnnotationWebServlet(ContextConfig.java:2457)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2139)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2100)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2093)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2093)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2093)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1300)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5269)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 7 more

我已经尝试将metadata-complete="true"添加到web.xml中,但它不再识别servlet。

引起原因:java.lang.IollegalArgumentException:名为[ControllerServlet]和[com.classmgt.servlet.ControllerSrvlet]是两者都映射到url模式[/ControllerServlet]允许

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

我怀疑您是否使用"创建Servlet"向导创建了Servlet,该向导创建了具有url模式的web.xml条目,然后添加了@WebServlet注释,该注释复制了您可能放入web.xml中的任何内容。

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

阅读更多:Servlet 3.0注释和我们的Servlet wiki页面。

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

java.lang.IllegalArgumentException: The servlets named...

我在不同的包中创建了新的servlet(name="syncro"(,从而获得了这个原因。我的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>

当我为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>

===>73!

对我有用的是做一次"清理"。

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

Jetty似乎并不介意这些明显的重复,但Tomcat7给了你"均映射到url模式"异常。

查看这是否导致问题的简单方法是查看WAR中的旧类(在您的案例中为[ControllerServlet]和[com.classmgt.servlet.ControllerSrvlet](是否都存在。

至于我,我将tom-cat版本添加到了我的pom文件中,它在中工作

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

名为[注册]和[团队工作控制器注册]的servlet都映射到不允许的url模式[/Register]

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

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

然后顶部的servlet类添加这个

@WebServlet("/Register")`
public class Register extends HttpServlet { }

它将工作感谢

对我来说,这是Intellij Idea中的一个意外错误。

2天前,我删除了一个servlet,该servlet具有相同的URL模式。然而,我得到的错误是,我的新servlet和已删除的servlet具有相同的URL模式。这很奇怪。

  1. 尝试清理Tomcat v10.0.23服务器
  2. 重新启动服务器
  3. 构建分解的工件
  4. 已重新启动IDE

什么都不管用!!

最后,我在调试模式下运行该项目,从而解决了我的问题
这很奇怪,但也许我做错了什么,这就是我面临这个问题的原因。

希望这能帮助那些面临同样问题的人。

相关内容

  • 没有找到相关文章

最新更新