javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport

Я использую sitemesh для украшения страниц. Я использую для этого страницу JSP. Страница работала нормально, пока я не использовал условный тег <c:if>. У меня есть файлы jstl-impl-1.2.jar и sitemesh-3.0-alpha-1.jar в папке WEB-INF/lib. У меня есть следующие объявления библиотеки тегов на странице jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>

Я использую tomcat 7.0 с java 6. Когда я создал новый динамический веб-проект в eclipse, я установил версию динамического веб-модуля на 2.4. На странице есть теги <c:set/>, они работают нормально, но когда я использую условный тег if, я получаю следующую ошибку:

javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:342)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.sitemesh.webapp.WebAppContext.dispatch(WebAppContext.java:158)
org.sitemesh.webapp.WebAppContext.decorate(WebAppContext.java:133)
org.sitemesh.BaseSiteMeshContext.decorate(BaseSiteMeshContext.java:39)
org.sitemesh.webapp.SiteMeshFilter.postProcess(SiteMeshFilter.java:74)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.bufferAndPostProcess(ContentBufferingFilter.java:175)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.doFilter(ContentBufferingFilter.java:126)
org.sitemesh.config.ConfigurableSiteMeshFilter.doFilter(ConfigurableSiteMeshFilter.java:157)

root cause

java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(Unknown Source)
java.lang.ClassLoader.defineClass(Unknown Source)
java.security.SecureClassLoader.defineClass(Unknown Source)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1150)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1223)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1450)
org.apache.jasper.compiler.Parser.parse(Parser.java:138)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:102)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:644)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.sitemesh.webapp.WebAppContext.dispatch(WebAppContext.java:158)
org.sitemesh.webapp.WebAppContext.decorate(WebAppContext.java:133)
org.sitemesh.BaseSiteMeshContext.decorate(BaseSiteMeshContext.java:39)
org.sitemesh.webapp.SiteMeshFilter.postProcess(SiteMeshFilter.java:74)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.bufferAndPostProcess(ContentBufferingFilter.java:175)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.doFilter(ContentBufferingFilter.java:126)
org.sitemesh.config.ConfigurableSiteMeshFilter.doFilter(ConfigurableSiteMeshFilter.java:157)

root cause

java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.ConditionalTagSupport
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(Unknown Source)
java.lang.ClassLoader.defineClass(Unknown Source)
java.security.SecureClassLoader.defineClass(Unknown Source)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1150)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1223)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1450)
org.apache.jasper.compiler.Parser.parse(Parser.java:138)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:102)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:644)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.sitemesh.webapp.WebAppContext.dispatch(WebAppContext.java:158)
org.sitemesh.webapp.WebAppContext.decorate(WebAppContext.java:133)
org.sitemesh.BaseSiteMeshContext.decorate(BaseSiteMeshContext.java:39)
org.sitemesh.webapp.SiteMeshFilter.postProcess(SiteMeshFilter.java:74)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.bufferAndPostProcess(ContentBufferingFilter.java:175)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.doFilter(ContentBufferingFilter.java:126)
org.sitemesh.config.ConfigurableSiteMeshFilter.doFilter(ConfigurableSiteMeshFilter.java:157)

person Ghost-Man    schedule 08.11.2011    source источник
comment
Какая банка jstl-impl? Если вы используете taglibs Apache, вам понадобятся как jstl, так и стандартный jar.   -  person Dave Newton    schedule 08.11.2011
comment
@DaveNewton Я не уверен, я скачал его с сайта сервера Glassfish.   -  person Ghost-Man    schedule 08.11.2011
comment
Возьмите банку API; это должно сделать это. Если это так, я перенесу это в ответ. Если нет, я... просто задаюсь вопросом, что не так.   -  person Dave Newton    schedule 08.11.2011
comment
@DaveNewton Я сейчас не за своим компьютером. Пройдет несколько часов, прежде чем я попробую это, но я обязательно дам вам знать, так как кажется, что это сработает. Спасибо !!   -  person Ghost-Man    schedule 08.11.2011
comment
@DaveNewton, да, вы были правы, я пропустил банку API, добавив, что это сработало. Еще раз спасибо. Вы можете преобразовать его в ответ. +1   -  person Ghost-Man    schedule 08.11.2011
comment
Не имеет большого значения; узурпирован.   -  person Dave Newton    schedule 08.11.2011


Ответы (4)


Это исключение предполагает, что JSTL API отсутствует в пути к классам среды выполнения. Кажется, у вас есть только реализация JSTL. Я предлагаю удалить его и использовать jstl-1.2.jar вместо этого, который имеет в комплекте как API, так и реализацию.

Кроме того, я также рекомендую обновить вашу корневую декларацию web.xml, чтобы она соответствовала спецификации Servlet 3.0. JSTL 1.2 требует как минимум Servlet 2.5, поэтому он не будет очень хорошо работать с проектом, ориентированным на Servlet 2.4. Поскольку Tomcat 7 является контейнером Servlet 3.0, а Servlet 3.0 предлагает множество новых интересных функций по сравнению с 2.5, я бы пошел на это.

<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

Не забудьте соответствующим образом исправить версию фасета вашего динамического веб-проекта в свойствах проекта.

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

person BalusC    schedule 08.11.2011
comment
@BalusC Вы знаете, когда я разместил этот вопрос, я надеялся, что вы ответите. Потому что я знал, что если вы ответите, то это будет не только правильное решение, но и лишние очки, которые я мог упустить или сделать неправильно. Большое Вам спасибо. У меня проблема здесь, и, без сомнения, ваше решение сработало. - person Ghost-Man; 08.11.2011

возможно, вы также должны добавить javax.servlet.jsp.jstl-api-1.2.x.jar в свой путь к классам. Вы только объявляете конкретную реализацию без основного API. У меня была такая же проблема, и я решил таким образом. С уважением, Джакомо

person Giacomo Maurizio    schedule 04.08.2014

JSTL lib может отсутствовать, проверьте как JSTL, так и JAR-файлы сервлета.

person Suraj Kotwal Pune    schedule 23.01.2015

Из среды IDE Netbeans

Щелкните правой кнопкой мыши проект, затем нажмите, библиотеки и добавьте только библиотеку.

Что вы его уволите.

person Ahmed Salem    schedule 03.02.2014