解读maven项目中Tomcat10与JSTL的问题汇总(Debug亲身经历)

 更新时间:2023年07月17日 10:09:58   作者:某猿蚊常叮  
这篇文章主要介绍了解读maven项目中Tomcat10与JSTL的问题汇总(Debug亲身经历),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

maven项目中Tomcat10与JSTL的问题汇总

如果你在学习 web项目过程中遇到以下三种错误,那么本篇可能会对你有所帮助:

1 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

2 java.lang.NoClassDefFoundError:javax/servlet/jsp/tagext/TagLibraryValidator

3 java.lang.NoClassDefFoundError:jakarta/servlet/jsp/jstl/core/LoopTag

问题描述与解决方法

这里先总结出解决方法

问题1

无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

如果你的web服务器是10.0及以上,那么你可以在pom.xml中导入jstl依赖

<dependency>
	<groupId>org.glassfish.web</groupId>
	<artifactId>jakarta.servlet.jsp.jstl</artifactId>
	<version>2.0.0</version>
</dependency>

并且你需要将jakarta.servlet.jsp.jstl-2.0.0.jar解压,并从其META-INF文件夹中取出你需要的.tld文件,(一般c.tld就够用了)

并把这个文件导入到你项目的WEB-INF,这样启动的时候Tomcat服务器就可以编译到这个文件。

然后一定记得(假设你用的是idea,因为其它的我没用过)对maven项目做这些:

clean->validate->compile->install, 然后rebuild你的module,接着重启tomcat,正常情况下问题是可以解决的。关于问题分析可以翻到下一节

如果你的web服务器是9.0及以下,那么你可以在pom.xml中引入jstl依赖

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

引用格式可以参考JSTL的官网:http://tomcat.apache.org/taglibs/standard/

或者从官网下载一份jstl-1.2.jar拷贝到WEB-INF/lib中,并且解压jstl-1.2.jar将其中的META-INF中的tld文件拷贝到你的WEB-INF文件夹下,当然一定记得(假设你用的是idea,因为其它的我没用过)对maven项目做这些:

clean->validate->compile->install, 然后rebuild你的module,接着重启tomcat,正常情况下问题是可以解决的。关于问题分析可以翻到下一节

问题2

java.lang.NoClassDefFoundError:javax/servlet/jsp/tagext/TagLibrary Validator

假设你使用的Tomcat服务器是10.0及以上,那么大概率是在WEB-INF文件夹下,导入了x.tld文件,解决方法可以通过以上引入依赖的方式,也可以将jakarta.servlet.jsp.jstl-2.0.0.jarjakarta.servlet.jsp.jstl-api-2.0.0.jar两个jar包手动导入到WEB-INF/lib下,并且一定记得(假设你用的是idea,因为其它的我没用过)对maven项目做这些:

clean->validate->compile->install, 然后rebuild你的module,接着重启tomcat,正常情况下问题是可以解决的。关于问题分析可以翻到下一节

也可以通过官网下载:https://jakarta.ee/zh/specifications/tags/2.0/

问题3

java.lang.NoClassDefFoundError:jakarta/servlet/jsp/jstl/core/ LoopTag

假设你使用的Tomcat服务器是10.0及以上,解决方法可以通过以上引入依赖的方式,也可以将jakarta.servlet.jsp.jstl-api-2.0.0.jar这个jar包手动导入到WEB-INF/lib下,并且一定记得(假设你用的是idea,因为其它的我没用过)对maven项目做这些:

clean->validate->compile->install, 然后rebuild你的module,接着重启tomcat,正常情况下问题是可以解决的。关于问题分析可以翻到下一节

问题原因分析

问题一分析

无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

针对于这个问题,网上给出的大部分解决方法都是下载:jstl-1.2.jarstandard-1.1.2.jar这两个jar包,然后解压取出其中的~文件放到WEB-INF文件夹下,但是这只能解决Tomcat9及以下的服务器。

关于为什么需要解压出tld文件?

因为某些版本的Tomcat在启动中会扫描jar包,但并不会扫描jar包中包含的tld文件,比如c.tld文件等,在tomcat编译过程中被忽略了。

通过查阅我才知道下面这件事

众所周知,由于Tomcat10使用的是JakartaEE9的标准,Servlet的标准包不再由Apache支持维护,转交给Jakarta管理,对应的最新JSTL只能在Jakarta.ee官网下载。

所以,对于Tomcat10原来的jstl-1.2.jar,已经不能满足了,换成了jakarta.servlet.jsp.jstl-2.0.0.jarjakarta.servlet.jsp.jstl-api-2.0.0.jar

问题二分析

java.lang.NoClassDefFoundError:javax/servlet/jsp/tagext/TagLibraryValidator

我遇到这个错误,是我将jstl-1.2.jar已经导入到项目中,并且我还将c.tld文件导入了WEB-INF中,说明还是少类文件(但是我并没有找到这个类文件。。。)。

然后我新增了pom.xmljstl-2.0的依赖,问题就解决了

问题三分析

java.lang.NoClassDefFoundError:jakarta/servlet/jsp/jstl/core/LoopTag

也就是编译时找不到LoopTag类,我遇到这个情况是:

我已经将jakarta.servlet.jsp.jstl-2.0.0.jar导入了,但是少了另一个包,后来我终于在jstl-api文件下发现了它

总结

debug的过程中,少不了要去看别人的经历,但是有时候耶稣救不了你,还得根据报什么错,自己发现问题,最好是重新建一个工程,通过对比,发现问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java连接数据库(代码分享)

    java连接数据库(代码分享)

    本文主要介绍了java连接数据库的实现方法代码。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • 浅谈java获取UUID与UUID的校验

    浅谈java获取UUID与UUID的校验

    这篇文章主要介绍了java获取UUID与UUID的校验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 原来Java中有两个ArrayList

    原来Java中有两个ArrayList

    原来Java中有两个ArrayList,本文就带着大家一起探究Java中的ArrayList,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • Java输入输出流的使用详细介绍

    Java输入输出流的使用详细介绍

    本篇文章介绍了,在Java中输入输出流的使用详细分析。需要的朋友参考下
    2013-04-04
  • Jpa使用Page和Pageable分页遇到的问题及解决

    Jpa使用Page和Pageable分页遇到的问题及解决

    这篇文章主要介绍了Jpa使用Page和Pageable分页遇到的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 一篇文章带你了解java泛型--泛型类,泛型方法,泛型接口

    一篇文章带你了解java泛型--泛型类,泛型方法,泛型接口

    这篇文章主要介绍了java泛型基础知识及通用方法,从以下几个方面介绍一下java的泛型: 基础, 泛型关键字, 泛型方法, 泛型类和接口,感兴趣的可以了解一下
    2021-08-08
  • mybatis中<if>标签bool值类型为false判断方法

    mybatis中<if>标签bool值类型为false判断方法

    这篇文章主要给大家介绍了关于mybatis中<if>标签bool值类型为false判断方法,文中通过示例代码介绍的非常详细,对大家学习或者使用mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Spring Boot中@Autowired注入为空的原因以及解决方法

    Spring Boot中@Autowired注入为空的原因以及解决方法

    最近在开发中遇到了使用@Autowired注解自动装配时会报空指针,发现对象并没有装配进来,下面这篇文章主要给大家介绍了关于Spring Boot中@Autowired注入为空的原因以及解决方法,需要的朋友可以参考下
    2024-01-01
  • SpringBoot项目实现关闭数据库配置和springSecurity

    SpringBoot项目实现关闭数据库配置和springSecurity

    这篇文章主要介绍了SpringBoot项目实现关闭数据库配置和springSecurity的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • shiro+jwt登陆验证实现教程

    shiro+jwt登陆验证实现教程

    本文介绍了如何使用Shiro和JWT实现登录认证,并通过自定义Realm和过滤器来完成身份验证和授权,通过测试,展示了如何携带JWT令牌进行接口访问,并验证了其有效期
    2026-03-03

最新评论