前言
首先说明我用的各个版本
- Server info: Apache Tomcat/10.0.4
- Servlet version: 5.0
- JSP version: 3.0
- Java version: 1.8.0_261
升级为tomcat10以后, javax.servlet.jsp 开头的包不在适用,需要使用jakarta.servlet.xxx开头的包,因为自己用的tomcat10,不得不把maven中的jar包都换了
遇到的问题
java.lang.NoClassDefFoundError:javax/servlet/jsp/tagext/TagLibrary Validator
遇到这个问题的原因就是要学习jsp的标签库jstl,去maven官网,找到最新的jar包放到pow.xml中,并在jsp页面引入这一行:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
就出现了题目的错误
在网上搜集各种解决办法,集思广益大家的看法,却仍然没有解决!!!
后来,自己考虑了一下tomcat 10 和javax.xxx.xx这种jar包不兼容的问题,就继续百度搜索,终于终于找到了一位好心人的解决方案。
大佬遇到的各种坑:关于maven项目中Tomcat10与JSTL问题汇总(Debug亲身经历).
解决办法
- 按照大佬所说的导入两个jar包
jakarta.servlet.jsp.jstl-2.0.0.jar
和jakarta.servlet.jsp.jstl-api-2.0.0.jar
- 删除tomcat中其他版本的与servlet和jsp有关的jar包
pow.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>JavaWeb.jsp</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--servlet依赖-->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</dependency>
<!--jsp依赖-->
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
</project>