java web 项目名更改 illegalargument_java.lang.IllegalArgumentException:名为和的servlet都映射到不允许的url-pattern...

java.lang.IllegalArgumentException:名为和的servlet都映射到不允许的url-pattern

我试图添加这个servlet

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

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

Servlet to print out Hello World!ControllerServletControllerServletcom.classmgt.servlet.ControllerServletControllerServlet/ControllerServlet

但是,我得到了以下例外:

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

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

引起:java.lang.IllegalArgumentException:名为[ControllerServlet]和[com.classmgt.servlet.ControllerServlet]的servlet都映射到不允许的url-pattern [/ ControllerServlet]

看起来你已经混合了基于@WebServlet注解和基于web.xml的configuration。

我怀疑你使用“Create Servlet”向导创build了一个Servlet,该向导使用url-pattern创build了web.xml条目,然后添加了一个@WebServlet注释,它可以复制任何可能放入web.xml的东西。

你应该使用这一个或另一个,而不是两个。 从web.xml删除映射,然后只使用@WebServlet批注。

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

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

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

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

SynchronizeServletSynchronizeServletSynchronizeServletSynchronizeServlet/SynchronizeServlet/SynServlet

当我为Servlet添加正确的path时,错误消失了。 正确的desc如下:

syncro.SynchronizeServletsyncro.SynchronizeServletsyncro.SynchronizeServletsyncro.SynchronizeServlet/SynchronizeServlet/SynServlet

==> 73!

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

什么对我来说是干净的。

我的问题是由于Servlet类被重命名造成的。 但是,原始的.class文件保留在目标目录中(使用Servlet注释)。 看起来你已经将你的ControllerServlet移动到一个包中。

docker似乎并不介意这些明显的重复,但Tomcat7给你的“都映射到URL模式”exception。

查看这是否导致您的问题的简单方法是查看WAR以查看旧的类(在您的情况下[ControllerServlet]和[com.classmgt.servlet.ControllerServlet])是否都存在。

至于我,我添加了汤姆猫版本到我的POM文件,它的工作

7.0.52

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值