7

सम्मान नहीं करता मैं एक सर्वलेट (HttpServlet से विस्तार) बनाया और स्प्रिंग बूट मेंस्प्रिंग बूट @WebServlet

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

मेरे @Configuration वर्ग के साथ 3.0 चश्मा के अनुसार एनोटेट इस सर्वलेट का पैकेज स्कैन करता है। हालांकि, यह लॉग इन नहीं करता है कि इस स्प्रिंग बूट एप्लिकेशन के शुरू होने पर एम्बेडेड टॉमकैट 8.0.15 कंटेनर में इस सर्वलेट को तैनात किया गया है।

तो, मैंने अपने सर्वलेट में @Component भी जोड़ा। अब, स्प्रिंग बूट सर्वलेट पंजीकृत करता है (मुझे साबित करता है कि स्कैन पैकेज सही ढंग से स्थापित किया गया था), लेकिन फिर यह ऊंट मामले का उपयोग कर कक्षा नाम के आधार पर एक यूआरएल पैटर्न के साथ पंजीकृत करता है। तो, यह बेहतर था - उदाहरण के लिए, मुझे एक सर्वलेट पंजीकृत मिला, लेकिन गलत यूआरएल मैपिंग के साथ!

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

कैसे मैं सभी @WebServlet एनोटेट सर्वलेट्स स्वतः लोड करने के लिए स्प्रिंग बूट हो जाते हैं और उनके url मानचित्रण का सम्मान करते हैं?

+0

आप नहीं करते हैं। स्प्रिंग बूट सर्लेट को कॉन्फ़िगर करने और मैप करने का एक अलग तरीका उपयोग करता है। –

+0

मैंने 'वेबसर्लेट' को सम्मानित करने की संभावना पर चर्चा करने के लिए [एक मुद्दा] (https://github.com/spring-projects/spring-boot/issues/2290) खोला है। –

+0

मुझे यह सलाह यहां मिल रही है। सबको धन्यवाद! मुझे नहीं पता था कि स्प्रिंग बूट प्रलेखन कहता है कि यह वेबसर्लेट एनोटेशन का समर्थन नहीं करता है, इसलिए मैं उलझन में था। अगर मुझे डॉक्टर याद आया, तो कृपया मुझे बताएं कि यह कहां लिखा गया है। अन्यथा, स्प्रिंग बूट प्रलेखन के लिए कम से कम एक अद्यतन सहायक होगा - उदाहरण के लिए, स्पष्ट रूप से कहें WebServlet एनोटेशन समर्थित नहीं है। :) – Jason

उत्तर

6

स्प्रिंग बूट के साथ, आपको @WebServlet एनोटेशन के बजाय ServletRegistrationBean ऑब्जेक्ट का उपयोग करना चाहिए यदि आप एक सर्वलेट पंजीकृत करना चाहते हैं और यूआरएल पैटर्न प्रदान करना चाहते हैं।

अपने @Configuration वर्ग को यह सेम जोड़ने चाल करना चाहिए:

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

यह @WebServlet और स्प्रिंग बूट में अपनी मैपिंग के साथ एनोटेट सर्वलेट्स लोड करने के लिए संभव है। ऐसा करने के लिए आप @Configuration टिप्पणी के साथ @ServletComponentScan उपयोग करने के लिए की जरूरत है। यह @WebFilter और @WebListener एनोटेशन के लिए भी काम करता है।

10

अपने बूटस्ट्रैप कक्षा में @ServletComponentScan जोड़ें।

ऐसे

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

के रूप में यह @WebListener रूप @WebServlet स्कैन करने के लिए और साथ ही वसंत बूट सक्षम हो जाएगा।

+0

यह स्वीकार्य उत्तर होना चाहिए। आप सर्वश्रेष्ठ हैं! – ForNeVeR