7

我創建一個Servlet(自HttpServlet擴展),並註釋爲每3.0規格在春季啓動春天開機不兌現@WebServlet

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

@Configuration類掃描該servlet的包。但是,當我的Spring Boot應用程序啓動時,它不記錄它在嵌入式Tomcat 8.0.15容器中部署了此servlet。

所以,我加了@Component到我的servlet。現在,Spring Boot註冊servlet(向我證明掃描包已正確設置),但是它使用camel case基於類名註冊了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/] 

如何讓春天開機自動加載的所有@WebServlet註釋的servlet和履行自己的網址映射?

+0

你不知道。 Spring Boot使用不同的配置和映射servlet的方式。 –

+0

我已經打開了[問題](https://github.com/spring-projects/spring-boot/issues/2290)來討論遵守'@ WebServlet'的可能性。 –

+0

我在這裏接受了建議。感謝大家!我無法找到Spring Boot文檔說它不支持WebServlet註釋的地方,所以我很困惑。如果我錯過了文檔,請告訴我它在哪裏寫的。否則,至少對Spring Boot文檔的更新會有幫助 - 例如,明確說WebServlet註釋不受支持。 :) – Jason

回答

6

對於Spring Boot,如果您想註冊一個Servlet並提供URL模式,則應使用ServletRegistrationBean對象而不是@WebServlet註釋。

添加這個bean您@Configuration類應該做的伎倆:

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

這是可能加載與@WebServlet以及他們在春季啓動映射註釋的servlet。爲此,您需要使用@ServletComponentScan@Configuration註釋。這也適用於@WebFilter@WebListener註釋。

10

在引導類中添加@ServletComponentScan

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

這將使春天開機掃描@WebServlet以及@WebListener

+0

這應該是被接受的答案。你是最好的! – ForNeVeR