2014-10-18 8 views
35

Zaimportowałem dynamiczny projekt WWW Java do IDE Eclipse (który został zaimplementowany w Eclipse IDE i poprawnie działa).getDispatcherType() jest niezdefiniowany dla typu HttpServletRequest

Otrzymuję komunikat "getDispatcherType() jest niezdefiniowany dla typu HttpServletRequest" błąd podczas uruchamiania projektu.

Skopiowałem każdy plik do IDE zgodnie ze strukturą i praca została wykonana.

Teraz chcę tylko wiedzieć, dlaczego otrzymuję ten błąd, gdy zaimportowałem projekt. Czy ktoś miał ten sam problem? Daj mi znać, jaki błąd mógłbym popełnić.

+1

Projekt wdrożony wcześniej w wersji serwerowej 7.0 serwera apache tomcat. Próbowałem zaimportować to w moim środowisku. Używam apache tomcat 8.0.14 i mam wyżej wymieniony błąd. Więc zmieniłem mój serwer na wersję 7. Mój projekt działa teraz idealnie. to nie brzmi logicznie. to apache tomcat nie jest kompatybilny wstecznie !? Eksperci proszę wyjaśnić mi. –

+2

czy rozwiązałeś? Ten sam problem tutaj .. – ianaz

+0

Nie, przeniosłem się z tego problemu. Używam tomcat w wersji 7.X. –

Odpowiedz

42

Miałem ten sam problem, gdy miałem sprzeczną wersję apletu-api używaną w IntelliJ, która kolidowała z tym, co było obsługiwane w Tomcat 8.0.x ... Używałem Mavena, więc zmieniłem swoją zależność na to , a następnie zrobił czysty wdrożenie mojej aplikacji internetowej i problem zniknął.

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
</dependency> 
+1

Witam, mam te same problemy. Aby wyjaśnić, czy dodałeś "dostarczony" w zależności od maven? –

+0

Praca dla mnie :-) – user1007522

+2

To jest złe rozwiązanie/poprawka, ponieważ dodajesz tę samą zależność dwukrotnie, jedną dostarczoną przez tomcat 8, a drugą w folderze lib. Błąd pochodzi z dodania servlet-api 2.5 z zależności innej firmy. Chyba że nie jesteś w kontenerze, który dostarcza ci apletu apletu. –

14

tomcat 8.0.18, maven. Chodzi o konflikt libów. Moje rozwiązanie jest:

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
</dependency> 

zmienione na:

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
</dependency> 
0

To również może się zdarzyć podczas aktualizacji ze starej do nowej wersji Tomcat i utrzymanie starych plików jar, takie jak pliku j2ee.jar i javaee.jar.

pliku j2ee.jar nerver należy uwzględnić w webapp The interfae jest realizowany przez tomcat

0

I rozwiązać ten problem za pomocą serwletu-api.jar i JSP api.jar z tomcat sama, więc zależność zostaną określone z zakresu systemowej jak poniżej:

<servlet.api.jar.path>/opt/apache-tomcat-8.0.15/lib/servlet-api.jar</servlet.api.jar.path> 
<jsp.api.jar.path>/opt/apache-tomcat-8.0.15/lib/jsp-api.jar</jsp.api.jar.path> 

    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>3.0</version> 
     <scope>system</scope> 
     <systemPath>${servlet.api.jar.path}</systemPath> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jsp-api</artifactId> 
     <version>2.2</version> 
     <scope>system</scope> 
     <systemPath>${jsp.api.jar.path}</systemPath> 
    </dependency> 
+0

Usunąłem zależności jsp-api i jstl (obie były wersjami 2.1 i 1.2) i zadziałało to dla mnie. –

5

należy wykluczyć „servlet-API-2.5.jar” z dowolnego innego uzależnienia, które może masz w pom.xml.

Staraj się nie dodawać innych apletów-api jako kompilacji, ponieważ twój tomcat już to zapewnia.


Moje kroki:

mam zaznaczone, że istnieje aplet-API-2.5.jar wchodzących w moim WEB-INF/lib folderu przez Maven, więc wtedy, sprawdziłem cały wykres zależności w "Projektach Mavena @IntelliJ Idea", następnie wykluczyłem tę zależność ze WSZYSTKICH miejsc, z których pochodzi. [Przydaje się przycisk "Pokaż zależności"]

Musiałem wykluczyć "wspólne logowanie" (ponieważ ma ono zależność od servlet-api 2.5) od narzędzi prędkości. Musiałem również wykluczyć aplet-api z jaxws-spring, który ma bezpośrednią zależność od domyślnego zakresu.

Następnie wystarczy dodać zakres podany w sposób wymagany w zależności od javax.servlet-api.

Jeśli dodasz serwlet-api 3.0.1+ jako "kompilację", możesz skończyć z obu, a pierwszy załadowany wygra, co nie jest wcale dobre.

Uwaga: Domyślam się, że problem ten pochodzi od zmiany nazwy na GroupID/artifactId z servlet-API, a nie są nadpisane z najstarszej wersji zawarte na projekcie maven. : \

+0

Powinieneś chyba zaakceptować ten. Pracował dla mnie po prostu zakomentowanie: javax.servlet servlet-api 2,5 sinisterrook

1

Jeśli kocur jest wersja 8 Zastosowanie:

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
</dependency> 

pracował!

+0

ten pracował dla mnie, Tomcat 8 rozwiązanie zgodne !! –