java.lang.LinkageError: javax.servlet.jsp.JspApplicationContext.getExpressionFactory - PullRequest
29 голосов
/ 13 декабря 2011

Когда я пытаюсь запустить свое веб-приложение на Tomcat 7, я получаю следующее исключение:

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)

Кажется, что существует конфликт между двумя .jar библиотекарями, но я не знаю, кто они. Как я могу их выяснить и решить?

Ответы [ 5 ]

55 голосов
/ 13 декабря 2011

Это произойдет, когда вы добавите в /WEB-INF/lib своего веб-приложения библиотеки для конкретного сервера другой марки / версии сервера, например jsp-api.jar, el-api.jar, servlet-api.jar и т. Д. Вам необходимо удалить их всех./WEB-INF/lib не должен содержать каких-либо специфичных для сервера библиотек.Они принадлежат конкретному серверу (у Tomcat они уже есть в папке /lib).

Кстати, это довольно распространенная ошибка новичка, когда они сталкиваются с ошибками компиляции в API JSP / Servlet в своей IDE.проект.Это должно было быть решено по-другому, а именно путем интеграции сервера в IDE и добавления сервера в качестве «Целевого времени выполнения» в проект.

См. Также:

16 голосов
/ 08 февраля 2013

У вас есть два варианта добавления в ваши проекты библиотек, таких как jsp-api.jar, el-api.jar, servlet-api.jar и т. Д .:

  1. Добавьте эти библиотеки в качестве внешних jar-файлов в ваш Java Build Path;
  2. Добавьте их в качестве зависимостей maven, задав для каждого из них область действия provided, например:
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>
2 голосов
/ 10 июня 2014

Я застрял с этой ошибкой в ​​течение очень долгого времени, и этот поток сэкономил довольно много моего времени.Добавляя некоторые исследования, которые я сделал, прежде чем решить эту проблему.Да, нам нужно удалить библиотеки типа jsp-api.jar, el-api.jar, servlet-api.jar из папки /WEB-INF/lib.Но как?

В моем случае я использую Apache Ivy в качестве менеджера зависимостей и использую Spring MVC.Он загружает все зависимости вместе с библиотеками, упомянутыми выше.Во время выполнения эти конфликты с API, предоставляемыми библиотеками Tomcat.Простым решением было бы исключить эти jar-файлы из зависимостей или создать конфигурации и включить эти библиотеки только в конфигурацию времени компиляции.То, что сработало для меня быстро, исключает эти библиотеки.

    <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 голосов
/ 13 декабря 2011

Проверьте эту страницу

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

Найдите, какие банки вы использовали в этом.Удалить один, если вы найдете два .:)

0 голосов
/ 01 июля 2015

Это странная ОШИБКА, которую я когда-либо получал

После повторного поиска я нашел это Причины и решение

Я использую Spring, поэтому в моих библиотеках @spring у меня уже есть банка как

Servlet-api.jar или javax-servlet-api.jar jsp-api.jar или javax-servlet-jsp.jar

Но это несовместимо с моим сервером TOMCAT. Так что я просто удаляю эти две банки из моего встроенного пути и сборки развертывания. Теперь я иду в мой "E: \ Locker \ Software \ apache-tomcat-6.0.44 \ lib "где мой сервер Tomcat и добавьте эти два jar-файла в мой проект

servlet-api.jar
jsp-api.jar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...