0

After changing my servlet URL in web.xml:

<servlet>
    <servlet-name>test</servlet-name>
    <servlet-class>pack.HelloWorld</servlet-class>
  </servlet> 

  <servlet-mapping>
    <servlet-name>test</servlet-name>
    <url-pattern>/another/path</url-pattern>
 </servlet-mapping>

and changing the annotation in the servlet itself.

@WebServlet("/another/path")
public class HelloWorld extends HttpServlet {
    private static final long serialVersionUID = 1L;

I can't launch the servlet from Eclipse anymore:

java.lang.IllegalArgumentException: The servlets named [test] and [pack.HelloWorld] are both mapped to the url-pattern [/another/path] which is not permitted

What is the reason behind it and how can I resolve it without removing the annotation from the servlet?

Stacktrace:

SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/HelloWorld2]]
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
    at java.util.concurrent.FutureTask.get(FutureTask.java:111)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:801)
    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(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:701)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/HelloWorld2]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 7 more
Caused by: java.lang.IllegalArgumentException: The servlets named [test] and [pack.HelloWorld] are both mapped to the url-pattern [/another/path] which is not permitted
    at org.apache.catalina.deploy.WebXml.addServletMapping(WebXml.java:292)
    at org.apache.catalina.startup.ContextConfig.processAnnotationWebServlet(ContextConfig.java:2485)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2161)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2122)
    at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2115)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1295)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:880)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:378)
    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:5343)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 7 more
May 2, 2014 7:16:26 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
    at java.util.concurrent.FutureTask.get(FutureTask.java:111)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:690)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:622)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    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(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:701)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:801)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 7 more
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
user3163473
  • 45
  • 1
  • 10
  • See this link http://stackoverflow.com/questions/20246625/tomcat-failed-to-start –  May 02 '14 at 16:58
  • Are there any stacktraces leading up to this error message? enable debug logging if possible to get as much information as possible. – Praba May 02 '14 at 17:09

1 Answers1

1

Try to remove either

<servlet-mapping>
    <servlet-name>test</servlet-name>
    <url-pattern>/another/path</url-pattern>
</servlet-mapping>

or

@WebServlet("/another/path")

You should not mix the different ways of mapping servlet to URLs.

I'd also recommend to check whether pack.HelloWorld and the class HelloWorld extends HttpServlet are really the same.

Alexey Malev
  • 6,408
  • 4
  • 34
  • 52
  • Ok this could be a workaround but I realized one thing, if the mappings refer to different URL in the annotation and web.xml, it works! Do you know why it fails to launch if URL are the same? – user3163473 May 02 '14 at 17:34
  • @user3163473 Due to some reason unclear to me, `test` and `pack.HelloWorld` considered **not** to be the same servlets. That's why tomcat starts when you either remove one of the mappings, or make them different. – Alexey Malev May 02 '14 at 17:36