eclipse tomcat servlets mapping illegalargumentexception

eclipse - java.lang.IllegalArgumentException: los servlets denominados[X] e[Y] se asignan al url-pattern[/ url] que no está permitido



tomcat mapping (5)

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

Busqué esta causa donde creo un nuevo servlet en un paquete diferente (name = ''syncro''). Mi servlet se encuentra en syncro.SynchronizeServlet Y cuando agrego información sobre este servlet en el descriptor de implementación (web.xml) detecto el error: IllegalArgumentException

Ejemplo de parte del descriptor incorrecto:

<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>

Cuando agrego la ruta correcta para el servlet, el error desapareció. Correcto desc abajo:

<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!

Traté de agregar este servlet

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

a mi proyecto de Eclipse, editando el web.xml como se muestra a continuación

<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>

Sin embargo, tengo la siguiente excepción:

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

He intentado agregar metadata-complete="true" a web.xml , pero ya no reconoce el servlet.


Simplemente elimine la anotación @WebServlet("/ControllerServlet") , del ControllerServlet , porque ya se agregó en el web.xml .


Lo que funcionó para mí es hacer una ''limpieza''.

Mi problema fue causado cuando se cambió el nombre de la clase Servlet. Sin embargo, los archivos .class originales permanecieron en el directorio de destino (con su anotación de servlet). Parece que movió su ControllerServlet a un paquete.

A Jetty no pareció importarle estos aparentes duplicados, pero Tomcat7 dio su excepción "ambos mapeados a la url-pattern".

La manera fácil de ver si esto está causando su problema es buscar en WAR para ver si las dos clases anteriores (en su caso [ControllerServlet] y [com.classmgt.servlet.ControllerServlet]) están allí.


En cuanto a mí, agregué la versión tom-cat a mi archivo pom y funcionó

<properties> <tomcat.version>7.0.52</tomcat.version> </properties> <dependencies>


Causado por: java.lang.IllegalArgumentException: los servlets llamados [ControllerServlet] y [com.classmgt.servlet.ControllerServlet] se asignan al url-pattern [/ ControllerServlet] que no está permitido

Parece que ha mezclado la @WebServlet basada en la anotación @WebServlet y la basada en web.xml .

Dudo que haya creado un servlet usando el asistente "Crear servlet" que crea la entrada web.xml con url-pattern y luego, agregó una anotación @WebServlet que duplica todo lo que pueda poner en el web.xml.

Deberías usar uno o el otro, no ambos. Elimine la asignación de web.xml y continúe usando solo la anotación @WebServlet .

Leer más: Anotaciones de Servlet 3.0 y nuestra página wiki Servlets .