ApplicationContextException:由于缺少 ServletWebServerFactory bean,无法启动 ServletWebSer

spring

1个回答

写回答

围墙

2025-06-17 16:55

+ 关注

Spring
Spring

在使用Spring框架开发Web应用程序时,我们经常会遇到一些错误和异常。其中一个常见的错误是"ApplicationContextException: 由于缺少 ServletWebServerFactory bean,无法启动 ServletWebServerApplicationContext"。本文将介绍这个错误的原因,并提供解决方案和示例代码。

## 错误原因分析

当我们在Spring应用程序中引入了web相关的依赖,例如Spring-boot-starter-web,Spring会自动尝试创建一个内嵌的Servlet容器(例如Tomcat或Jetty)来运行我们的应用程序。然而,如果在应用程序的配置中缺少一个必需的bean,即ServletWebServerFactory,Spring将无法启动ServletWebServerApplicationContext,并抛出ApplicationContextException异常。

## 解决方案和示例代码

为了解决这个问题,我们需要在应用程序的配置中添加一个ServletWebServerFactory bean。这个bean将负责创建和配置内嵌的Servlet容器。具体的解决方案取决于我们使用的Spring版本和配置方式。

Spring Boot 2.x

如果我们使用的是Spring Boot 2.x版本,可以通过在应用程序的主类上添加@EnableAutoConfiguration注解来自动配置内嵌的Servlet容器。示例代码如下:

Java

import org.Springframework.boot.SpringApplication;

import org.Springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class MyApplication {

public static void mAIn(String[] args) {

SpringApplication.run(MyApplication.class, args);

}

}

Spring 5.x

如果我们使用的是纯Spring 5.x版本,可以手动创建一个ServletWebServerFactory bean,并在应用程序的配置类中进行配置。示例代码如下:

Java

import org.Springframework.context.annotation.Bean;

import org.Springframework.context.annotation.Configuration;

import org.Springframework.web.server.adapter.WebHttpHandlerBuilder;

import org.Springframework.web.server.adapter.WebServerHttpHandlerAdapter;

import org.Springframework.web.server.adapter.WebHttpHandlerBuilder.Builder;

@Configuration

public class WebConfig {

@Bean

public ServletWebServerFactory servletWebServerFactory() {

// 创建并配置ServletWebServerFactory bean

// 这里可以根据需求选择不同的Servlet容器,例如Tomcat或Jetty

return new TomcatServletWebServerFactory();

}

@Bean

public WebServerHttpHandlerAdapter webServerHttpHandlerAdapter(

ServletWebServerFactory servletWebServerFactory) {

// 使用ServletWebServerFactory bean创建WebServerHttpHandlerAdapter bean

return new WebServerHttpHandlerAdapter(

WebHttpHandlerBuilder.applicationContext(new AnnotationConfiGAPplicationContext())

.build());

}

}

##

在开发Spring Web应用程序时,如果遇到"ApplicationContextException: 由于缺少 ServletWebServerFactory bean,无法启动 ServletWebServerApplicationContext"错误,我们可以通过添加一个适当的ServletWebServerFactory bean来解决问题。本文提供了针对Spring Boot 2.x和Spring 5.x的解决方案和示例代码。希望这篇文章能帮助你解决类似的问题,并顺利启动你的Spring Web应用程序。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号