SpringBoot支持JSP访问,启动报错java.lang.NoClassDefFoundError: javax/servlet/ServletContext

SpringBoot支持JSP简介

前言:

这篇文章中, 我们将使用IntelliJ IDEA开发一个带有Spring Boot所提供的内嵌tomcat的Spring MVC 应用程序示例。 示例源码是官网下载下来。记录一下所踩过的坑。有什么疑问可以在评论区提问,谢谢。

环境:

JDK1.8

IntelliJ IDEA/Eclipse

Maven

Spring Boot 1.5.6


Spring Boot与Apache Maven 3.2兼容。
Maven 依赖
spring-boot-starter-parent:  
提供了依赖关系管理,可以省略已存在依赖的版本标签。
并声明一个或多个“启动器”的依赖关系。Spring Boot还提供了一个可选的 Maven插件来创建可执行的jar。

spring-boot-starter-parent是使用Spring Boot的好方法,但它可能不适合所有的时间。有时您可能需要从不同的父POM

继承,或者您可能不喜欢我们的默认设置。请参见 

<?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>com.shoppingweb</groupId> <artifactId>ShoppingWeb</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- Servlet API --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> <!-- JSP API --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> <!-- JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- Spring Context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.30</version> </dependency> <!-- MySQL Connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins> </build> </project> 这是我web项目的pom.xml文件,我的环境是jdk18,tomcat9,idea2021,请问pom.xml文件有什么要改的吗。我的项目还没运行就显示Terminated with exit code 1 Terminated with exit code 1
最新发布
06-18
### Spring Boot 启动时遇到 `java.lang.NoClassDefFoundError: javax.servlet.http.HttpServlet` 错误解决方案 当Spring Boot应用程序启动报错 `Caused by java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet`,这通常意味着运行环境未能找到所需的Servlet API类文件。此问题可能由多种因素引起。 #### Servlet API 版本兼容性问题 如果使用的Tomcat服务器版本与项目中的Servlet API版本不匹配,则可能导致此类错误。例如,某些高版本的Tomcat不再支持旧版Servlet API,反之亦然。对于这种情况,可以考虑调整所用的Tomcat版本来适配项目的Servlet API版本需求[^3]。 #### Maven配置不当引发的问题 在Maven构建工具管理下的Java Web应用里,有时会因为pom.xml中定义了不必要的作用域标签(`<scope>provided</scope>`),使得编译期依赖被排除在外而导致缺少必要的库文件。移除或注释掉这些特定的作用域声明能够帮助解决问题: ```xml <dependencies> <!-- javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <!--<scope>provided</scope>--> </dependency> </dependencies> ``` 上述操作允许将Servlet API作为默认依赖项加入到打包过程中去[^4]。 #### 使用Jakarta EE而非Javax EE 随着 Jakarta EE 的发展,部分API命名空间已从`javax.*`迁移到了`jakarta.*`,因此如果是基于较新标准开发的应用程序应当确保所有相关组件都遵循最新的命名约定。检查并更新所有的import语句以及任何其他地方可能出现的老化路径是非常重要的一步。 为了彻底排查和修复这个异常情况,建议按照以上几个方面逐一验证是否存在潜在冲突,并采取相应措施加以修正。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值