java - for - tomcat 8 download
Obteniendo NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName() (8)
Tengo un problema durante la implementación de un servicio en Tomcat 8. Obtengo el siguiente error:
Causado por: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName () Ljava / lang / String; en org.apache.tomcat.websocket.server.WsServerContainer. (WsServerContainer.java:149) en org.apache.tomcat.websocket.server.WsSci.init (WsSci.java:131) en org.apache.tomcat.websocket. server.WsSci.onStartup (WsSci.java:47) en org.apache.catalina.core.StandardContext.startInternal (StandardContext.java:5244) en org.apache.catalina.util.LifecycleBase.start (LifecycleBase.java:150) ... 10 más
El método
getVirtualServerName
se introdujo en Servlet 3.1 y después de extraer
MANIFEST.MF
de mi jar de
servlet-api
obtuve los siguientes detalles:
Specification-Title: Java API for Servlets
Specification-Version: 3.1
Specification-Vendor: Sun Microsystems, Inc.
Implementation-Title: javax.servlet
Lo que dice que tiene 3.1. Entonces, ¿hay alguna otra razón para este error? Por favor ayuda
Después de un gran dolor y examinar todas estas respuestas de , lo único que terminó funcionando para mí fue degradar de tomcat8 a tomcat7. Sé que esta no es una solución ideal, y tal vez fue solo una nueva instalación de tomcat que resolvió mi problema. Si todo lo demás falla, dale una oportunidad.
El método
getVirtualServerName
se ha agregado en ServletContext en Servlet 3.1.
Encuentre el método
getVirtualServerName
del documento de
getVirtualServerName
Este problema puede tener al menos 3 causas:
-
su versión de servlet es anterior a 3.1.
-
otro jar tiene la versión anterior de servlet que 3.1.
-
su versión de tomcat es anterior a 8
para resolverlo, puedes probar de la siguiente manera.
I. para comprobar su pom.xml si hay el siguiente código.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
si su pom.xml tiene el código anterior, aún tendría ese problema. puedes hacer la segunda forma.
II
para comprobar que su otro jar tiene referencia al
javax.servlet-api
jar.
por ejemplo, el
org.apache.santuario
se refiere al
javax.servlet-api
jar.
el pom.xml:
<dependency>
<groupId>org.apache.santuario</groupId>
<artifactId>xmlsec</artifactId>
<version>1.4.3</version>
</dependency>
pero cuando observa las dependencias de Maven, se refiere al
javax.servlet-api
jar cuya versión es 2.3 anterior a 3.1.
por lo que debe excluir la versión 2.3. pom.xml:
<!-- exclude servlet-api 2.3 jar-->
<dependency>
<groupId>org.apache.santuario</groupId>
<artifactId>xmlsec</artifactId>
<version>1.4.3</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- servlet-api 3.1 version has getVirtualServerName() -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
III. Spring Boot ejecuta el tomcat 7. predeterminado, así que defina su versión 8 de Tomcat en lugar de Tomcat 7. Agregue el código pom.xml:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<tomcat.version>8.5.5</tomcat.version>
</properties>
Esto seguramente tiene algo que ver con la versión de javax.servlet y la versión de Tomcat.
En mi caso, desapareció cuando declaró la dependencia de javax.servlet en gradle sin versión. Me gusta esto -
compile(''javax.servlet:servlet-api'')
Si ha usado esta dependencia:
compile(''javax.servlet:servlet-api'')
Entonces por favor excluya de la siguiente manera:
<dependency> <groupId>com.google.oauth-client</groupId> <artifactId>google-oauth-client-jetty</artifactId> <version>1.23.0</version> <exclusions> <exclusion> <artifactId>servlet-api</artifactId> <groupId>org.mortbay.jetty</groupId> </exclusion> </exclusions> </dependency>
Spring boot ejecutará tomcat 7 por defecto, debe anular maven build tomcat.version en su pom.xml. Consulte a continuación para ejecutar tomcat 8.0.30
<properties>
<tomcat.version>8.0.30</tomcat.version>
</properties>
Debería solucionar su problema.
Tuve este error en IntelliJ con maven después de actualizar IntelliJ.
Podría ejecutar las pruebas con maven pero no desde mi IDE.
./idea
el problema eliminando los archivos
./idea
y
project.iml
y
./idea
cargar el proyecto.
Verifique todas sus dependencias de Maven (o equivalentes) y asegúrese de que usted, o probablemente otra dependencia, no esté utilizando una versión anterior a 3.1 de
javax.servlet / servlet-api
que pueda tener prioridad sobre lo que está en su Tomcat 8 Si se ha implementado manualmente, asegúrese de no haber copiado manualmente ningún JAR de servlet-api en Tomcat.
Ver: https://.com/a/26232535/954442
Solucionado En mi mac con java 8 estaba enfrentando un problema con Tomcat descargado del sitio y descomprimirlo.
Mi problema se resolvió porque había un archivo servlet-api.jar adicional que se estaba recogiendo. Provenía de /Library/Java/Extensions/servlet-api.jar
Para encontrarlo en su sistema, puede usar sudo find / -name servlet-api.jar
Lo eliminó haciendo una copia de seguridad en otro lugar.
Estaba siguiendo esto para la instalación https://gist.github.com/ddanailov-nmdp/c97aba2ca926b9627f6b4f7174083a32