में डिफ़ॉल्ट-सर्वलेट-हैंडलर कहां डालें, मेरे web.xml
में, डिफ़ॉल्ट सर्वलेट मैपिंग, यानी /
, स्प्रिंग प्रेषक के लिए मैप किया गया है। मेरे स्प्रिंग डिस्पैचर कॉन्फ़िगरेशन में, मेरे पास DefaultAnnotationHandlerMapping
, ControllerClassNameHandlerMapping
और AnnotationMethodHandlerAdapter
है जो मुझे अपने वर्ग के नाम या @Requestmapping
एनोटेशन द्वारा नियंत्रकों को यूआरएल मैप करने की अनुमति देता है। हालांकि, वेब रूट के तहत कुछ स्थिर संसाधन हैं जो मैं वसंत प्रेषक को डिफ़ॉल्ट सर्वलेट का उपयोग करने के लिए भी सेवा देना चाहता हूं। Spring documentation के अनुसार, यह <mvc:default-servlet-handler/>
टैग का उपयोग कर किया जा सकता है।स्प्रिंग एमवीसी कॉन्फ़िगरेशन
नीचे दिए गए कॉन्फ़िगरेशन में, 4 उम्मीदवार स्थान हैं जिन्हें मैंने चिह्नित किया है जो इस टैग को सम्मिलित करना संभव है।
केस 1: अलग स्थान में टैग डालते डिस्पैचर निम्नलिखित के रूप में अलग ढंग से व्यवहार करने का कारण बनता है, तो मैं स्थान 1 में डालने, डिस्पैचर अब @RequestMapping और नियंत्रक वर्ग के नाम से मानचित्रण संभाल करने में सक्षम हो जाएगा लेकिन यह सामान्य रूप से स्थैतिक सामग्री की सेवा करेगा।
कैस 2, 3: यह @RequestMapping और नियंत्रक वर्ग के नाम से मैपिंग को संभालने में सक्षम होगा और साथ ही साथ अन्य मैपिंग सफलतापूर्वक नहीं किया जा सकता है, तो स्थिर सामग्री की सेवा करने में सक्षम हो जाएगा।
केस 4: यह स्थिर सामग्री की सेवा करने में सक्षम नहीं होगा।निष्कासन नोट: नियंत्रक को कार्यान्वित करते समय यह एक बग था जिसमें /**
पर मैप किए गए विधि हैं लेकिन नियंत्रक वर्ग नाम पर स्पष्ट अनुरोध मैपिंग नहीं है।
इसलिए, केस 2 और वांछनीय प्रलेखन वसंत के .according कर रहे हैं, इस टैग हैंडलर जो पूर्वता क्रम सबसे कम तो क्यों स्थिति मामलों को दिया जाता है कॉन्फ़िगर करता है? और इस टैग को रखने के लिए सबसे अच्छी स्थिति कौन सा है?
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="webapp.controller"/>
<!-- Location 1 -->
<!-- Enable annotation-based controllers using @Controller annotations -->
<bean id="annotationUrlMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<!-- Location 2 -->
<bean id="controllerClassNameHandlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<!-- Location 3 -->
<bean id="annotationMethodHandlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<!-- Location 4 -->
<mvc:default-servlet-handler/>
<!-- All views are JSPs loaded from /WEB-INF/jsp -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
लेकिन आप इस टैग के माध्यम से इस मानचित्रण का क्रम निर्धारित नहीं कर सकते। – gigadot
@ गीगाडॉट: आदेश बीन परिभाषाओं के क्रम में अंतर्निहित है। – skaffman
आप इस बारे में सही हैं कि स्थान 3 और 4 के बीच कोई अलग नहीं है। मैंने प्रश्न और उत्तर अपडेट किया है। स्प्रिंग हैंडलर मैपिंग को सबसे कम प्राथमिकता आदेश देता है जिसे 'एमवीसी: डिफॉल्ट-सर्वलेट-हैंडलर' टैग द्वारा कॉन्फ़िगर किया गया है लेकिन यह स्पष्ट मान सेट नहीं होने पर अन्य हैंडलर मैपिंग के लिए भी वही मान देता है। बीटीडब्ल्यू, आपकी प्रतिक्रिया के लिए धन्यवाद। – gigadot