我尝试添加这个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模式。这很奇怪。
- 尝试清理Tomcat v10.0.23服务器
- 重新启动服务器
- 构建分解的工件
- 已重新启动IDE
什么都不管用!!
最后,我在调试模式下运行该项目,从而解决了我的问题
这很奇怪,但也许我做错了什么,这就是我面临这个问题的原因。
希望这能帮助那些面临同样问题的人。