Ява.ленг.LinkageError: нарушение ограничения загрузчика: при разрешении метода интерфейса javax.сервлет.JSP-страница.JspApplicationContext.getExpressionFactory() [дубликат]
этот вопрос уже есть ответ здесь:
- java.ленг.LinkageError: javax.сервлет.JSP-страница.JspApplicationContext.getExpressionFactory 5 ответов
Я использую 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. Вот исправление:
- обновить web.XML:
- открыть имя_проекта\НИЦ\главная\Арр\веб-веб-инф\.в XML
- добавьте следующий обработчик:
Com.sun.faces.config.ConfigureListener
- создайте проект и разверните его в Websphere
- изменить порядок загрузки:
- Откройте консоль Websphere application server
- перейти к: приложения > > типы приложений >> WebSphere enterprise applications
- нажмите на проект
- нажмите "загрузка класса и обнаружение обновлений"
- выберите "классы, загруженные с родительским загрузчиком первым"
- Нажмите Кнопку "Применить"
- отключить перезагрузку класса JSP
- a. Выберите: Приложения > > типы приложений > > WebSphere enterprise applications
- нажмите на проект
- нажмите на JSP и JSF опции
- снимите флажок "JSP включить перезагрузку класса"
- нажмите OK
- изменить реализацию JSF
- перейдите к: приложения > > типы приложений > > WebSphere enterprise приложения
- нажмите на проект
- нажмите на JSP и JSF options
- выберите "MyFaces 1.2" В разделе Реализация JSF
- запустить проект