J'ai essayé d'ajouter cette servlet
package com.classmgt.servlet;
@WebServlet("/ControllerServlet")
public class ControllerServlet extends HttpServlet {}
à mon projet Eclipse, en modifiant le web.xml
comme ci-dessous
<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>
Cependant, j'ai eu l'exception suivante:
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
J'ai essayé d'ajouter metadata-complete="true"
à web.xml
, mais il ne reconnaît plus le servlet.
Causée par: Java.lang.IllegalArgumentException: les servlets nommés [ControllerServlet] et [com.classmgt.servlet.ControllerServlet] sont tous deux mappés au modèle d'URL [/ ControllerServlet] qui n'est pas autorisé
Il semble que vous ayez mélangé @WebServlet
basé sur les annotations et web.xml
configuration basée.
Je doute que vous ayez créé un servlet à l'aide de l'assistant "Créer un servlet" qui crée une entrée web.xml avec url-pattern, puis ajouté un @WebServlet
annotation qui duplique tout ce que vous pouvez mettre dans le web.xml.
Vous devez utiliser l'un ou l'autre, pas les deux. Supprimez le mappage de web.xml
et continuez en utilisant uniquement le @WebServlet
annotation.
En savoir plus: Annotations Servlet 3. et notre page wiki Servlets .
Supprimez simplement l'annotation @WebServlet("/ControllerServlet")
, de ControllerServlet
, car elle a déjà été ajoutée dans web.xml
.
Java.lang.IllegalArgumentException: The servlets named...
J'ai récupéré cette cause où je crée une nouvelle servlet dans un package différent (nom = 'syncro'). Ma servlet située dans syncro.SynchronizeServlet Et lorsque j'ajoute des informations sur cette servlet dans le descripteur de déploiement (web.xml), j'attrape erreur: IllegalArgumentException
Exemple de partie de descripteur incorrecte:
<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>
Lorsque j'ajoute le chemin correct pour la servlet - l'erreur a disparu. Correct desc ci-dessous:
<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!
Ce qui a fonctionné pour moi, c'est de faire un "nettoyage".
Mon problème est survenu lorsque la classe Servlet a été renommée. Cependant, les fichiers .class d'origine sont restés dans le répertoire cible (avec leur annotation Servlet). Il semble que vous ayez déplacé votre ControllerServlet dans un package.
Jetty ne semblait pas s'inquiéter de ces doublons apparents, mais Tomcat7 vous a donné l'exception "tous deux mappés sur le modèle d'URL".
Le moyen facile de voir si cela est à l'origine de votre problème est de regarder dans le WAR pour voir si les anciennes classes (dans votre cas [ControllerServlet] et [com.classmgt.servlet.ControllerServlet]) sont toutes les deux là.
Les servlets nommés [Register] et [com.TeamWork.controller.Register] sont tous deux mappés sur le modèle d'URL [/ Register] qui n'est pas autorisé
pour obtenir cette erreur, vous devez supprimer le mappage de votre servlet de web.xml et simplement ajouter l'annotation + l'URL @WebServlet ("/ Register")
<servlet>
<servlet-name>Register</servlet-name>
<servlet-class>com.TeamWork.controller</servlet-class>
</servlet>
puis votre classe de servlet en haut ajoutez celui-ci
@WebServlet("/Register")`
public class Register extends HttpServlet { }
ça va marcher merci
Quant à moi, j'ai ajouté la version tom-cat à mon fichier pom et cela a fonctionné
<properties>
<Tomcat.version>7.0.52</Tomcat.version>
</properties>
<dependencies>