Java.lang.LinkageError: javax.servlet.JSP.JspApplicationContext.getExpressionFactory
quand j'essaie d'exécuter mon webapp sur Tomcat 7, j'ai l'exception suivante:
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)
il semble qu'il y ait un conflit entre deux librairies .jar
, mais je ne sais pas lesquelles. Comment les comprendre et les résoudre?
5 réponses
qui se produira lorsque vous incluez des bibliothèques spécifiques à un serveur d'une marque/version de serveur différente dans le /WEB-INF/lib
de votre application web, tels que jsp-api.jar
, el-api.jar
, servlet-api.jar
, etc. Vous devez supprimer eux tous. Le /WEB-INF/lib
ne doit pas contenir de bibliothèques spécifiques au serveur. Ils appartiennent au serveur spécifique lui-même (Tomcat les a déjà dans son dossier /lib
).
erreur de débutant à chaque fois qu'ils rencontrent des erreurs de compilation sur L'API JSP/Servlet dans leur projet IDE. Cela aurait dû être résolu différemment, notamment en intégrant le serveur dans L'IDE et en ajoutant le serveur comme "Target runtime" au projet.
voir aussi:
vous avez deux options pour ajouter à vos projets de bibliothèques, telles que jsp-api.jar
, el-api.jar
, servlet-api.jar
, etc:
- ajouter ces bibliothèques comme des pots externes dans votre
Java Build Path
; - ajoutez-les en tant que dépendances maven, en définissant la portée
provided
pour chacun d'eux, par exemple:
<dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency>
vérifier cette page
http://www.jarfinder.com/index.php/java/info/org.apache.jasper.runtime.HttpJspBase
Trouvez les pots que vous avez utilisés. En enlever une si vous en trouvez deux.:)
j'ai été coincé avec cette erreur pendant une très longue période et ce fil a sauvé beaucoup de mon temps. Ajouter quelques recherches que j'ai faites avant de résoudre cette question. Oui, nous devons supprimer les bibliothèques comme jsp-api.jar, el-api.jar, servlet-api.jar
du dossier /WEB-INF/lib
. Mais comment?
dans mon cas, J'utilise Apache Ivy comme gestionnaire de dépendances et J'ai utilisé MVC du printemps. Il télécharge toutes les dépendances avec les bibliothèques mentionnées ci-dessus. Lors de l'exécution ces conflits avec les API fournies par les bibliothèques Tomcat. La solution Simple serait d'exclure ces jars des dépendances ou de créer des configurations et d'inclure ces bibliothèques dans la configuration temps de compilation seulement. Ce qui a fonctionné pour moi est l'exclusion de ces bibliothèques.
<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>
C'est étrange ERREUR que j'ai jamais
après reserach j'ai trouvé cette cause et solution
j'utilise le ressort donc dans mes bibliothèques @spring j'ai déjà le bocal comme
Servlet-api.jar
ou javax-servlet-api.jar
jsp-api.jar
ou javax-servlet-jsp.jar
mais ce n'est pas compatible avec mon serveur TOMCAT Donc tout simplement je retire ces deux pots de mon chemin construit et l'assemblage de déploiement Maintenant, je goto mon "E:\Locker\Software\apache-tomcat-6.0.44\lib" où sont mon serveur Tomcat et ajouter ces deux pots à mon projet
servlet-api.jar
jsp-api.jar