2014-12-07 14 views
6

Nie mogę uruchomić Tomcat, gdy używam web.xml jako plik konfiguracyjny dla serwletów w aplikacji, to zawartość pliku:Dlaczego serwer Tomcat nie działa z plikiem web.xml jako konfiguracja serwletu użyta w aplikacji Vaadin 7?

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    id="WebApp_ID" version="3.0" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

    <servlet> 
    <servlet-name>AppLifeServlet</servlet-name> 
    <servlet-class> 
     com.example.application_lifecycle_chapter_4_7.ApplicatationLifecycleUI.Servlet 
    </servlet-class> 
    <init-param> 
     <param-name>UI</param-name> 
     <param-value>com.example.application_lifecycle_chapter_4_7.ApplicationLifecycleUI</param-value> 
    </init-param> 
    <async-supported>true</async-supported> 
    </servlet> 

    <servlet> 
     <servlet-name>MyPushyServlet</servlet-name> 
     <servlet-class> 
      com.example.application_lifecycle_chapter_4_7.MyPushyUI.Servlet 
     </servlet-class> 
     <init-param> 
     <param-name>UI</param-name> 
     <param-value>com.example.application_lifecycle_chapter_4_7.MyPushyUI</param-value> 
     </init-param> 
     <async-supported>true</async-supported> 
    </servlet>  

    <servlet-mapping> 
    <servlet-name>AppLifeServlet</servlet-name> 
    <url-pattern>/AppLife/*</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>AppLifeServlet</servlet-name> 
     <url-pattern>/VAADIN/*</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>MyPushyServlet</servlet-name> 
     <url-pattern>/MyPushyUI/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

Dlaczego nie jest to działa? Tomcat nawet nie uruchamia a zamiast zwraca wyjątek:

SEVERE: Failed to destroy end point associated with ProtocolHandler ["ajp-nio-8009"] 
java.lang.NullPointerException 
    at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:307) 
    at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:482) 
    at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:795) 
    at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:531) 
    at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023) 
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305) 
    at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:588) 
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305) 
    at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:850) 
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:629) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485) 

Gdybym wyłączyć web.xml i używam apletu 3.0 API adnotacje wszystko działa ...

Jaki jest problem z plikiem web.xml ?

EDIT: Oto pełna moc wyjątek gdy Tomcat próbuje uruchomić:

SEVERE: A child container failed during start 
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Application_Lifecycle_Chapter_4.7]] 
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:192) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:917) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:868) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Application_Lifecycle_Chapter_4.7]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    ... 6 more 
Caused by: java.lang.IllegalArgumentException: The servlets named [AppLifeServlet] and [com.example.application_lifecycle_chapter_4_7.ApplicationLifecycleUI$Servlet] are both mapped to the url-pattern [/AppLife/*] which is not permitted 
    at org.apache.tomcat.util.descriptor.web.WebXml.addServletMapping(WebXml.java:308) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationWebServlet(ContextConfig.java:2325) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2007) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1901) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1896) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1896) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1896) 
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1139) 
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:771) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:305) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5095) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 6 more 

Dec 07, 2014 7:49:30 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.report(FutureTask.java:122) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:192) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:917) 
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:760) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:625) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485) 
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:1409) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.catalina.LifecycleException: A child container failed during start 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:925) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:868) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 6 more 

Dec 07, 2014 7:49:30 PM org.apache.catalina.startup.Catalina start 
SEVERE: The required Server component failed to start so Tomcat is unable to start. 
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:625) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:760) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 7 more 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 9 more 
Caused by: org.apache.catalina.LifecycleException: A child container failed during start 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:925) 
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 11 more 

Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol pause 
INFO: Pausing ProtocolHandler ["http-nio-8080"] 
Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol pause 
INFO: Pausing ProtocolHandler ["ajp-nio-8009"] 
Dec 07, 2014 7:49:30 PM org.apache.catalina.core.StandardService stopInternal 
INFO: Stopping service Catalina 
Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol destroy 
INFO: Destroying ProtocolHandler ["http-nio-8080"] 
Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol destroy 
SEVERE: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"] 
java.lang.NullPointerException 
    at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:307) 
    at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:482) 
    at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:795) 
    at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:531) 
    at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023) 
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305) 
    at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:588) 
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305) 
    at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:850) 
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:629) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485) 

Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol destroy 
INFO: Destroying ProtocolHandler ["ajp-nio-8009"] 
Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol destroy 
SEVERE: Failed to destroy end point associated with ProtocolHandler ["ajp-nio-8009"] 
java.lang.NullPointerException 
    at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:307) 
    at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:482) 
    at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:795) 
    at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:531) 
    at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023) 
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305) 
    at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:588) 
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305) 
    at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:850) 
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:629) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485) 

ZDECYDOWANE: To jest kluczowa linia:

Caused by: java.lang.IllegalArgumentException: The servlets named [AppLifeServlet] and 
    [com.example.application_lifecycle_chapter_4_7.ApplicationLifecycleUI$Servlet] are both 
    mapped to the url-pattern [/AppLife/*] which is not permitted 

Z Księgi Vaadin:

Możesz używać zarówno pliku web.xml, jak i WebServlet w tej samej aplikacji. Ustawienia w pliku web.xml zastępują ustawienia podane w adnotacjach.

To nie jest prawda! W moim przypadku błąd był spowodowany tą frazą: Miałem adnotację @WebServlet w moim ApplicationLifecycleUI$Servlet wraz z odwzorowaniem serwletu wewnątrz pliku web.xml.

Dwie konfiguracje nie mogą współistnieć razem, więc musisz zdecydować, czy chcesz użyć adnotacji web.xml czy @WebServlet do mapowania adresów URL, lub otrzymasz ten błąd, gdy próbujesz uruchomić Tomcat.

+2

Czy masz inny wyjątek w dzienniku przed tym? ten wyjątek jest związany z niszczeniem procedury obsługi protokołu, która ma miejsce po tym, jak aplikacja się nie uruchomiła –

+0

Tak, sprawdź moją edycję! Sprawdziłem konsolę w Eclipse i odkryłem kilka innych wyjątków wyrzuconych przed tym, który opublikowałem. – tonix

+3

Znalazłem problem, Adnotacje i web.xml nie mogą żyć razem, Book of Vaadin wprowadza w błąd, ponieważ mówi, że mogą współistnieć razem i że web.xml zastępuje konfigurację zdefiniowaną w adnotacjach. W każdym razie dziękuję za poinformowanie mnie, że lepiej zajrzeć do wyjątków konsoli! – tonix

Odpowiedz

3

Odkryłem, że komentarz @tonix jest w rzeczywistości prawdziwy. Adnotacje i plik web.xml nie mogą współistnieć. Musisz tylko usunąć plik web.xml, jeśli chcesz zachować adnotacje.

Co więcej, po prostu sprawdź wszystkie wzorce adresów URL, czy są w web.xml czy w adnotacji, powinny być poprawne i mam na myśli ogólnie powinny być poprzedzone przedrostkiem "/" (forward-slash) .

Po wprowadzeniu tych zmian spróbuj ponownie uruchomić tomcat i powinno działać, co miało miejsce w moim bardzo podobnym przypadku.

Powiązane problemy