我正在使用sitemesh装饰页面。我为此使用了JSP页面。在使用<c:if>条件标签之前,页面工作正常。我在WEB-INF / lib文件夹中有jstl-impl-1.2.jar和sitemesh-3.0-alpha-1.jar文件。我在jsp页面中有以下标记库声明:
<c:if>
<%@ 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条件标签时,出现以下错误:
<c:set/>
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.xml
<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项目构面版本。