jsp tomcat servlets linkageerror

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.

  1. Agregue estas bibliotecas como jarras externas en su Java Build Path ;
  2. 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>