2009-12-21 18 views
14

मैं RequestDispatcher का उपयोग करके अनुरोध रोकना चाहते हैं और फिर मैं एक और सर्वलेट को साथ अनुरोध अग्रेषित करना चाहते हैं - कुछ इस तरह:क्या एक अनुरोध डिस्पैचर आगे मूल अनुरोध की HTTP विधि को बनाए रखता है?

RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet/some.ThirdPartyServlet" + "?" + "param_name=" + "somevalue"); 
dispatcher.forward(request, response); 

तो भेजे अनुरोध एक पोस्ट थे, अनुरोध डिस्पैचर ले जाएगा मेरे नए पैरामीटर, और उन्हें संदेश निकाय में शामिल करते हैं, या यह अब आगे बढ़ता है?

उत्तर

15

यह मूल अनुरोध को बिना किसी बदलाव के बनाए रखता है।

तो, अगर पोस्ट किया गया तो यह पोस्ट बने रहेगा।

7

यदि आप आगे का उपयोग करते हैं, तो नियंत्रण सर्वलेट कंटेनर के भीतर रहता है, अनुरोध गुण बनाए रखा जाता है, और अनुरोध एक पोस्ट रहता है। यह तब होता है जब आप रीडायरेक्ट का उपयोग करते हैं, जिससे ब्राउज़र को प्रतिक्रिया प्राप्त होती है जिससे वह जीईटी अनुरोध कर सकता है, जहां वह मूल अनुरोध के लिए अनुरोध विशेषताओं को खो देता है क्योंकि जीईटी एक पूरी तरह से नया अनुरोध है।

14

मुझे लगता है कि आपकी चिंता पास-इन अनुरोध की उपलब्धता पैरामीटर (अन्य उल्लेखों के रूप में विशेषता नहीं है)। इस मामले में इससे कोई फ़र्क नहीं पड़ता कि आप आगे या रीडायरेक्ट का उपयोग करते हैं या नहीं। लेकिन यदि आप Servlet पर अग्रेषित करते हैं, तो HttpServletRequest#getMethod() द्वारा प्राप्त प्रारंभिक अनुरोध से जुड़ी उपयुक्त विधि लागू की जाएगी। यदि यह पोस्ट है, तो doPost() लागू किया जाएगा। आप क्वेरी स्ट्रिंग में अतिरिक्त पैरामीटर को HttpServletRequest.getParameter() द्वारा सामान्य तरीके से एक्सेस कर सकते हैं।

protected void doPost(HttpServletRequest request, HttpServletResponse response) { 
    request.getRequestDispatcher("servlet2?foo=bar").forward(request, response); 
} 

इस प्रकार मूल रूप से servlet2 द्वारा नियंत्रित किया जा सकता है::

protected void doPost(HttpServletRequest request, HttpServletResponse response) { 
    String foo = request.getParameter("foo"); // Returns "bar". 
} 

तो मूल रूप से servlet1 में निम्नलिखित

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