2012-02-24 18 views
34

फॉरवर्ड(): यह अनुरोध & सेवलेट कॉन्टेक्स्ट द्वारा दो तरीकों से किया जा सकता है। सर्वर पर किसी अन्य संसाधन (सर्वलेट, जेएसपी फ़ाइल, या HTML फ़ाइल) से अनुरोध को अग्रेषित करना। अग्रेषित ग्राहक के ज्ञान के बिना सर्वर पक्ष पर किया जाता है।अनुरोध प्रेषण अवधारणा के लिए तंत्र को शामिल और आगे के बीच अंतर?

जब आप एक आगे अनुरोध आह्वान, अनुरोध सर्वर पर एक और संसाधन को भेजा जाता है, ग्राहक को सूचित किया जा रहा है कि एक अलग संसाधन अनुरोध पर कार्रवाई करने जा रहा है बिना। यह प्रक्रिया पूरी तरह से वेब कंटेनर में होती है।

सीधे शब्दों में

में शामिल हैं: हमारे वर्तमान फ़ाइल में एक और फ़ाइल शामिल होंगे

आगे

: अग्रेषण पृष्ठ पर वर्तमान अनुरोध आगे भेज देंगे

+7

क्या आपने Google खोज नामक कुछ कोशिश की? – Santosh

+13

मैंने Google खोज की, और इस तरह मैं यहां पहुंचा। लगभग किसी भी प्रश्न का उत्तर "आरटीएफएम" या "एसटीएफडब्ल्यू" के साथ दिया जा सकता है लेकिन स्टैक ओवरफ्लो मेरे लिए एक शानदार संसाधन बन गया है क्योंकि यह पचाने वाले आकारों में संक्षिप्त स्पष्टीकरण और कई दृष्टिकोण प्रदान करता है। मुझे खुशी है कि लोग ऐसे प्रश्न पूछते हैं जिनके पास पहले से ही उपलब्ध उत्तर हैं। – WoodenKitty

+0

कुछ खोजने के लिए Google खोज करने से कुछ और परेशानियां हैं और "क्या आपने Google खोज नामक कुछ कोशिश की?" – Arijit

उत्तर

27

मुख्य अंतर यह है कि आप आगे का उपयोग करते हैं नियंत्रण को आपके द्वारा बुलाए जाने वाले अगले सर्वलेट/जेएसपी में स्थानांतरित किया जाता है, जबकि में वर्तमान सर्वलेट के साथ नियंत्रण बनाए रखता है, इसमें केवल कॉलिंग सर्वलेट/जेएसपी (जैसे किसी भी out.println या अन्य प्रसंस्करण)।

51

दो टैग के बीच का अंतर यह है कि वे जिस तरह से काम करते हैं। खैर, मैं एक उदाहरण कहूंगा ताकि आप इसे बेहतर कल्पना कर सकें।

मान लें कि आपके पास दो पृष्ठ, पृष्ठ ए और पृष्ठ बी हैं। पृष्ठ ए में आपने टैग शामिल किया था। इस मामले में नियंत्रण पृष्ठ में था जब तक आप टैग शामिल नहीं करते थे। इस पर पूर्ण नियंत्रण पृष्ठ बी पर जाता है। जब यह किया जाता है, तो टैग को पृष्ठ पर वापस लौटाया जाता है जिसमें टैग और शेष पृष्ठ ए जारी रखने के बाद कोडिंग के अगले बिंदु से शुरू होता है।

ठीक है, चीजों को अधिक स्पष्ट पाने के लिए, मान लें कि हम एक ही पृष्ठ, pageA और pageB डालते हैं, लेकिन इस बार हम pageA में आगे टैग का उपयोग करेगा, नहीं टैग शामिल हैं। दोबारा, नियंत्रण पृष्ठ ए में शुरू होगा जब तक हम पृष्ठ ए में आगे टैग को कॉल नहीं करते हैं, इस बिंदु पर, नियंत्रण टैग की तरह पृष्ठ बी पर स्थानांतरित किया जाता है। लेकिन अंतर यह होता है कि पेजबी पूर्ण होने पर क्या होता है। टैग के मामले में, नियंत्रण पृष्ठ ए पर वापस नहीं जाता है।

+2

+1, सभी उत्तर एक ही कह रहे हैं, लेकिन मुझे कौन सा पढ़ना पसंद आया? यह निश्चित रूप से है ;-) –

+0

बढ़िया! मैं अंत में यह मिला! – koryakinp

+0

अच्छी व्याख्या, धन्यवाद। – enzo

24

include(request, response);

तो संसाधन स्थिर है, का विधि कार्यक्रम संबंधी सर्वर साइड शामिल सक्षम बनाता है शामिल हैं। यदि संसाधन एक वेब घटक है, तो विधि का प्रभाव शामिल वेब घटक को अनुरोध भेजना, वेब घटक निष्पादित करना है, और उसके बाद युक्त सर्वलेट से प्रतिक्रिया में निष्पादन का परिणाम शामिल करना है।

एक शामिल वेब घटक के पास अनुरोध ऑब्जेक्ट तक पहुंच है लेकिन यह प्रतिक्रिया ऑब्जेक्ट के साथ क्या कर सकती है उसमें सीमित है।

  • यह प्रतिक्रिया के शरीर को लिख सकता है और प्रतिक्रिया दे सकता है।
  • यह हेडर सेट नहीं कर सकता है या सेटक्यूकी जैसी किसी भी विधि को कॉल नहीं कर सकता है, जो प्रतिक्रिया के शीर्षकों को प्रभावित करता है।

वेब घटक से प्रतिक्रिया में प्रतिक्रिया में अक्सर एक अन्य वेब संसाधन, जैसे बैनर सामग्री या कॉपीराइट जानकारी शामिल करना उपयोगी होता है)।

forward(request, response);

कुछ अनुप्रयोगों में, आप एक वेब घटक के लिए एक अनुरोध के प्रारंभिक प्रसंस्करण करना और एक अन्य घटक प्रतिक्रिया उत्पन्न किया है के लिए चाहते हो सकता है। उदाहरण के लिए, आप आंशिक रूप से अनुरोध को संसाधित करना चाहते हैं और फिर अनुरोध की प्रकृति के आधार पर किसी अन्य घटक को स्थानांतरित करना चाहते हैं।

किसी अन्य वेब घटक पर नियंत्रण स्थानांतरित करने के लिए, आप RequestDispatcher की अगली विधि का आह्वान करते हैं। जब कोई अनुरोध अग्रेषित किया जाता है, तो अनुरोध URL अग्रेषित पृष्ठ के पथ पर सेट होता है। मूल यूआरआई और इसके घटक भागों को अनुरोध विशेषताओं के रूप में सहेजा जाता है।

javax.servlet.forward.[request-uri|context-path|servlet-path|path-info|query-string] 

आगे विधि उपयोगकर्ता के लिए जवाब देने के लिए एक और संसाधन जिम्मेदारी देने के लिए इस्तेमाल किया जाना चाहिए। यदि आप पहले से ही ServletOutputStream या PrintWriter ऑब्जेक्ट को सर्वलेट में एक्सेस कर चुके हैं, तो आप इस विधि का उपयोग नहीं कर सकते हैं; ऐसा करने से IllegalStateException फेंकता है।

संबंधित लिंक

6

दोनों के बीच मुख्य अंतर यह है कि आगे() विधि यह बाद उत्पादन धारा बंद हो जाएगा है लागू किया गया है, wh ereas शामिल विधि आउटपुट स्ट्रीम खुला छोड़ देता है।

एक उदाहरण के साथ जवाब दे: की सुविधा देता है एक सर्वलेट पेज नामित xxx.java और yy.jsp

WELCOME to yy.jsp 

xxx में yy.jsp

नाम के एक jsp पृष्ठ है। जावा // आगे का उपयोग कर()

RequestDispatcher rd = request.getRequestDispatcher("yy.jsp"); rd.forward(request,response); out.println("back to servlet"); //this wont b displayed

उत्पादन

WELCOME to yy.jsp 

xxx में।जावा // (शामिल) का उपयोग कर

RequestDispatcher rd = request.getRequestDispatcher("yy.jsp"); rd.include(request,response); out.println("back to servlet");

उत्पादन

WELCOME to yy.jsp back to servlet 

लेकिन सबसे महत्वपूर्ण बात इसकी नहीं के बारे में नियंत्रण, क्योंकि हम डालें, तो एक

System.out.println("console output");

.forward() यामें से किसी के बादआमंत्रण, प्रत्येक मामले पर कंसोल आउटपुट उत्पन्न होगा। ग्राहक

तो के जवाब के बारे में इसके, बुनियादी हिस्सा अगर हम क्रम में एक ग्राहक के लिए मार्कअप उत्पन्न करने के लिए एक JSP या सर्वलेट में एक सर्वर साइड घटक में कार्रवाई कर रहे हैं और उसके बाद आगे एक बार है कि JSP या है, सर्वलेट ने प्रसंस्करण समाप्त कर लिया है, हम अब मार्कअप उत्पन्न करने के लिए किसी अन्य घटक पर कॉल नहीं कर सकते हैं जो क्लाइंट को भेजा जा सकता है। एक बार हम आगे बढ़ने के बाद, वर्तमान अनुरोध के लिए मार्कअप पीढ़ी और प्रतिक्रिया चक्र समाप्त हो गया है।

वैकल्पिक रूप से, एक आउटपुट के साथ, आउटपुट स्ट्रीम खुला रहता है, इसलिए हम क्लाइंट साइड मार्कअप जेनरेट करने के लिए कई अलग-अलग फाइलों पर कॉल कर सकते हैं। तो हम क्लाइंट आधारित मार्कअप उत्पन्न करने वाले घटकों की श्रृंखला में दो या तीन जेएसपी फाइलें और यहां तक ​​कि एक सर्वलेट भी शामिल कर सकते हैं। जब हम शामिल होते हैं, तो आउटपुट स्ट्रीम आमंत्रण के बाद बंद नहीं होता है।

+0

http://www.theserverside.com/tip/Include-vs-Forward-of-the-Servlet-RequestDispatcher? – Preuk

+0

कम से कम मूल लिंक को क्रेडिट दें! –

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