spring boot整合 jsp 报错,无法访问 jsp 文件,java.lang.ClassNotFoundException: javax.servlet.jsp.tagext.TagLibra

在整合JSP时遇到运行错误,原因是SpringBoot内嵌Tomcat版本差异。Tomcat10使用jakarta.*包而非javax.*,因此引入jstl包需相应调整,使用如org.glassfish.web的jakarta.servlet.jsp.jstl版本3.0.0来避免找不到包的错误。

解决整合JSP时报错

解决内嵌tomcat报错

上面整合JSP的代码写完之后,运行会报错:
在这里插入图片描述
发现原因:根据 IDEA 报错的提示发现是Tomcat的原因:不同版本Spring Boot内嵌的Tomcat版本不一样,之前学习 Spring MVC 使用的版本是9,而现在是10,所以还是按照之前的方式引入 jstl 包的时候会用不了。
在这里插入图片描述

Tomcat10 用的 jakarta.* 软件包而不是 javax.* 软件包,故类似上图引入 jstl 包是用不了的,用Tomcat10 服务器运行的话,就会显示找不到包。

在这里插入图片描述

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

后续更精彩,尽情期待!

在使用 `knife4j-spring-boot-starter` 时出现 `java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest` 异常,通常与依赖版本或模块引入不当有关。以下是可能导致此问题的原因及解决方案: ### 原因分析 1. **Spring Boot 3.x 与 Jakarta EE 的兼容性问题**: - Spring Boot 从 3.x 开始全面迁移到 Jakarta EE 9 及以上版本,这意味着传统的 `javax.*` 包被替换为 `jakarta.*` 包。 - 如果项目中仍然存在对 `javax.servlet` 的引用而未更新为 `jakarta.servlet`,则会引发 `ClassNotFoundException`。 2. **Knife4j 版本不兼容 Spring Boot 3.x**: - 若使用的是旧版本的 `knife4j-spring-boot-starter`(例如 3.x 系列),它可能仍然依赖于 `javax.servlet` 相关类。 - 对于 Spring Boot 3.x 项目,应使用支持 Jakarta EE 的 Knife4j 启动器,如 `knife4j-openapi3-jakarta-spring-boot-starter`[^3]。 3. **缺少 Servlet API 依赖**: - 在某些情况下,尤其是手动管理依赖的项目中,可能遗漏了对 `servlet-api` 或 `jakarta.servlet-api` 的引入,导致运行时找不到相关类。 --- ### 解决方案 #### 方案一:升级 Knife4j 到适配 Spring Boot 3.x 的版本 - 将 `knife4j-spring-boot-starter` 替换为专为 Spring Boot 3.x 设计的 `knife4j-openapi3-jakarta-spring-boot-starter`,示例配置如下: ```xml <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId> <version>4.4.0</version> </dependency> ``` - 这将确保所有内部依赖都基于 `jakarta.servlet.http.HttpServletRequest` 而非 `javax.servlet.http.HttpServletRequest`。 #### 方案二:检查并统一项目中的 Servlet API 引用 - 如果项目中仍有其他依赖引用了 `javax.servlet`,建议升级这些依赖以支持 Jakarta EE。 - 对于无法升级的库,可尝试显式添加 `jakarta.servlet-api` 作为依赖以覆盖冲突: ```xml <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> ``` #### 方案三:确认是否误用了 Spring Boot 2.x 的依赖 - 如果项目本身是 Spring Boot 2.x,但错误地使用了仅适用于 Spring Boot 3.x 的 `knife4j-openapi3-jakarta-spring-boot-starter`,也会导致类加载失败。 - 此时应切换回标准的 `knife4j-spring-boot-starter`,并确保其版本与当前 Spring Boot 兼容。 --- ### 验证修复效果 - 完成上述调整后,重新构建并启动项目。 - 检查日志中是否仍然存在 `ClassNotFoundException`,若无异常输出,则表示问题已解决。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学鸡!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值