【问题标题】:Switch off DispatcherServlet on Spring Boot在 Spring Boot 上关闭 DispatcherServlet
【发布时间】:2015-06-10 13:53:06
【问题描述】:

如何在 SpringBoot 上禁用 DispatcherServlet,即使尝试通过 servlet 注册禁用它,uri 映射也会出现在日志中:

@Bean
public ServletRegistrationBean servletRegistrationBean(final DispatcherServlet dispatcherServlet) {
    final ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(dispatcherServlet);
    servletRegistrationBean.setEnabled(false);

    return servletRegistrationBean;
}

日志

2015-06-10 10:39:57.552  INFO 7032 --- [           main] o.s.b.c.e.ServletRegistrationBean        : Servlet dispatcherServlet was not registered (disabled)
2015-06-10 10:39:57.553  INFO 7032 --- [           main] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]

感谢任何帮助!

【问题讨论】:

  • 为什么要禁用它...
  • 我将在我的应用程序中使用“SpringVaadinServlet”,所以我不需要 Spring MVC
  • 简单排除spring-webmvc依赖,或者排除@EnableAutoConfiguration注解中的DispatcherServletAutoConfiguration
  • 其实我用的是@SpringBootApplication,我应该排除在这吗? @SpringBootApplication(exclude = { DispatcherServletAutoConfiguration.class })

标签: java spring spring-boot


【解决方案1】:

我将以下代码添加到我的主类中,并且从日志中删除了 servlet。

@SpringBootApplication(exclude = { DispatcherServletAutoConfiguration.class })

【讨论】:

    【解决方案2】:

    来自 Spring Boot 文档here

    Spring Boot 希望从应用程序的根目录/ 向下提供所有内容。如果您希望将自己的 servlet 映射到该 URL,您可以这样做,但当然您可能会丢失一些其他 Boot MVC 功能。要添加您自己的 servlet 并将其映射到根资源,只需声明类型为 Servlet@Bean 并为其指定特殊的 bean 名称 dispatcherServlet(如果需要,您也可以使用该名称创建不同类型的 bean将其关闭而不是替换它)。

    【讨论】:

      【解决方案3】:

      如果排除DispatcherServletAutoConfiguration.class, 那么你也需要排除ErrorMvcAutoConfiguration.class,或者至少我做到了。

      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration;
      import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration;
      import org.springframework.boot.builder.SpringApplicationBuilder;
      import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
      import org.springframework.context.annotation.EnableAspectJAutoProxy;
      
      @SpringBootApplication(exclude = { DispatcherServletAutoConfiguration.class, ErrorMvcAutoConfiguration.class})
      @EnableAspectJAutoProxy
      public class CoreApplication extends SpringBootServletInitializer {
          public static void main(String[] args) {
              SpringApplication.run(CoreApplication.class, args);
          }
      
          @Override
          protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
              return application.sources(CoreApplication.class);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2019-05-12
        • 2017-08-30
        • 2018-09-07
        • 2021-07-19
        • 2015-12-24
        • 2017-03-05
        • 2015-06-11
        • 1970-01-01
        • 2015-08-20
        相关资源
        最近更新 更多