java.lang.LinkageError: javax.servlet.jsp.JspApplicationContext.getExpressionFactory

Quando provo a eseguire la mia webapp su Tomcat 7, ho ottenuto la seguente eccezione:

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) 

Sembra che ci sia un conflitto tra due .jar librairies, ma non so quali siano. Come posso capirli e risolverlo?

Ciò si verifica quando includi librerie specifiche del server di un diverso make / version del server in /WEB-INF/lib della tua applicazione web, come jsp-api.jar , el-api.jar , servlet-api.jar , ecc. Devi rimuoverli tutti. Il /WEB-INF/lib non dovrebbe contenere alcuna libreria specifica per server. Essi appartengono allo specifico server stesso (Tomcat li ha già nella sua cartella /lib ).

Questo è comunque un errore del principiante piuttosto comune quando incontrano errori di compilazione sull’API JSP / Servlet nel loro progetto IDE. Questo avrebbe dovuto essere risolto in modo diverso, vale a dire integrando il server nell’IDE e aggiungendo il server come “Target runtime” al progetto.

Guarda anche:

  • Come posso importare l’API javax.servlet nel mio progetto Eclipse?

Hai due opzioni per aggiungere alle tue librerie di progetti, come jsp-api.jar , el-api.jar , servlet-api.jar , ecc:

  1. Aggiungi queste librerie come jar esterni nel tuo Java Build Path ;
  2. Aggiungili come dipendenze di maven, impostando l’ambito provided per ognuno di essi, ad esempio:
  javax.servlet.jsp jsp-api 2.1 provided  

Controlla questa pagina

http://www.jarfinder.com/index.php/java/info/org.apache.jasper.runtime.HttpJspBase

Trova quali sono i vasetti che hai usato in questo. Rimuovi se ne trovi due. 🙂

Sono rimasto bloccato con questo errore per un tempo molto lungo e questo thread mi ha salvato un po ‘del mio tempo. Aggiungendo alcune ricerche che ho fatto prima di risolvere questo problema. Sì, è necessario rimuovere le librerie come jsp-api.jar, el-api.jar, servlet-api.jar dalla jsp-api.jar, el-api.jar, servlet-api.jar /WEB-INF/lib . Ma come?

Nel mio caso sto usando Apache Ivy come gestore di dipendenze e ho usato Spring MVC. Scarica tutte le dipendenze insieme alle librerie menzionate sopra. In fase di runtime questi conflitti con le API fornite dalle librerie Tomcat. La soluzione semplice sarebbe escludere questi jar dalle dipendenze o creare configurazioni e includere queste librerie solo in configurazione di compilazione. Ciò che ha funzionato per me rapidamente è l’esclusione di queste librerie.

       

Questo è strano ERRORE che ho mai avuto

Dopo la ricerca ho trovato questa causa e soluzione

Sto usando Spring quindi nelle mie librerie @spring ho già il barattolo

Servlet-api.jar o javax-servlet-api.jar jsp-api.jar o javax-servlet-jsp.jar

Ma questo non è compatibile wid il mio server TOMCAT Quindi semplicemente rimuovo questi due jars dal mio percorso e dal mio assembly di implementazione Ora goto il mio “E: \ Locker \ Software \ apache-tomcat-6.0.44 \ lib” dove sono il mio server Tomcat e aggiungi questi due vasi al mio progetto

 servlet-api.jar jsp-api.jar