2009-12-08 11 views
26

मैं अपने स्प्रिंग वेब.एक्सएमएल में दो सर्लेट्स को परिभाषित करना चाहता हूं - एक एप्लिकेशन एचटीएमएल/जेएसपी पृष्ठों के लिए, और एक वेब सेवा के लिए जिसे एक द्वारा बुलाया जाएगा बाहरी आवेदनएक स्प्रिंग एप्लिकेशन में web.xml में एकाधिक सर्लेट्स को कैसे पंजीकृत करें

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

<servlet-mapping> 
    <servlet-name>myservlet</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>WEB-INF/user-service-servlet.xml</param-value> 
</context-param> 

<servlet> 
    <servlet-name>user-webservice</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>user-webservice</servlet-name> 
    <url-pattern>/UserService/*</url-pattern> 
</servlet-mapping> 

अगर मैं myservlet से ही फाइल में DispatcherServlet का उपयोग है, यह ठीक काम करता है: यहाँ web.xml है। अगर मेरे पास कॉन्फ़िगरेशन फ़ाइल (उपयोगकर्ता-सेवा-servlet.xml) के लिए संदर्भ-param के साथ उपयोगकर्ता-webservice है, तो यह ठीक काम करता है। हालांकि, अगर मेरे पास फ़ाइल में दोनों हैं, तो Myservlet काम नहीं करता है क्योंकि myservlet-servlet.xml फ़ाइल स्वचालित रूप से लोड नहीं होती है। अगर मैं संदर्भ-param को हटा देता हूं, तो MyServlet काम करता है, लेकिन उपयोगकर्ता-webservice काम नहीं करता है क्योंकि यह कॉन्फ़िगरेशन फ़ाइल (उपयोगकर्ता-सेवा-servlet.xml) लोड नहीं होता है।

मेरे पास दोनों servlets परिभाषित कैसे हो सकते हैं और उनकी दोनों कॉन्फ़िगरेशन फ़ाइलों को लोड किया जा सकता है?

उत्तर

16

रूप CXF-उपयोगकर्ता मेलिंग सूची पर this thread में बताया गया है, बल्कि CXFServlet user-webservice-servlet.xml से अपने स्वयं के वसंत संदर्भ लोड होने से, आप बस रूट संदर्भ में बहुत लोड कर सकते हैं। अपने कुछ अन्य नाम के मौजूदा user-webservice-servlet.xml (जैसे user-webservice-beans.xml) फिर अपने contextConfigLocation पैरामीटर की तरह कुछ करने के लिए बदल का नाम बदलें:

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

<servlet-mapping> 
    <servlet-name>myservlet</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
    /WEB-INF/applicationContext.xml 
    /WEB-INF/user-webservice-beans.xml 
    </param-value> 
</context-param> 

<servlet> 
    <servlet-name>user-webservice</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>user-webservice</servlet-name> 
    <url-pattern>/UserService/*</url-pattern> 
</servlet-mapping> 
+1

अलग-अलग डेटाबेस और अन्य सेटिंग्स का उपयोग होने पर दोनों सर्लेट्स के लिए संदर्भ रूट संदर्भ में कैसे हो सकता है? वे एक फ़ाइल में कैसे अंतर कर रहे हैं? –

6

config कुछ उपयोग इस तरह:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 

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

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

<servlet> 
    <servlet-name>user-webservice</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 

और फिर आप तीन फ़ाइलों की आवश्यकता होगी:

  • applicationContext.xml;
  • myservlet-servlet.xml; और
  • उपयोगकर्ता-webservice-servlet.xml।

*-servlet.xml फ़ाइलों का स्वचालित रूप से उपयोग किया जाता है और प्रत्येक उस सर्वलेट के लिए एक एप्लिकेशन संदर्भ बनाता है।

स्प्रिंग प्रलेखन से, 13.2. The DispatcherServlet:

ढांचे, एक DispatcherServlet का आरंभीकरण पर, [सर्वलेट नाम] नाम का एक फ़ाइल के लिए नज़र WEB-INF निर्देशिका में -servlet.xml होगा अपने वेब एप्लिकेशन का उपयोग करें और बीन्स को परिभाषित करें ( के साथ परिभाषित किसी भी बीन्स की परिभाषाओं को वैश्विक दायरे में समान नाम)।

+0

यह मदद नहीं करता है - मेरे पास उन फ़ाइलों को मेरे एप्लिकेशन में है, लेकिन जब मैं http: // localhost: 8080/MyApp/index.jsp पर जाता हूं, यह पृष्ठ दिखाता है, लेकिन जब मैं http: // पर जाता हूं लोकलहोस्ट: 8080/माईएप (बिना किसी पीछे की स्लैश के), यह उपयोगकर्ता-webservice लाता है, लेकिन डब्लूएसडीएल लिंक पर क्लिक करने से "कोई सेवाएं नहीं मिली" संदेश दिखाती है। शायद मेरी समस्या यह नहीं है कि कॉन्फ़िगरेशन फ़ाइलों को लोड नहीं किया जा रहा है, लेकिन वेब सेवा के लिए मैपिंग सही नहीं है। –

1

मैं जानता हूँ कि यह एक सा पुराना है लेकिन संक्षेप में इस सवाल का जवाब होगा < लोड-ऑन-स्टार्टअप > दोनों घटनाओं ने एक ही आईडी दी है जो 1 बार दो बार है। यह लोडिंग अनुक्रम को भ्रमित कर सकता है।

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

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