4

私の質問は、このEmbedded Tomcat Integrated With Springに似ています。組み込みの Tomcat で Spring MVC Dispatcher Servlet を実行したいと考えています。しかし、WebApplicationObjectSupport インスタンスが ServletContext 内で実行されないという例外が常に発生します。私の例には、次の 2 つのクラスしかありません。

 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 ディスパッチャーを組み込みの tomcat でブートせずに使用する方法の例はありますか?

4

1 に答える 1