java.lang.IllegalArgumentException: 名为 [X] 和 [Y] 的 servlet 都映射到不允许的 url-pattern [/url] [英] java.lang.IllegalArgumentException: The servlets named [X] and [Y] are both mapped to the url-pattern [/url] which is not permitted
问题描述
我试图添加这个 servlet
I tried to add this servlet
package com.classmgt.servlet;
@WebServlet("/ControllerServlet")
public class ControllerServlet extends HttpServlet {}
到我的 Eclipse 项目,通过编辑 web.xml
如下
to my Eclipse project, by editing the web.xml
as below
<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>
但是,我得到了以下异常:
However, I got the following exception:
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.
I have tried adding metadata-complete="true"
to web.xml
, but it does not recognize the servlet anymore.
推荐答案
Caused by: java.lang.IllegalArgumentException: The servlets named[ControllerServlet] 和 [com.classmgt.servlet.ControllerServlet] 是都映射到 url-pattern [/ControllerServlet] 这不是允许
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
您似乎混合了基于 @WebServlet
注释和基于 web.xml
的配置.
It seems that you have mixed @WebServlet
annotation based and web.xml
based configuration.
我怀疑您是否使用创建 Servlet"向导创建了一个 Servlet,该向导使用 url-pattern 创建 web.xml 条目,然后添加了一个 @WebServlet
注释,该注释复制了您可能放入的任何内容web.xml.
I doubt that you created a Servlet using the "Create Servlet" wizard which creates web.xml entry with url-pattern and then , added a @WebServlet
annotation which duplicates anything you may put in the web.xml.
您应该使用其中一个,而不是两者都使用.从 web.xml
中删除映射并继续使用 @WebServlet
注释.
You should use the one or the other, not both. Remove the mapping from web.xml
and go ahead with using only the @WebServlet
annotation.
阅读更多:Servlet 3.0 注释 和 我们的 Servlets wiki 页面.
这篇关于java.lang.IllegalArgumentException: 名为 [X] 和 [Y] 的 servlet 都映射到不允许的 url-pattern [/url]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!