解决Caused by: java.lang.ClassNotFoundException: javax.servlet.annotation.WebServlet

本文详细解析了SpringBoot项目启动时报错的原因,主要由于pom.xml中依赖配置错误,导致无法识别@,“RestController”等注解。文章提供了正确的依赖引用方式,即使用spring-boot-starter-web而非spring-web,确保项目正常启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot项目启动报错信息:

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2020-02-28 13:32:23.706 ERROR 6528 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Bean instantiation via constructor failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:279) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:176) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
	at com.zyy.demo.Application.main(Application.java:17) [classes/:na]
Caused by: java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet
	at org.springframework.boot.web.servlet.WebServletHandler.<init>(WebServletHandler.java:39) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
	at org.springframework.boot.web.servlet.ServletComponentRegisteringPostProcessor.<clinit>(ServletComponentRegisteringPostProcessor.java:50) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_101]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_101]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_101]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_101]
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:122) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:271) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	... 17 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.servlet.annotation.WebServlet
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_101]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_101]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_101]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_101]
	... 26 common frames omitted

Disconnected from the target VM, address: '127.0.0.1:6363', transport: 'socket'

Process finished with exit code 1

产生原因:

pom依赖错误引用,@RestController、@RequestMapping等注解引用了下面这个

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.3.13.RELEASE</version>
</dependency>

解决方案:

@RestController、@RequestMapping等注解改为引用下面这个:

<dependency>
   <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>1.5.9.RELEASE</version>
</dependency>

修改后启动成功。

### 解决 `java.lang.ClassNotFoundException: javax.servlet.ServletContext` 的方案 当遇到 `java.lang.ClassNotFoundException: javax.servlet.ServletContext` 错误时,通常是因为缺少必要的 Servlet API 依赖项。以下是几种解决方案: #### 方法一:更新 Maven 或 Gradle 配置文件中的依赖关系 对于基于 Spring Boot 的应用程序,在项目的 pom.xml 文件中添加或确认已存在以下依赖配置可以解决问题[^3]。 ```xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> ``` 注意版本号可以根据实际需求调整;这里选择了较新的 4.0.1 版本作为例子。同时请注意 `<scope>` 设置为了 provided,这意味着容器已经提供了这些库,因此不需要打包到最终的应用程序中去。 #### 方法二:修改 IDE 运行配置设置 如果是在开发环境中遇到了这个问题,则可能需要检查IDE(如 IntelliJ IDEA)的运行配置选项。具体操作为进入 Run/Debug Configurations -> Application -> Configuration 页面,并勾选 "Include dependencies with 'Provided' scope" 复选框来确保所有必需的第三方库都能被正确加载[^5]。 #### 方法三:验证项目结构与构建工具兼容性 有时错误也可能源于不匹配的 Java EE 和 Jakarta EE 库之间的冲突。特别是从旧版迁移到新版的过程中容易发生此类情况。此时应仔细核对所使用的框架及其对应的 Servlet 规范版本是否一致[^4]。 另外,考虑到 Eureka 是 Netflix OSS 提供的服务发现组件之一,其本身并不直接涉及 Servlet 上下文对象的操作。但如果自定义了扩展类继承自 `SpringBootServletInitializer` 并重写了相应的方法,则可能会间接引入对该接口的需求。在这种情况下,请务必按照官方文档指导完成正确的集成工作[^1]。 最后提醒一点,虽然可以在 UserServlet 中通过注解方式声明 URL 映射路径,但这并不是解决当前问题的关键所在[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值