2013-08-28 3 views
7

लौटाता है मैं मैवेन के साथ एक मूल वेब ऐप बना रहा हूं, फिर ग्रहण 4.2 पर आयात कर रहा हूं। मेरे पास सर्वर के रूप में टोमकैट 7 सेटअप है। मैं एक वेब ऐप के लिए मोंगोडब के साथ वसंत डेटा कॉन्फ़िगर करने की कोशिश कर रहा हूं।WebAplicationInitializer container.addServlet() शून्य

मैं अनुसरण कर रहा हूं कोड आधारित विन्यास दृष्टिकोण मिली: WebApplicationInitializer

जब मैं सर्वर पर प्रोजेक्ट को चलाने, मैं WebApplicationInitializer वर्ग मैं पैदा की है में एक नल पॉइंटर एक्सेप्शन मिलता है। रेखा: कंटेनर .addServlet ("प्रेषक", नया डिस्पैचर सर्वलेट (dispatcherContext)); शून्य वापस आ रहा है।

मुझे क्या बिल्ली याद आ रही है? मैं एनोटेशन का उपयोग करके स्क्रैच से वेब-ऐप्स बनाने के लिए थोड़ा नया हूं। कुछ भी नहीं बदला है, अभी भी एनपीई हो रही

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.0.1</version> 
    <scope>provided</scope> 
</dependency> 

:

public class ATWWebAppInitializer implements WebApplicationInitializer 
{ 
    @Override 
    public void onStartup(ServletContext container) throws ServletException 
    { 
     // Create the 'root' Spring application context 
     AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); 
     rootContext.register(SpringMongoConfig.class); 

     // Manage the lifecycle of the root application context 
     container.addListener(new ContextLoaderListener(rootContext)); 

     // Create the dispatcher servlet's Spring application context 
     AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext(); 
     dispatcherContext.register(ATWDispatcherConfig.class); 

     // Register and map the dispatcher servlet 
     ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/*"); 
    } 
} 

की कोशिश की पोम को यह जोड़ने:

यहाँ प्रश्न में वर्ग है। मैंने यहां पढ़ा है (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html) कि कंटेनर। क्या सर्लेट पहले से पंजीकृत है अगर गड़बड़ी वापस आती है? क्या टोमकैट पहले से ही एक सर्वलेट पंजीकृत कर रहा है?

हर किसी के समय बर्बाद करने के लिए क्षमा, मेरे पास एक वेब.एक्सएमएल फ़ाइल भी एक ही सर्वलेट पंजीकृत कर रही थी। तो यह केवल नल लौट रहा था। अब 404 को ठीक करने के लिए, शायद किसी भी तरह नियंत्रक को खराब कर दिया।

+0

वास्तव में यह सुनिश्चित नहीं है कि एक समान सेटअप मेरे लिए साफ-सुथरा काम करता है। तो अनिवार्य रूप से आपको 'dispatcher.setLoadOnStartup() 'लाइन पर एक शून्य सूचक अपवाद मिल रहा है, क्योंकि पिछली पंक्ति एक शून्य प्रेषक दे रही है? –

+0

यह सही है। प्रेषक तक पहुंचने वाली अगली पंक्ति एनपीई फेंक रही है। मुझे लगता है कि यह servlet-api के साथ कुछ करने के लिए हो सकता है। मैंने पीओएम में निर्भरता स्थापित नहीं की, मैंने केवल टॉमकैट लिब निर्देशिका से अपने निर्माण पथ में जार जोड़ा। – MattG

+0

हम्मम्म, मुझे बिल्कुल वही समस्या है और मेरे पास कोई भी 'web.xml' फ़ाइल नहीं है, इसे शुद्ध एनोटेट करने की कोशिश कर रहा है। – Jagger

उत्तर

8

ServletContext JavaDoc के अनुसार विधि addServlet() निर्दिष्ट नाम वाला सर्वलेट पहले से पंजीकृत होने पर शून्य वापस आ जाएगा।

0

@ रवि राव - आप बिल्कुल सही हैं। मैं टॉमकैट पर अपना ऐप चलाने के लिए कड़ी मेहनत कर रहा था और एनपीई को बिल्कुल dispatcher.setLoadOnStartup() पर प्राप्त कर रहा था।

लेकिन जब मैंने आपके द्वारा प्रदान किए गए उत्तर को पढ़ा, तो मुझे एहसास हुआ कि उसी प्रेषक सर्वलेट के उसी नाम के साथ उसी टॉमकैट पर एक और एप्लिकेशन चल रहा था।

मैंने अभी अपना प्रेषक सर्वलेट नाम दिया और यह आश्चर्यजनक रूप से काम किया। इस मुद्दे को हल करने के लिए अभी सटीक चरणों का उल्लेख किया गया है। अगर किसी को यह उपयोगी लगता है

संबंधित मुद्दे