Мой вопрос похож на этот Встроенный Tomcat, интегрированный с Spring. Я хочу запустить сервлет Spring MVC Dispatcher на встроенном Tomcat. Но я всегда получаю исключение, говорящее, что экземпляр WebApplicationObjectSupport не запускается в ServletContext. В моем примере всего два класса:
class Application {
public static void main(String[] args) throws LifecycleException, ServletException {
try (AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext()) {
context.registerShutdownHook();
context.register(WebConfig.class);
context.refresh();
Tomcat tomcat = new Tomcat();
tomcat.setPort(9090);
File base = new File("");
System.out.println(base.getAbsolutePath());
Context rootCtx = tomcat.addWebapp("", base.getAbsolutePath());
DispatcherServlet dispatcher = new DispatcherServlet(context);
Tomcat.addServlet(rootCtx, "SpringMVC", dispatcher);
rootCtx.addServletMapping("/*", "SpringMVC");
tomcat.start();
tomcat.getServer().await();
}
}
}
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/assets/");
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("redirect:index.html");
}
}
Как мне определить контекст сервлета иначе, чем вызовом метода tomcat.addWebApp(..)? Есть ли у кого-нибудь пример использования диспетчера Spring MVC со встроенным котом, но без загрузки?