spring项目用到了 spring-security的标签。具体如下:
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
然后运行后,解析jsp文件时,报如下错误:
The absolute uri: [http://www.springframework.org/security/tags] cannot be resolved in either web.xml or the jar files deployed with this application
问题原因:
这种自定义标签,需要根据 uri找到对应的 *.tld 文件,报错是因为没有找到对应的 .tld文件。.tld文件大多是放在提供该标签的库的jar包里的META-INF文件夹下的。
解决方法
- 首先确定是否引入了正确的jar包,jar包中是否有对应的 *.tld文件,文件中的uri是否和你使用的uri一样。
*.tld文件示例
<taglib>
......
<uri>http://xxx</uri>
......
</taglib>
- 包和文件都有了,还需要tomcat能够发现这些文件。tomcat在启动的时候会使用The Jar Scanner Component去扫描所有的jar包,从而发现这个文件。之前因为其他项目原因,把tomcat的jarScanFilter给该了,导致没有去扫描到该文件。所以报错了。
这里就又再提一次tomcat项目中出现循环依赖问题,导致启动失败:
org.bouncycastle.asn1.DERBoolean->org.bouncycastle.asn1.ASN1Boolean
此时需要找到项目引入的第三方库中包含对应类的jar包,然后在conf/catalina.properties文件中的tomcat.util.scan.StandardJarScanFilter.jarsToSkip后面添加对应的jar包。最好不要添加*.