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?

28
demandé sur Krease 2011-12-13 13:42:57

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:

55
répondu BalusC 2017-05-23 11:46:24

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

  1. ajouter ces bibliothèques comme des pots externes dans votre Java Build Path ;
  2. 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>
16
répondu vadim 2013-02-08 15:10:04

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.:)

2
répondu Kris 2011-12-13 10:57:29

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>
2
répondu Aniket Thakur 2014-06-10 18:04:31

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
0
répondu Hasnain Ali Bohra 2015-07-01 08:59:42