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

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

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

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

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

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

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

原本这里就结束了,但是我不甘心,这么解决太暴力了,而且影响项目结构,看起来很乱,于是乎继续翻阅资料。偶然发现了一篇博客,说是tomcat的配置文件里如果配置了跳过tld扫描会导致项目无法加载.tld文件的问题,我恍然大悟!

原来是昨天运行项目的时候,tomcat出现了一个警告。

解决方式是:Tomcat安装目录下apache-tomcat\conf\catalina.properties文件中看到有以下一串代码,代表的是在启动Tomcat需要跳过检查的jar包。

修改为 tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar 就不会出现警告了。突然明白,原来修改后tomcat就不会加载jar包中的.tld文件,所以导致报500错误,于是我重新修改为原来的代码,然后去掉项目中META-INF\taglib文件夹,运行后,成功了!

这下,终于真相大白了。

总结:

我看网上很多说法,说是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=\,优缺点与第一种相反。

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

文章参考:

https://blog.csdn.net/sinat_34104446/article/details/82846585?utm_medium=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

SSM框架练习之Jsp页面使用taglib标签报错500的问题的更多相关文章

  1. 关于SSM框架项目中jsp页面EL表达式使用的一些疑问(一)

    问题 ssm框架整合中,jsp页面中EL表达式所引用的对象“page”可以在controller中使用mav.addObject(“page”,pag )进行添加,如果省略mav.addObject( ...

  2. js 和 css 中 不能使用 jsp 页面中一些 标签 和 java 代码等,应注意

    js  和 css 中 不能使用 jsp  页面中一些 标签 和 java 代码等,应注意 如 ${ }  <%%>  等

  3. Eclipse 新建.jsp页面后,页面头部标签报错的解决方法

    Eclipse 新建.jsp页面后,页面头部标签报错的解决方法 1.报错地方: 2.解决方法: .jsp页面右键==>BUild Path ==>Configure Build Path. ...

  4. 页面白屏并且报错PHP Parse error: syntax error, unexpected end of file in 试了很久总算解决了

    页面白屏并且报错PHP Parse error:  syntax error, unexpected end of file in 试了很久 啥短标记,打开,都试了 最简单的办法 是重新建立一个文件, ...

  5. 【js监听报错】页面监听js报错问题

    <html> <head> <script type="text/javascript"> // 页面监听js报错问题 onerror=hand ...

  6. laravel框架手动删除迁移文件后再次创建报错

    手动删除laravel框架数据表迁移文件后再次创建报错 如下图: 执行创建操作之后会在autoload_static.php及autoload_classmap.php这两个文件中添加迁移文件的目录. ...

  7. JSP页面中taglib的uri设置

    今天遇到这样一个问题,使用JAVA做了个WEB应用,其中用到一个自定义标签.该标签的class文件与tld(tld文件中,uri定义为:http://wallimn.iteye.com/myfuncs ...

  8. SSM项目无法解析JSP页面

    JSP页面显示标头<%@ page language="java" contentType="text/html; charset=UTF-8" page ...

  9. jsp页面中jstl标签详解

    JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可以随手就可以写出来.这算是Java程序员的基本功吧,一定要扎实. JSTL ...

随机推荐

  1. JavaScript基础Curry化(021)

    时候我们希望函数可以分步接受参数,并在所有参数都到位后得到执行结果.为了实现这种机制,我们先了解函数在Javascript中的应用过程: 1. 函数的“应用”(Function Application ...

  2. JavaScript基础函数的属性:记忆模式(019)

    函数在Javascript里是有属性的,因为它们是一种特殊对象.事实上,就算是没有明确声明,函数在最初就已经包含了一些固有的属性,比如所有函数都length这个属性,它可以指出函数声明了多少个参数: ...

  3. 前端丨如何使用 tcb-js-sdk 实现图片上传功能

    前言 tcb-js-sdk 让开发者可以在网页端使用 JavaScript 代码服务访问云开发的服务,以轻松构建自己的公众号页面或者独立的网站等 Web 服务.本文将以实现图片上传功能为例,介绍 tc ...

  4. 每日一题 - 剑指 Offer 52. 两个链表的第一个公共节点

    题目信息 时间: 2019-07-03 题目链接:Leetcode tag: 单链表 难易程度:简单 题目描述: 输入两个链表,找出它们的第一个公共节点. 示例: A: a1 -> a2 \ - ...

  5. 2020阿里巴巴官方最新Redis开发规范!

    本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 键值设计 命令使用 客户端使用 相关工具 通过本文的介绍可以减少使用Redis过程带来的问题. 一.键值设计 1.key名设计 ...

  6. 总结几个移动端H5软键盘的大坑

    1.部分机型软键盘弹起挡住原来的视图 解决方法:可以通过监听移动端软键盘弹起 Element.scrollIntoView() 方法让当前的元素滚动到浏览器窗口的可视区域内.参数如下. true,表示 ...

  7. TJOI2013 奖学金—大根堆实现(洛谷P3963)

    奖学金 题目描述 小张学院有 \(c\) 名学生,第 \(i\) 名学生的成绩为 \(ai\) ​,要获得的奖学金金额为 \(bi\) . 要从这 \(c\) 名学生中挑出 \(n\) 名学生发奖学金 ...

  8. wcf服务各种情况下应用

    1.控制台调用 第一步,添加wcf服务 2.写接口,记得要加好契约特性. 3.声明一个类继承wcf服务. 4.ipconfig配置 5.控制台运行 6.运行app.config里面,加上调用的接口方法 ...

  9. React当中的路由使用

    React 当中的路由 使用React构建的单页面应用,要想实现页面间的跳转,首先想到的就是使用路由.在React中,常用的有两个包可以实现这个需求,那就是react-router和react-rou ...

  10. day32 异常处理、网络编程

    目录 一.异常处理 1 什么是异常 2 为什么要处理异常 3 如何处理异常 3.1 语法错误 3.2 逻辑错误 3.3 两种处理逻辑异常的方式 3.3.1 可预知型错误 3.3.2 不可预知型错误 4 ...