2011-10-15 16 views
6

मुझे किसी अन्य सर्वलेट से सर्वलेट पोस्ट विधि को कॉल करने और सर्वलेट पैरामीटर में ब्लॉब पास करने की आवश्यकता है। क्या यह सकारात्मक है, यदि ऐसा है तो यह कैसे किया जा सकता है। पीएस: मैं अपाचे एचटीपी क्लाइंटकिसी अन्य सर्वलेट से कॉलिंग सर्वलेट पोस्ट

+0

वेल अपाचे एचटीपी क्लाइंट खुला स्रोत है ... कॉपी और पेस्ट करें? –

+0

मैं इसका उपयोग नहीं कर सकता क्योंकि मैं Google ऐप इंजन का उपयोग करता हूं और यह कुछ कक्षाओं पर सीमाएं लगाता है जिनका उपयोग – fernandohur

उत्तर

8

आपको स्वयं HTTP अनुरोध बनाने और भेजने की आवश्यकता है। आप आगे/रीडायरेक्ट/शामिल का उपयोग नहीं कर सकते क्योंकि आप विधि को जीईटी से पोस्ट में बदलना चाहते हैं और आप multipart/form-data अनुरोध भेजना चाहते हैं।

जैसा कि एचटीपी क्लाइंट (और अन्य तृतीय पक्ष लाइब्रेरी?) स्पष्ट रूप से एक विकल्प नहीं है, आपकी सर्वश्रेष्ठ शर्त मानक जावा एसई एपीआई java.net.URLConnection प्रदान करने के लिए है। लंबी कहानी छोटी: Using java.net.URLConnection to fire and handle HTTP requests नीचे आपको multipart/form-data उदाहरण मिल सकता है।

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


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

1

का उपयोग नहीं कर सकता क्या आपका मतलब है कि आप अपने आवेदन से किसी अन्य वेब सेवा पर कॉल करें? यदि ऐसा है, तो HttpClient जैसे कुछ आप चाहते हैं। यदि आपका मतलब है कि आप अपने ऐप में प्रोग्रामेटिक रूप से एक और सर्वलेट का आह्वान करना चाहते हैं, तो आप या तो forward to it या include it देख रहे हैं।

+0

किया जा सकता है, मैं अपने ऐप के अंदर एक और सर्वलेट कॉल करना चाहता हूं, लेकिन यह POST विधि होना चाहिए। मैं सामान्य रूप से क्या करता हूं प्रतिक्रिया है। अप्रत्यक्ष (...) लेकिन वह जीईटी विधि कहता है ... मैं POST को कैसे कॉल कर सकता हूं? – fernandohur

+0

मैंने जो कहा: आगे या शामिल करें, जिस पर आप करने की कोशिश कर रहे हैं। जेईई ट्यूटोरियल में ["अन्य वेब संसाधनों को आमंत्रित करना" देखें (http://download.oracle.com/javaee/6/tutorial/doc/bnagi.html) अधिक जानकारी के लिए। –

7

आप अपने आवेदन में किसी अन्य सर्लेट में प्रेषक प्राप्त कर सकते हैं और उसे अग्रेषित कर सकते हैं या इसे @Ryan सुझावों के रूप में शामिल कर सकते हैं। कोड आपके पहले सर्वलेट के अंदर ऐसा कुछ होना चाहिए:

ServletContext context = this.getServletContext(); 
RequestDispatcher dispatcher = context.getRequestDispatcher("/otherurltoservlet"); 

// change your request and response accordingly 

dispatcher.forward(request, response); 
+0

मुझे अपने ऐप में किसी अन्य सर्वलेट पर POST विधि को कॉल करने की आवश्यकता है। क्या वह "otherurltoservlet" की पोस्ट विधि को कॉल करेगा? – fernandohur

+0

मेरा मानना ​​है कि यदि पहली सर्वलेट को डाक के माध्यम से बुलाया गया था तो दूसरा प्रेषक में पोस्ट के माध्यम से कॉल किया जाएगा। फॉरवर्ड चेन। – rmarimon

+0

पोस्ट करने के बारे में प्रश्न के लिए यहां एक नज़र डालें http://stackoverflow.com/questions/4374548/does-jspforward-or-requestdispatcher-forward-use-get-or-post – rmarimon

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