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

我使用sitemesh来装饰页面。 我正在使用JSP页面。 页面工作正常,直到我使用条件标记。 我在WEB-INF / lib文件夹中有jstl-impl-1.2.jar和sitemesh-3.0-alpha-1.jar文件。 我在jsp页面中有以下标记库声明:

     

我正在使用带有java 6的tomcat 7.0。当我在eclipse中创建新的动态Web项目时,我将动态Web模块版本设置为2.4。 页面有标签,它们工作正常,但是当我使用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) 

此exception表明运行时类路径中缺少JSTL API。 你似乎只有JSTL impl。 我建议删除它并使用jstl-1.2.jar而不是捆绑了API和impl。

此外,我还建议更新您的web.xml根声明以符合Servlet 3.0规范。 JSTL 1.2至少需要Servlet 2.5,因此对于Servlet 2.4目标项目来说它不能很好地工作。 由于Tomcat 7是一个Servlet 3.0容器,Servlet 3.0提供了很多超过2.5的新酷function,所以我会选择它。

  

不要忘记相应地修改项目属性中的动态Web项目构面版本。

也可以看看:

  • 我们的JSTL维基页面

也许你必须将javax.servlet.jsp.jstl-api-1.2.x.jar添加到你的类路径中。 您只是在没有核心API的情况下声明了特定的实现。 我有同样的问题,我以这种方式解决了。 此致,贾科莫

JSTL lib可能缺少检查jstl和servlet jar。

来自Netbeans IDE

右键单击项目,然后按,库并添加一个库

你会解雇它。