मैं एक वसंत पर्यावरण में स्थिर संसाधनों के लिए एक अनुरोध को मैप करने की कोशिश कर रहा हूं। मेरा ऐप सर्वर जेटी है।
Web.xml में, मैं अपने वसंत सर्वलेट में विभिन्न यूआरएल पैटर्न मैप कर रहा हूं:
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/otherpath/*</url-pattern>
</servlet-mapping>
[many more mappings...]
ध्यान दें कि "/" मेरे वसंत सर्वलेट में मैप नहीं किया गया है।
Spring-servlet.xml में, मैं mvc का उपयोग कर रहा हूं: संसाधन टैग मेरी स्थिर सामग्री के साथ एक निर्देशिका में यूआरएल को मैप करने के लिए:
<mvc:resources mapping="/static/**" location="/WEB-INF/static/" />
यह मेरी अपेक्षा के अनुसार काम नहीं करता है। मानचित्रण के बजाय
/static/ to /WEB-INF/static/,
यह नक्शे
/static/static/ to /WEB-INF/static
इसका कारण यह है कि "एमवीसी: संसाधन" में दिए गए मैपिंग वसंत सर्वलेट के लिए पथ के सापेक्ष / लेकिन सापेक्ष नहीं है।
क्या मैपिंग के सापेक्ष / पूर्ण पथ पर विचार करने का कोई तरीका है, सर्वलेट मैपिंग से संबंधित पथ नहीं?
उत्तर:
उत्तर № 1 के लिए 7समाधान एमवीसी का उपयोग नहीं करना है: संसाधन टैग, लेकिन एक बीन और एक यूआरएल के साथ संबंधित हैंडलर को कॉन्फ़िगर करने के लिए हैंडलर मैपिंग:
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath" value="true"/>
<property name="mappings">
<props>
<prop key="/static/*">staticResources</prop>
</props>
</property>
</bean>
<bean id="staticResources" class="org.springframework.web.servlet.resource.ResourceHttpRequestHandler">
<property name="locations">
<list>
<value>/WEB-INF/static/</value>
</list>
</property>
</bean>
SimpleUrlHandlerMapping हमेशा अपने यूसुफुलपाथ संपत्ति के साथ मैपिंग पर अधिक बढ़िया नियंत्रण की अनुमति देता है।
जवाब के लिए 0 № 2
एक छोटे से शब्द के साथ अपने प्रश्न का उत्तर देने के लिए। नहीं, कम से कम मैं ऐसा नहीं सोचता।
सर्वलेट अपने "स्पेस" के अंदर दिखता है और यह वेब.एक्सएमएल में सर्वलेट मैपिंग के बाद होता है। बदले में मैपिंग के बाद मैं आपके कंटेनर (टॉमकैट की तरह)
क्या केवल एक सर्वलेट जोड़ना संभव होगा / और फिर दो जोड़ें <mvc:resource />
? के साथ एक / स्थिर /** और एक के साथ / Otherpath /** (या जो भी आपको चाहिए)। यदि नहीं, तो मैं पूरी तरह से दो अलग-अलग सर्वलेट जोड़ने के लिए जेबी निजेट के समाधान के साथ जाऊंगा।
जवाब के लिए 0 № 3
या आप उपयोग कर सकते हैं <mvc:default-servlet-handler/>
तथा <spring:url>
। यह मेरे लिए काम किया।
mvc:resources
रूट संदर्भ पर एप्लिकेशन प्रारंभ नहीं होने पर काम नहीं करता है।
यहां कॉन्फ़िगरेशन है जिसका मैंने उपयोग किया था (ध्यान देंटिप्पणी की गई है कि "स्थानीयहोस्ट: 8080 / myapp" संदर्भ के तहत शुरू किए गए एप्लिकेशन में संसाधन मैपिंग कर रहा था, हालांकि संदर्भ नाम वसंत कॉन्फ़िगरेशन में नहीं होना चाहिए):
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources -->
<!--<mvc:resources location="/styles" mapping="/myapp/styles/**"/>-->
<!--<mvc:resources location="/js" mapping="/myapp/js/**"/>-->
<!-- Allows for mapping the DispatcherServlet to "/" by forwarding static resource
requests to the container"s default Servlet -->
<mvc:default-servlet-handler/>
चाल का उपयोग करना है spring:url
अपने आवेदन संदर्भ को हल करने के लिए। यहां मैंने इसका उपयोग किया है:
<spring:url value="/styles/site.css" var="site_style"/>
<link rel="stylesheet" href="${site_style}" type="text/css" media="screen"/>
मैं मूल रूप से अपने रूट ऐप फ़ोल्डर में सापेक्ष पथ का उपयोग कर रहा हूं, जबकि वसंत जोड़ने का ख्याल रखता है /myapp
इसके सामने।
यह अभी भी बहुत अजीब है कि mvc:resources
यह स्वयं पर नहीं करता है, लेकिन कम से कम यह काम करता है और यह अभी भी बहुत साफ है।