2011-10-24 12 views
12

मैं स्प्रिंग एमवीसी में शुरुआत कर रहा हूं। मैं हैंडलर एडाप्टर स्पष्ट रूप से समझ में नहीं आया। एक हैंडलर एडाप्टर क्या है और मैं एडाप्टर का उपयोग कब करूं?वसंत एमवीसी में हैंडलर एडाप्टर क्या है?

उत्तर

8

here प्रारंभ करें और देखें कि क्या इससे मदद मिलती है; यदि ऐसा नहीं होता है, तो एक और विशिष्ट प्रश्न पूछें। इसके अलावा, स्प्रिंग डॉक्स के this section डिफ़ॉल्ट एडाप्टर पर चर्चा करते हैं और वे एनोटेशन कॉन्फ़िगरेशन से कैसे संबंधित हैं।

संक्षेप में, हैंडलर एडाप्टर निर्णय लेते हैं कि कौन से नियंत्रक (और विधि) को अनुरोध के लिए कॉल करना है।

+0

लिंक टूटा हुआ है। – Vishnu

+0

@ विष्णु चीजें मुझे लगता है कि छह साल में बदलते हैं। –

2

HandlerMapping बस एक यूआरएल के लिए एक विधि मानचित्र। अधिकांश शुरुआती इस वस्तु का सीधे उपयोग नहीं करते हैं, बल्कि इसके बजाय RequestMapping का उपयोग करते हैं। मैप किए गए विधि का रिटर्न प्रकार (आमतौर पर) निर्धारित करता है कि स्प्रिंगएमवीसी किस प्रतिक्रिया को प्रस्तुत करने के लिए उपयोग करेगा।

उदाहरण के लिए, निम्नलिखित RequestMapping "/" या "/ घर" इस ​​पद्धति को लागू करने के लिए मिलता है अनुरोधों के लिए एक HandlerMapping उत्पन्न करेगा:

@RequestMapping(value={"/", "/home"}, method=RequestMethod.GET) 
public String getHome() { 
    return "homepage"; 
} 

विधि एक दृश्य के एक स्ट्रिंग नाम देता है, जो होगा आम तौर पर "/WEB-INF/views/homepage.jsp" पर हल किया जाता है (लेकिन यह आपके ViewResolver पर निर्भर करता है)

बस शुरू करने के लिए एक fyi: आप अलग-अलग ऑब्जेक्ट्स जोड़ सकते हैं जिन्हें आपको अपने पैरामीटर के रूप में आवश्यकता हो सकती है विधि (जैसे लोकेल, एचटीपीएसर्लेट रिवेस्ट, आदि)। अधिक जानकारी के लिए RequestMapping javadoc देखें।

+1

उन्होंने हैंडलर एडाप्टर के बारे में पूछा, आपने हैंडलर मैपिंग समझाया –

9

HandlerMapping एक यूआरएल के लिए एक विधि मानचित्र करता है, इसलिए DispatcherServlet जानता है कि एक विशिष्ट अनुरोध द्वारा कौन सी विधि को बुलाया जाना चाहिए। फिर DispatcherServlet विधि को आमंत्रित करने के लिए HandlerAdapter का उपयोग करें।

क्यों डिस्पैचर सर्वलेट सीधे विधि का आह्वान नहीं करता है?

क्योंकि वहाँ एक विधि को लागू करने, एनोटेशन की तरह कई तरीके हैं, एक्सएमएल आदि HandlerAdapter de-जोड़ों DispatcherServlet और लागू कार्रवाई।

3

आप हैंडलर एडाप्टर में एडाप्टर पा सकते हैं और नाम का वह भाग एडाप्टर पैटर्न से आता है। एडाप्टर दो ऑब्जेक्ट्स के बीच एक पुल की तरह है और हैंडलर एडाप्टर हैंडलर ऑब्जेक्ट और डिस्पैचर सर्वलेट के बीच एक पुल है।

जैसा कि आप स्प्रिंग प्रलेखन से नीचे दिए गए हैंडलरएडाप्टर स्रोत कोड से देख सकते हैं, मॉडल और व्यू रिटर्न प्रकार के साथ एक विधि हैडल विधि है। प्रत्येक हैंडलर एडाप्टर हैंडलर ऑब्जेक्ट में HttpServletRequest और HttpServletResponse को प्रतिनिधि करने के लिए इस विधि को कार्यान्वित करेगा ताकि हैंडलर ऑब्जेक्ट इन HttpServletRequest/Response का उपयोग करके एप्लिकेशन तर्क निष्पादित करेगा।

public interface HandlerAdapter { 

    //Check if controller is supported 
    boolean supports(Object handler); 

    //handle request 
    ModelAndView handle(HttpServletRequest rqst, 
         HttpServletResponse rsp, 
         Object handler) throws Exception; 

यह एप्लिकेशन तर्क निष्पादन मॉडल और दृश्य उत्पन्न करता है। दृश्य दृश्य नाम स्ट्रिंग या व्यू ऑब्जेक्ट के रूप में हो सकता है। मॉडल में डेटा होता है जिसका उपयोग दृश्य प्रस्तुत करने के लिए किया जाएगा। हैंडलर एडाप्टर मॉडल को लपेटेगा और ModelAndView ऑब्जेक्ट में देखेंगे। यह ModelAndView ऑब्जेक्ट को संसाधित करने के लिए प्रेषक सर्वलेट नौकरी है।

डिस्पैचर सर्वलेट हैंडलर ऑब्जेक्ट के बारे में नहीं जानता है और सीधे एप्लिकेशन लॉजिक को संभालने से राहत मिली है। हैंडलर ऑब्जेक्ट को मॉडल बदलने और मॉडल एंडव्यू ऑब्जेक्ट में देखने से भी राहत मिली क्योंकि हैंडलर एडाप्टर उस कनवर्टिंग जॉब को करेगा।

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