java.lang.LinkageError: javax.servlet.jsp.JspApplicationContext.getExpressionFactory
tomcat servlets (5)
Cuando trato de ejecutar mi aplicación web en Tomcat 7, recibí la siguiente excepción:
exception
javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;
" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/index_jsp, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext,
have different Class objects for the type javax/el/ExpressionFactory used in the signature
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:343)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/index_jsp, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature
org.apache.jsp.index_jsp._jspInit(index_jsp.java:31)
org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:180)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Parece que hay un conflicto entre dos bibliotecas .jar
, pero no sé cuáles son. ¿Cómo puedo resolverlos y resolverlos?
Eso sucederá cuando incluya bibliotecas específicas del servidor de una marca / versión de servidor diferente en /WEB-INF/lib
de su aplicación web, como jsp-api.jar
, el-api.jar
, servlet-api.jar
, etc. Necesitas eliminarlos a todos. El /WEB-INF/lib
no debe contener ninguna biblioteca específica del servidor. Pertenecen al servidor específico en sí (Tomcat ya los tiene en su carpeta /lib
).
Este es, por cierto, un error de principiante bastante común cada vez que encuentran errores de compilación en la API JSP / Servlet en su proyecto IDE. Esto debería haberse resuelto de manera diferente, es decir, integrando el servidor en el IDE y agregando el servidor como "Target runtime" al proyecto.
Ver también:
Esto es ERROR extraño que tengo alguna vez
Después de investigar, encontré esto Causas y solución
Estoy usando Spring así que en mis bibliotecas @spring ya tengo el jar como
Servlet-api.jar
o javax-servlet-api.jar
jsp-api.jar
o javax-servlet-jsp.jar
Pero esto no es compatible con mi servidor TOMCAT Así que simplemente elimino estos dos jarrones de mi camino construido y ensamblaje de implementación Ahora voy a mi "E: / Locker / Software / apache-tomcat-6.0.44 / lib" donde están mis servidores Tomcat y agrega estos dos frascos a mi proyecto
servlet-api.jar
jsp-api.jar
Estuve atascado con este error durante mucho tiempo y este hilo me ahorró bastante tiempo. Agregué algunas investigaciones que hice antes de resolver este problema. Sí, necesitamos eliminar bibliotecas como jsp-api.jar, el-api.jar, servlet-api.jar
de la jsp-api.jar, el-api.jar, servlet-api.jar
/WEB-INF/lib
. ¿Pero cómo?
En mi caso, estoy usando Apache Ivy como administrador de dependencias y usé Spring MVC. Descarga todas las dependencias junto con las bibliotecas mencionadas anteriormente. En tiempo de ejecución, estos conflictos con las API proporcionadas por las bibliotecas de Tomcat. Una solución simple sería excluir estos archivos jar de dependencias o crear configuraciones e incluir estas bibliotecas solo en la configuración de tiempo de compilación. Lo que funcionó para mí rápidamente es excluir estas bibliotecas.
<dependency org="org.springframework" name="spring-webmvc"
rev="4.0.4.RELEASE">
<exclude org="javax.servlet" name="javax.servlet-api" />
<exclude org="javax.servlet.jsp" name="jsp-api" />
<exclude org="javax.el" name="javax.el-api" />
</dependency>
Tiene dos opciones para agregar a las bibliotecas de sus proyectos, como jsp-api.jar
, el-api.jar
, servlet-api.jar
, etc.
- Agregue estas bibliotecas como jarras externas en su
Java Build Path
; - Agréguelos como dependencias maven, estableciendo el alcance
provided
para cada uno de ellos, por ejemplo:
<dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency>
Ver esta página
http://www.jarfinder.com/index.php/java/info/org.apache.jasper.runtime.HttpJspBase
Encuentra cuales son los frascos que has usado en esto. Removeone si encuentras dos. :)