今天用eclipse在maven项目里测试jsp页面时报了如下错误:
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:forEach>标签,简单的跳转到jsp页面没有问题,加了<c:forEach>标签就报这个错误
找了好久才找到原因,终于实测解决了。
出错原因
这是因为在<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>里,
taglib指定的uri找不到导致的
解决问题步骤
1、首先我们要确认下自己的uri=""引入是否有错误
JSTL 1.0 声明:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
JSTL 1.1 之后声明:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
我的uri=""引入并没有问题,那么继续解决问题
2、确保项目中有jstl.jar和标准实现包,注意版本一定要匹配
我这里用的是jstl1.2.jar和taglibs-standard-impl-1.2.5.jar,这两个是匹配的版本,如果你没有,可以在maven里配置这两个jar包的坐标
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- taglibs-standard-impl-1.2.5 -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
注入jar包后,我们就可以在maven的jar包里找到taglibs-standard-impl-1.2.5.jar所在的路径
找到这个jar包后,可以把jar包打开(我是右击文件,选择用360压缩打开)
打开后,再点开META-INF文件夹,里面就是我们要找的TLD文件了
我们把所有的tld文件都复制出来
(其实如果只用c开头的标签,只需要复制c开头的tld文件,不过还是都复制吧,以后要用到别的功能要用到)
复制出来的tld文件我们粘贴到 项目的WEB-INF下面,我是在WEB-INF下面新建了个jstl-tld文件夹,然后粘贴到这个文件夹下面的,这2者没什么区别
好了,接下来重启服务器运行即可,保险起见可以project–clean一下再启动,问题解决!