Ява.ленг.LinkageError: нарушение ограничения загрузчика: при разрешении метода интерфейса javax.сервлет.JSP-страница.JspApplicationContext.getExpressionFactory() [дубликат]

этот вопрос уже есть ответ здесь:

Я использую JSF 2.0 в Eclipse IDE. Когда я попытался реализовать JSP и сервлет, я получаю следующую ошибку:

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/exCrop_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
at org.apache.jsp.exCrop_jsp._jspInit(exCrop_jsp.java:31)
at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:181)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Как это вызвано и как я могу решить?

2 ответов


ваш classpath беспорядок.

это конкретное исключение предполагает, что вы замусорили webapp в /WEB-INF/lib папка с произвольно загруженными библиотеками servletcontainer, специфичными для servletcontainer make / version, которая несовместима с servletcontainer, где вы фактически развертываете webapp. Конкретное сообщение об исключении предполагает, что ваш /WEB-INF/lib содержит jsp-api.jar, j2ee.jar и/или javaee.jar файлы.

вы должны удалить их. В servletcontainer уже корабли с JSP. Вы никогда не должны копировать/перемещать библиотеки, специфичные для servletcontainer. Это только столкнется с целевой средой выполнения. Если вы сделали это, чтобы обойти ошибки компиляции в IDE, вы должны были решить ее по-другому. А именно, вы должны интегрировать целевой servletcontainer в свою IDE, а затем связать его с проектом как Целевая Среда Выполнения. Таким образом, IDE будет автоматически использовать библиотеки servletcontainer в пути к классам времени компиляции.

Читайте также:


У меня была такая же ошибка при переносе проекта с WAS6 на 7. Вот исправление:

  1. обновить web.XML:
    • открыть имя_проекта\НИЦ\главная\Арр\веб-веб-инф\.в XML
    • добавьте следующий обработчик: Com.sun.faces.config.ConfigureListener
    • создайте проект и разверните его в Websphere
  2. изменить порядок загрузки:
    • Откройте консоль Websphere application server
    • перейти к: приложения > > типы приложений >> WebSphere enterprise applications
    • нажмите на проект
    • нажмите "загрузка класса и обнаружение обновлений"
    • выберите "классы, загруженные с родительским загрузчиком первым"
    • Нажмите Кнопку "Применить"
  3. отключить перезагрузку класса JSP
    • a. Выберите: Приложения > > типы приложений > > WebSphere enterprise applications
    • нажмите на проект
    • нажмите на JSP и JSF опции
    • снимите флажок "JSP включить перезагрузку класса"
    • нажмите OK
  4. изменить реализацию JSF
    • перейдите к: приложения > > типы приложений > > WebSphere enterprise приложения
    • нажмите на проект
    • нажмите на JSP и JSF options
    • выберите "MyFaces 1.2" В разделе Реализация JSF
  5. запустить проект