«java.lang.IllegalStateException: не задан ServletContext» при развертывании сервлета - PullRequest
0 голосов
/ 03 октября 2019

Я хочу развернуть WAR-пакет spring-mvc webapp на tomcat. Процесс развертывания завершается неудачно со следующей ошибкой: 'java.lang.IllegalStateException: No ServletContext установлен'

Я думаю, что-то не так с моей конфигурацией: (* ​​1003 *

Инициализатор моего веб-приложения:

package com.jbtits.spring.mvc.webac;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

public class AppInitializer implements WebApplicationInitializer {

    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
        applicationContext.register(AppConfig.class);
        applicationContext.refresh();

        DispatcherServlet servlet = new DispatcherServlet(applicationContext);
        ServletRegistration.Dynamic registration = servletContext.addServlet("webac", servlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/");
    }
}

Конфигурация моего веб-приложения:

package com.jbtits.spring.mvc.webac;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
@EnableWebMvc 
@ComponentScan("com.jbtits.spring.mvc.webac")
public class AppConfig extends WebMvcConfigurationSupport {
}

Вот только два компонента.

Выход сбоя Tomcat:

02-Oct-2019 18: 02: 52.971 ПРЕДУПРЕЖДЕНИЕ [http-nio-8081-exec-84] org.springframework.context.support.AbstractApplicationContext.refresh Исключительная ситуация, возникшая при инициализации контекста - отмена попытки обновления: org.springframework.beans.factory.BeanCreationException: ошибка создания bean-компонентас именем 'resourceHandlerMapping', определенным в org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: сбой создания экземпляра компонента с помощью метода фабрики; вложенное исключение - org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.web.servlet.HandlerMapping]: фабричный метод 'resourceHandlerMapping' вызвал исключение;вложенное исключение - java.lang.IllegalStateException: не задано ServletContext

1 Ответ

0 голосов
/ 03 октября 2019

Я нашел решение: нет необходимости вызывать applicationContext.refresh(); в org.springframework.web.WebApplicationInitializer#onStartup, потому что он будет автоматически вызываться в методе org.springframework.web.servlet.FrameworkServlet#configureAndRefreshWebApplicationContext при загрузке сервлета в контейнер сервлета.

Но я используюпример из документов spring.io: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet. Почему они используют это таким образом? доказательство

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...