Jsp页面使用taglib标签报错500的问题

文章摘自https://www.cnblogs.com/tioxy/p/13291574.html

 

最近在练手一个SSM的基于AdminLET框架模板的后台管理系统,使用的环境是tomcat9,使用Maven构建并通过添加Web模板框架的项目,在添加完所有的配置文件后启动tomcat运行,出现了一个错误:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]。如果想直接看此问题的解决方式,可以直接翻阅文章最后的总结。

Jsp页面使用taglib标签报错500的问题

花了大量时间查阅大量资料后解决了,下面我说一下我解决问题的整个经过。

出现问题后我查阅资料,大部分给出的原因是没有添加avax.servlet.jstl的依赖,或者是项目打包输出的构建文件lib中不包含这个包的依赖,我仔细检查后发现,我本地项目确实存在。

Jsp页面使用taglib标签报错500的问题

Jsp页面使用taglib标签报错500的问题

Jsp页面使用taglib标签报错500的问题

继续查阅资料说,少一个standard包的依赖,我继续尝试,在项目中添加standard包的依赖,并在tomcat的lib目录里也添加了jstl及standard包,继续运行,发现还是报错。

然后继续查阅资料,原因因为项目jsp页面引用的taglib标签所使用的tld文件没有从jstl包中加载出来,导致报错,解决方式是在项目的WEB-INF下添加jstl中所有tld文件。于是乎,我在本地项目的WEB-INF下建立了一个taglib文件夹,把jstl包解压后,把里面jar包的META-INF\中 .tld全部拷贝出后放在新建的文件夹中。

Jsp页面使用taglib标签报错500的问题

解决方式是暴力了点,还是先解决问题再说,于是乎再次运行。

Jsp页面使用taglib标签报错500的问题

前一个问题解决了,但出现了一个新的:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://www.springframework.org/security/tags]。心想,这不同理嘛,找到对应包的 .tld文件,然后也添加到WEB-INF下的taglib文件夹中不就行了,于是,我解压spring-security-taglibs-5.1.2.RELEASE,取出security.tld,运行确实成功了。

Jsp页面使用taglib标签报错500的问题

原本这里就结束了,但是我不甘心,这么解决太暴力了,而且影响项目结构,看起来很乱,于是乎继续翻阅资料。偶然发现了一篇博客,说是tomcat的catalina.properties配置文件里如果配置了跳过tld扫描会导致项目无法加载.tld文件的问题,所以解决办法是把catalina.properties配置文件中的tomcat.util.scan.StandardJarScanFilter.jarsToSkip字段修改为\

总结:

我看网上很多说法,说是tomcat添加tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar后会提高tomcat的启动速度,也会解决因为扫描.tld文件而导致卡在启动项目十几分钟的问题,但是带来的弊端就是jsp页面taglib标签500错误,所以这个问题的两种解决方式,大家根据自己情况自行选择:

  1. 第一种:在项目的WEB-INF下添加jstl中所有tld文件,这样会导致项目结构看起来很乱,好处是不使用JSP作为视图层时,tomcat启动速度增加。
  2. 第二种:就是修改tomcat中catalina.properties文件配置为tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\,优缺点与第一种相反。

如果有更好的解决方式,可以评论交流。

Jsp页面使用taglib标签报错500的问题

上一篇:PHP判断字符串所属编码:ASCII、GB2312、GBK、UTF-8、ISO-8859-1


下一篇:perf