【问题标题】:Spring Boot does not honor @WebServletSpring Boot 不支持 @WebServlet
【发布时间】:2015-03-03 08:51:16
【问题描述】:

我创建了一个 Servlet(从 HttpServlet 扩展)并按照 3.0 规范进行了注释

@WebServlet(name="DelegateServiceExporter", urlPatterns={"/remoting/DelegateService"})

我在 Spring Boot 中的 @Configuration 类扫描这个 servlet 的包。但是,当我的 Spring Boot 应用程序启动时,它不会记录它已经在嵌入式 Tomcat 8.0.15 容器中部署了这个 servlet。

所以,我也将@Component 添加到我的servlet 中。现在,Spring Boot 注册 servlet(向我证明扫描包已正确设置),但随后它使用基于类名的 URL 模式注册它,使用驼峰式大小写。所以,这样更好 - 例如,我注册了一个 servlet,但 URL 映射错误!

2015-01-05 11:29:08,516 INFO  (localhost-startStop-1) [org.springframework.boot.context.embedded.ServletRegistrationBean] Mapping servlet: 'delegateServiceExporterServlet' to [/delegateServiceExporterServlet/]

如何让 Spring Boot 自动加载所有 @WebServlet 带注释的 servlet 并尊重它们的 url 映射?

【问题讨论】:

  • 你没有。 Spring Boot 使用不同的方式来配置和映射 servlet。
  • 我已打开an issue 讨论是否有可能兑现@WebServlet。
  • 我得到了它与这里的建议一起工作。感谢大家!我找不到 Spring Boot 文档在哪里说它不支持 WebServlet 注释,所以这就是我感到困惑的原因。如果我错过了文档,请告诉我它写在哪里。否则,至少更新 Spring Boot 文档会有所帮助 - 例如,明确表示不支持 WebServlet 注释。 :)

标签: spring annotations spring-boot servlet-3.0 embedded-tomcat-8


【解决方案1】:

在你的引导类中添加@ServletComponentScan。

比如

@SpringBootApplication
@ServletComponentScan 
public class Application {
   public static void main(String[] args) {
       SpringApplication.run(Application.class, args);
   }
}

这将使 Spring Boot 能够扫描 @WebServlet 以及 @WebListener。

【讨论】:

  • 这应该是公认的答案。你是最棒的!
  • (AT)WebServlet 是 JEE 注解;因此,它仅在指定 (AT)ServletComponentScan 时才被拾取。后者是扫描 JEE 注释的指令。
  • 我建议指定 (a) Java 包以避免扫描整个依赖关系树;例如,@ServletComponentScan("org.my.project.servlet")
【解决方案2】:

对于 Spring Boot,如果要注册 Servlet 并提供 URL 模式,则应使用 ServletRegistrationBean 对象而不是 @WebServlet 注释。

将这个 bean 添加到您的 @Configuration 类应该可以解决问题:

@Bean
public ServletRegistrationBean delegateServiceExporterServlet() {
    return new ServletRegistrationBean(new DelegateServiceExporter(), "/remoting/DelegateService");
}

【讨论】:

    【解决方案3】:

    可以在 Spring Boot 中加载带有 @WebServlet 注释的 servlet 及其映射。为此,您需要使用 @ServletComponentScan 和 @Configuration 注释。这也适用于 @WebFilter 和 @WebListener 注释。

    【讨论】:

      猜你喜欢
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 2018-03-14
      • 2018-01-29
      • 1970-01-01
      • 2020-12-21
      相关资源
      最近更新 更多