web.xml
将此servlet package com.classmgt.servlet;
@WebServlet("/ControllerServlet")
public class ControllerServlet extends HttpServlet {}
添加到我的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>
>但是,我遇到了以下异常:
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。#1 楼
原因:java.lang.IllegalArgumentException:名为
[ServletServlet]和[com.classmgt.servlet.ControllerServlet]的servlet
都映射到url模式[/ ControllerServlet],不允许
您似乎混合了基于
@WebServlet
注释的配置和基于web.xml
的配置。我怀疑您是使用“创建Servlet”向导将使用url-pattern创建web.xml条目,然后添加一个
@WebServlet
批注,该批注可复制您可以在web.xml中放入的任何内容。您应该使用一个或另一个, 不是都。从
web.xml
中删除映射,然后仅使用@WebServlet
注释。了解更多:Servlet 3.0注释和我们的Servlets Wiki页面。
#2 楼
只需从@WebServlet("/ControllerServlet")
中删除注释ControllerServlet
,因为它已添加到web.xml
中。#3 楼
java.lang.IllegalArgumentException: The servlets named...
我在不同的包(名称=“ 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>
当我为servlet添加正确的路径时-错误消失了。在下面更正desc:
<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!
评论
你好! 73-在业余广播中,意思是“祝福,成功,祝你好运”
– Mikro Koder
16年1月16日在10:13
谢谢。多数民众赞成在先进的leetspeak。
–多米
16年1月19日在9:05
#4 楼
对我有用的是执行“清理”。我的问题是在重命名Servlet类时引起的。但是,原始.class文件保留在目标目录中(带有Servlet注释)。看来您将ControllerServlet移到了一个包中。
Jetty似乎并不介意这些明显的重复项,但是Tomcat7给出了“都映射到url-pattern”异常。 br />
查看这是否引起问题的简单方法是查看WAR以查看两个旧类(在您的情况下为[ControllerServlet]和[com.classmgt.servlet.ControllerServlet])是否都都在那里。
#5 楼
对于我来说,我将tom-cat版本添加到了pom文件中,并且可以正常使用<properties>
<tomcat.version>7.0.52</tomcat.version>
</properties>
<dependencies>
#6 楼
名为[Register]和[com.TeamWork.controller.Register]的servlet
都映射到url-pattern [/ Register],这是不允许的
遇到此错误,您必须从web.xml中删除servlet映射,而只需添加@WebServlet(“ / Register”)批注+ url
<servlet>
<servlet-name>Register</servlet-name>
<servlet-class>com.TeamWork.controller</servlet-class>
</servlet>
,然后创建servlet在顶部的课程上添加此内容
@WebServlet("/Register")`
public class Register extends HttpServlet { }
它会起作用,谢谢
评论
看起来有两个servlet和相同的url-pattern,但是根据您的web.xml,只有一个,也许正在运行web.xml?尝试重新编译并重新启动?您是否混合了基于注释的配置和基于web.xml的配置?
在我的ControllerServlet内部,我输入了@WebServlet(“ / ControllerServlet”),在我的窗体中输入了以下内容: