web-dev-qa-db-fra.com

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

Lorsque j'essaie d'exécuter ma webapp sur Tomcat 7, j'ai eu 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 .jar librairies, mais je ne sais pas de quoi il s'agit. Comment puis-je les comprendre et les résoudre?

29
Br3x

Cela se produit lorsque vous incluez des bibliothèques spécifiques au serveur d'une autre marque/version de serveur dans le /WEB-INF/lib de votre application Web, comme jsp-api.jar, el-api.jar, servlet-api.jar, etc. Vous devez les supprimer tous. Le /WEB-INF/lib ne doit contenir aucune bibliothèque spécifique au serveur. Ils appartiennent au serveur spécifique lui-même (Tomcat les a dans son /lib dossier déjà).

C'est d'ailleurs une erreur assez courante pour les débutants 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, à savoir en intégrant le serveur dans le = IDE et ajout du serveur en tant que "Runtime cible" au projet.

Voir également:

55
BalusC

Vous avez deux options pour ajouter à vos bibliothèques de projets, telles que jsp-api.jar, el-api.jar, servlet-api.jar, etc:

  1. Ajoutez ces bibliothèques en tant que fichiers externes dans votre Java Build Path;
  2. Ajoutez-les en tant que dépendances maven, en définissant l'étendue provided pour chacune d'entre elles, par exemple:
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>
16
vadim

Consultez cette page

http://www.jarfinder.com/index.php/Java/info/org.Apache.jasper.runtime.HttpJspBase

Trouvez les pots que vous avez utilisés pour cela. Retirez-en un si vous en trouvez deux. :)

2
Kris

J'ai été coincé avec cette erreur pendant très longtemps et ce fil a sauvé pas mal de mon temps. Ajout de quelques recherches que j'ai faites avant de résoudre ce problème. Oui, nous devons supprimer des bibliothèques comme jsp-api.jar, el-api.jar, servlet-api.jar de /WEB-INF/lib dossier. Mais comment?

Dans mon cas, j'utilise Apache Ivy comme gestionnaire de dépendances et j'ai utilisé Spring MVC. Il télécharge toutes les dépendances ainsi que les bibliothèques mentionnées ci-dessus. Au moment de l'exécution, ces conflits avec les API fournies par les bibliothèques Tomcat. Une solution simple serait d'exclure ces fichiers jar des dépendances ou de créer des configurations et d'inclure ces bibliothèques dans la configuration de compilation uniquement. Ce qui a fonctionné rapidement pour moi, c'est d'exclure 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>
2
Aniket Thakur

Dans mon cas, j'avais la dépendance Tomcat ainsi que le plugin Tomcat mentionné dans le POM. Suppression de la dépendance en ne laissant que le plugin et cela a fonctionné.

0
Yasser Khan

C'est bizarre ERREUR que j'ai jamais eu

Après la recherche, j'ai trouvé ces causes et cette solution

J'utilise Spring donc dans mes bibliothèques @spring j'ai déjà le pot comme

Servlet-api.jar ou javax-servlet-api.jarjsp-api.jar ou javax-servlet-jsp.jar

Mais ce n'est pas compatible avec mon serveur Tomcat Donc, simplement je supprime ces deux pots de mon chemin de montage et de mon assemblage de déploiement. et ajouter ces deux pots à mon projet

servlet-api.jar
jsp-api.jar
0
Hasnain Ali Bohra