java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

Я разрабатываю приложение для FB Login с веб-сайта, используя Javascript и JSF. Я разместил свой код здесь. The problem is, when I run my application it does't show the JSF page, it instead throws the following exception:

Nov 28, 2013 7:21:46 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/FacebookLogin] threw exception [javax/servlet/jsp/jstl/core/Config] with root cause
java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
    at com.sun.faces.application.view.JspViewHandlingStrategy.executePageToBuildView(JspViewHandlingStrategy.java:344)
    at com.sun.faces.application.view.JspViewHandlingStrategy.buildView(JspViewHandlingStrategy.java:153)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:99)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

В чем здесь проблема и как я могу ее решить?

2 ответа

Решение

java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

Как видно из названия пакета, упомянутый класс является частью JSTL. Исключение ясно говорит о том, что файл определения класса упомянутого класса не может быть найден в пути к классам во время выполнения. То есть Config.class файл или, по крайней мере, файл JAR, содержащий этот класс, отсутствует в пути к классам веб-приложений.

Обычно JSTL уже поставляется из коробки с помощью полноценного контейнера Java EE, такого как TomEE, JBoss AS/ EAP/ WildFly, Payara/ GlassFish, WebLogic и т. Д., Но не с помощью базовых контейнеров JSP/Servlet, таких как Tomcat и Jetty. Для них вам потребуется самостоятельно предоставить JSTL вместе с веб-приложением, точно так же, как вы делали бы это с JSF (который также уже поставляется в комплекте с полноценными контейнерами Java EE).

Вы сталкиваетесь с этим исключением, потому что Facelets имеет для его <c:xxx> помечает зависимость от JAR-файла реализации JSTL, пока вы используете Tomcat, который не поставляется с JSTL из коробки. JSTL представляет собой отдельную библиотеку, доступную в виде jstl-1.2.jar. Просто скачайте и поместите его в свой веб-приложение /WEB-INF/lib папку, вместе с файлами JAR JSF, которые вы уже разместили там, и это исключение должно исчезнуть. Пользователи Maven могут добиться этого, добавив приведенную ниже зависимость (и выполнив полное перестроение / повторное развертывание):

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

В качестве альтернативы просто замените Tomcat на настоящий контейнер Java EE.

Смотрите также:

Я просто хочу добавить свой вклад, если кто-то получит эту ошибку, пытаясь создать модуль springframework-4.0.7-RELEASE для jboss-eap-6.4.0.GA. мой module.xml теперь содержит:

<dependencies>
    ...
    <!-- Contains javax.servlet.jsp.jstl.core.Config -->
    <module name="javax.servlet.jstl.api"/>
    ...
</dependencies>
Другие вопросы по тегам