当前位置: 首页 > 面试题库 >

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

章绪
2023-03-14
问题内容

我正在使用sitemesh装饰页面。我为此使用了JSP页面。在使用<c:if>条件标签之前,页面工作正常。我在WEB-INF /
lib文件夹中有jstl-impl-1.2.jar和sitemesh-3.0-alpha-1.jar文件。我在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" %>

我在Java 6中使用tomcat
7.0。在eclipse中创建新的动态Web项目时,将动态Web模块版本设置为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)

问题答案:

该异常表明运行时类路径中缺少JSTL API。您似乎只有JSTL隐含功能。我建议将其删除,而改用同时包含API和impl
的jstl-1.2.jar。

此外,我还建议您更新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">

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

也可以看看:

  • 我们的JSTL Wiki页面


 类似资料:
  • JSP/JSTL/Servlet 1. JSP/JSTL/Servlet Tips 现在的project一般选Servlet2.5, JSP 2.1 和 JSTL1.2. 1.1 尽量使用JSP2.0的EL而不是JSTL,使页面看起来更像普通html页面。 比如: <input type="text" id="loginName" name="loginName" size="25" value=

  • 第1行和第2行有什么不同吗。jsp文件中的第2行没有给出任何错误,但另一个jsp中的第1行给出了错误 真正的JSTL1.0taglib使用URI http://java.sun.com/JSTL/core。 真正的JSTL 1.1/1.2 taglib使用URI http://java.sun.com/jsp/JSTL/core。 Facelets1.x使用URI http://java.sun.

  • 19.5 JSP & JSTL Spring为JSP和JSTL视图提供了几个开箱即用的解决方案。 使用JSP或JSTL是使用在WebApplicationContext中定义的常规视图解析器完成的。 此外,当然,您需要编写一些实际渲染视图的JSP。 设置应用程序使用JSTL是一个常见的错误源,主要是由于混淆了不同的servlet规范JSP和JSTL版本号,它们的含义和如何正确声明taglibs引起

  • 该软件已从gitee上移除

  • 问题内容: 这是我的JSP页面的taglib指令: 我收到以下错误: 我已经在 / WEB-INF / lib 文件夹中添加了JAR文件 jstl.jar 和 standard.jar 。 谁能告诉我我在哪里犯错了? __ 问题答案: 看起来您正在使用带有1.1 / 1.2的taglib URI的JSTL 1.0。您有不同版本的JSTL: 1.0 :存在两个JAR文件和。Taglib URI 在路

  • 问题内容: 我在JSP中有一个表格。我必须基于请求对象(来自servlet)填充它。如何使用Java Script访问请求对象属性,或者可以建议我其他更好的方法来动态填充表单? 问题答案: 您需要认识到Java / JSP仅仅是HTML/CSS/JS代码生产者。因此,您要做的就是让JSP像打印JavaScript变量一样打印Java变量,并且所生成的HTML / JS代码输出在语法上是有效的。 假

  • 15.2. JSP和JSTL Spring为JSP和JSTL这些view层技术提供了几个即取即用的解决方案。使用JSP和JSTL的话,采用WebApplicationContext中定义的普通视图解析器就好;当然,还得自己写一些实际做渲染的JSP页面。本章介绍了一些Spring提供的用于简化JSP开发的额外特性。 15.2.1. 视图解析器 与你在Spring中采用的任何其他视图技术一样,使用JS

  • 问题内容: 这是我的JSP页面的taglib指令: 我收到以下错误: 我已经在 / WEB-INF / lib 文件夹中添加了JAR文件 jstl.jar 和 standard.jar 。 谁能告诉我我在哪里犯错了? __ 问题答案: 看起来您正在使用带有1.1 / 1.2的taglib URI的JSTL 1.0。您有不同版本的JSTL: 1.0 :存在两个JAR文件和。Taglib URI 在路