如何使用Spring Boot注册辅助servlet?

che*_*tts 63 java spring spring-boot

我需要在我的应用程序中注册一个额外的servlet.但是使用Spring Boot及其Java Config,我不能只在web.xml文件中添加servlet映射.

如何添加其他servlet?

che*_*tts 130

也有 ServletRegistrationBean

@Bean
public ServletRegistrationBean servletRegistrationBean(){
    return new ServletRegistrationBean(new FooServlet(),"/someOtherUrl/*");
}
Run Code Online (Sandbox Code Playgroud)

最终成为我走的路.


chr*_*ke- 53

只需为servlet添加一个bean.它将被映射到/{beanName}/.

@Bean
public Servlet foo() {
    return new FooServlet();
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您确实希望它映射到`/ something/*`而不是`/ something /`,则需要使用`ServletRegistrationBean`. (6认同)
  • 这不适合我.在这个答案中,ServletRegistrationBean的作用是什么:/sf/answers/1465794641/ (2认同)

小智 20

您可以在Application类中使用不同的ServletRegistrationBean注册多个不同的servlet,如@Bean,并且可以注册一个具有多个servlet映射的servlet;

   @Bean
   public ServletRegistrationBean axisServletRegistrationBean() {
      ServletRegistrationBean registration = new ServletRegistrationBean(new AxisServlet(), "/services/*");
      registration.addUrlMappings("*.jws");
      return registration;
   }

   @Bean
   public ServletRegistrationBean adminServletRegistrationBean() {
      return new ServletRegistrationBean(new AdminServlet(), "/servlet/AdminServlet");
   }
Run Code Online (Sandbox Code Playgroud)


小智 5

我们还可以通过以下方式注册 Servlet:

@Configuration
public class ConfigureWeb implements ServletContextInitializer, EmbeddedServletContainerCustomizer {

  @Override
  public void onStartup(ServletContext servletContext) throws ServletException {
      registerServlet(servletContext);
  }

  private void registerServlet(ServletContext servletContext) {
      log.debug("register Servlet");
      ServletRegistration.Dynamic serviceServlet = servletContext.addServlet("ServiceConnect", new ServiceServlet());

      serviceServlet.addMapping("/api/ServiceConnect/*");
      serviceServlet.setAsyncSupported(true);
      serviceServlet.setLoadOnStartup(2);
  }
}
Run Code Online (Sandbox Code Playgroud)