(亲测解决)The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml

目录

一、问题描述

二、问题原因

三、问题解决

四、最新解决方案


一、问题描述

1.本篇文章是亲自遇到和亲自解决,在网上找了很久找不到解决办法才按照自己的方法解决了这个问题,文章绝对不是粘贴复杂没有用系列,希望能给遇到这个问题的朋友一个帮助

2.今天使用IDEA的maven创建web程序,在测试简单的JSTL的时候发现所有代码没有问题,但是一运行就提示异常:

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

JSTL异常界面

3.在使用本解决方法之前试过以下解决办法,但是全部失败

  • 将jstl包放到部署的lib目录中-失败
  • 将jstl放到Tomcat的lib目录中-失败
  • 将jar包单独导入然后添加依赖-失败
  • 将jar包放到部署后的lib目录中-失败

二、问题原因

1.这个问题Eclipse、MyEclipse、甚至是IDEA一般web应用都没有问题,就是出现在Idean使用Maven创建web应用程序中出现问题,但是并不绝对

2.如果在Eclipse、MyEclipse也遇到这个问题,同样可以参考解决

3.这个问题是taglib指定的uri找不到导致的,所以我们可以自己指定uri,也就是指定tld描述文件所在位置

4.先排除不是taglib引入的uri版本问题-根据自己导入的jstl包版本进行判断

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" %>

三、问题解决

1.首先,确保项目中包含了JSTL和标准实现包,注意版本匹配!

2.此处使用JSTL1.2.x版本演示,导入的依赖如下,如果非maven项目则导入jstl和标准实现包放到lib目录中

<!-- JSTL -->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
</dependency>
<!-- JSTL实现包 -->
<dependency>
	<groupId>org.apache.taglibs</groupId>
	<artifactId>taglibs-standard-impl</artifactId>
	<version>1.2.5</version>
</dependency>

3.标准实现包下载完成或者依赖下载完成之后,找到该jar包,然后使用压缩工具解压

4.进入压缩包中的taglibs-standard-impl-1.2.5\META-INF\中我们可以看到有如下描述文件

5.选择自己需要的描述文件放到项目的WEB-INF下,选择的时候不要选择带有1和0这样的,基本上我们选择c.tld也就是c标签通常就够用了

6.在web.xml中加入jsp-config配置,其中taglib-uri是自己需要在jsp文件中指定uri时使用,taglib-location是上一步拷贝的描述文件位置,如果是放在WEB-INF下的话就是"/WEB-INF/xxx.tld",注意需要多少个描述文件就有多少个<taglib>...</taglib>,但是只有一个<jsp-config>

<!-- 自己配置描述文件,需要多少个描述文件就配置多少 -->
<jsp-config>
    <!-- 配置c描述文件-对应c标签,这里的taglib-uri对应jsp中引入的uri -->
    <taglib>
        <taglib-uri>http://www.codecoord.com</taglib-uri>
        <taglib-location>/WEB-INF/c.tld</taglib-location>
    </taglib>
    <taglib>
        <taglib-uri>http://www.codecoord.com/fn</taglib-uri>
        <taglib-location>/WEB-INF/fn.tld</taglib-location>
    </taglib
</jsp-config>		

7.完成后在JSP文件中引用,uri记住是自己在web.xml中创建的

8.重启服务器,访问页面,成功访问,问题解决

9.总结解决流程:

  • 下载JSTL1.2和taglibs-standard-impl-1.2.5 jar包放到taglib中,maven项目加入依赖即可
  • 解压taglibs-standard-impl-1.2.5 jar包
  • 进入到jar包的META-INF\中
  • 拷贝描述文件如c.tld到项目的WEB-INF下
  • 在web.xml中配置<jsp-config>、<taglib>、<taglib-uri>、<taglib-location>
  • 在JSP文件的taglib中将uri指定为自己定义的uri
  • 重启服务器,问题解决

10.如果还没有解决,欢迎留言探讨

四、最新解决方案

   1.最新解决方案:直接将解压出来的tld文件放到WEB-INF下,或者放到WEB-INF下的新建文件夹中即可,不需要再额外配置jsp-config指定taglib,如果在web.xml中已经有jsp-config配置的taglib可注释掉,重新启动服务器,问题解决

2. 额外提及:后来发现,这个问题居然是tomcat的配置文件配置了跳过tld扫描导致的,当时为了tomcat有一个更快的速度跳过了所有的tld扫描。重新下载了一个tomcat,就可以了,所以两者不可兼得,这是当时写的博客:https://blog.csdn.net/sinat_34104446/article/details/82721250

 

  • 110
    点赞
  • 174
    收藏
    觉得还不错? 一键收藏
  • 170
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 170
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值