我创建了一个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映射?
答案 0 :(得分:19)
在引导类中添加@ServletComponentScan
。
,例如
@SpringBootApplication
@ServletComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这将使spring boot能够扫描@WebServlet
以及@WebListener
。
答案 1 :(得分:5)
使用Spring Boot,如果要注册Servlet并提供URL模式,则应使用ServletRegistrationBean
对象而不是@WebServlet
注释。
将此bean添加到@Configuration
类应该可以解决问题:
@Bean
public ServletRegistrationBean delegateServiceExporterServlet() {
return new ServletRegistrationBean(new DelegateServiceExporter(), "/remoting/DelegateService");
}
答案 2 :(得分:2)
可以在Spring Boot中加载带有@WebServlet
注释的servlet及其映射。为此,您需要将@ServletComponentScan
与@Configuration
注释一起使用。这也适用于@WebFilter
和@WebListener
注释。