操作系统:MacOS 10.15
开发环境:eclipse 2019-06 (4.12.0)+maven3.5.4+tomcat7.0.90
问题描述
Message:The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
Exception:org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
出错原因
在引用C标签<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
时无法解析http://java.sun.com/jsp/jstl/core,原因是没有导入jstl的实现
解决办法
1.简单粗暴添加taglibs-standard-impl.jar/taglibs-standard-impl.jar+taglibs-standard-spec
2.使用maven的话,添加(需要版本对应)——我自己的办法
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
<!-- 我没有加也可以运行了-->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
3.基于2的进一步精确:由于tomcat7是兼容j2ee 3.0规范的,所以我们将jstl 依赖的东西给去除掉,防止和tomcat自身的servlet jar包冲突,改正后的依赖为
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
</exclusion>
</exclusions>
</dependency>
4.更新:当仅仅添加taglibs-standard-impl
的时候,将会报错,具体为
Message:javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTag
Exception:org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTag
此时还是需要添加taglibs-standard-spec.jar
,具体在pom.xml中添加
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
感谢/参考文档
以下链接也有解决办法,但我没用到/测试
http://stackoverflow.com/questions/6094329/tomcat-7-and-jstl/25374024
http://stackoverflow.com/questions/6094329/tomcat-7-and-jstl/25374024
http://www.murraywilliams.com/2011/11/running-jstl-1-2-on-tomcat-7-using-maven/