2011-11-04 13 views
7

में एकाधिक सर्वलेट जोड़ना मैं एक वेब.एक्सएमएल में दो सर्वलेट-क्लास चलाने की कोशिश कर रहा हूं लेकिन यह काम नहीं कर रहा है, प्रत्येक सर्वलेट-वर्ग स्वतंत्र रूप से ठीक काम करता है।एकल web.xml

web.xml:

<servlet> 
    <servlet-name>spring-ws</servlet-name> 
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>transformWsdlLocations</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>spring-ws</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<session-config> 
    <session-timeout>240</session-timeout> 
</session-config> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring-ws-servlet.xml 
    /WEB-INF/health-page-servlet.xml</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<servlet> 
    <servlet-name>health-page</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>health-page</servlet-name> 
    <url-pattern>/health.htm</url-pattern> 
</servlet-mapping> 

मुझे बताएं कि आप कुछ गलत है कि मैं कर रहा हूँ समझ सकता है अगर यह बताने करें।

मैं नीचे दिए गए लिंक की कोशिश की लेकिन इसके लिए मुझे Can I use Spring MVC and Spring WS in one single application?

+0

सर्वलेट घोषणा अपने "वसंत-ws 'सर्वलेट – r0ast3d

उत्तर

5

यह काम नहीं करेगा। /* पर मैप किए गए एक को सभी अनुरोधों पर कब्जा कर लिया गया है। आपको इसे / पर मैप करने की आवश्यकता है ताकि यह केवल उन अनुरोधों पर रोक लगाए जो सभी अन्य मौजूदा सर्वलेटों से मेल नहीं खाते हैं (जेएसपी सर्वलेट सहित जो *.jsp पर पूरी तरह से मैप किया गया है और सीएसएस/जेएस/छवि फ़ाइलों जैसे सभी "सामान्य" स्थिर संसाधन !)। Difference between/and /* in servlet mapping url pattern भी देखें।

यदि स्थिर संसाधनों की सेवा करने में सक्षम होना आवश्यक है, तो इसे /ws/* जैसे अधिक विशिष्ट यूआरएल पैटर्न पर बेहतर तरीके से मानचित्र करें और Filter बनाएं जो अनुरोध यूआरआई जांचता है और उसके बाद आगे। उस फ़िल्टर को /* पर सुरक्षित रूप से मैप किया जा सकता है। अधिक ठोस कोड उदाहरण के लिए यह उत्तर भी देखें: How to access static resources when mapping a global front controller servlet on /*

+0

मैंने सोचा कि मैपिंग का उपयोग सबसे कम से कम विशिष्ट से किया जाएगा? –

+0

@ डेव: यदि कोई '/ *' नहीं है। इस तरह के एक मानचित्रण केवल फिल्टर पर इस्तेमाल किया जाना चाहिए। – BalusC

+0

तो इसे निर्देशिका मिलान से अलग माना जाता है, जैसे/foo/*? –

0

काम does not आप एक मानचित्रण के लिए/* वसंत-ws अनुभाग जो अनुरोध हो रही है में। आपको की एक अलग रणनीति के साथ आने की आवश्यकता है .../* मैपिंग से पहले /health.htm डालने का प्रयास करें।

+2

के लिए याद आ रही है विनिर्देश के आदेश प्रासंगिक नहीं है । –

2

मैं अपने प्रोजेक्ट में जावा विन्यास का उपयोग कर रहा है और निम्नलिखित कोड एक ही उद्देश्य के लिए ठीक काम करता है:

public class Initializer implements WebApplicationInitializer { 

    public void onStartup(ServletContext servletContext) throws ServletException { 
     AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); 
     ctx.register(ApplicationConfiguration.class); 
     ctx.setServletContext(servletContext); 

     MessageDispatcherServlet messageDispatcherServlet = new MessageDispatcherServlet(); 
     messageDispatcherServlet.setApplicationContext(ctx); 
     messageDispatcherServlet.setTransformWsdlLocations(true); 
     Dynamic dynamic = servletContext.addServlet("messageDispatcherServlet", messageDispatcherServlet); 
     dynamic.addMapping("/ws/*"); 
     dynamic.setLoadOnStartup(1); 

     dynamic = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx)); 
     dynamic.addMapping("/"); 
     dynamic.setLoadOnStartup(1); 
    } 
} 
संबंधित मुद्दे