我尝试通过如下编辑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。

评论

看起来有两个servlet和相同的url-pattern,但是根据您的web.xml,只有一个,也许正在运行web.xml?尝试重新编译并重新启动?

您是否混合了基于注释的配置和基于web.xml的配置?

在我的ControllerServlet内部,我输入了@WebServlet(“ / ControllerServlet”),在我的窗体中输入了以下内容:


#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 { }


它会起作用,谢谢