2010-06-14 38 views
7

के बीच संचार मेरे पास दो वेब अनुप्रयोग हैं App1 और App2 कहते हैं। मैं ऐप 1 में एक सर्वलेट से ऐप 2 में एक सर्वलेट को कॉल करना चाहता हूं। मैं इसके लिए URLConnection का उपयोग कर रहा हूँ। मैं ऐप 2 में सर्वलेट को पैरामीटर पास करने में भी सक्षम हूं और मैं स्ट्रिंग के रूप में सर्वलेट से प्रतिक्रिया प्राप्त करने में भी सक्षम हूं। लेकिन मैं ऐप 2 में सर्वलेट से जावा ऑब्जेक्ट भेजना चाहता हूं और उन्हें ऐप 1 के सर्वलेट में प्राप्त करना चाहता हूं। इसे कैसे प्राप्त करें?दूरस्थ servlets

उत्तर

10

निर्भर करता है।


उन webapplications शारीरिक रूप से एक ही servletcontainer में एक ही वेब सर्वर पर चलाता है, तो बस यह एक अनुरोध विशेषता के रूप में सेट और अन्य संदर्भ के लिए अनुरोध अग्रेषित:

request.setAttribute("name", object); 
ServletContext app2 = getServletContext().getContext("app2"); 
app2.getRequestDispacher("servletUrl").forward(request, response); 

अन्य संदर्भ हो जाएगा

Object object = request.getAttribute("name"); 

यह केवल स्थापित करने कि संदर्भों एक दूसरे के द्वारा उपलब्ध हैं एक सर्वर की आवश्यकता है: वस्तु प्राप्त करने के लिए इस प्रकार सक्षम। यह कैसे करें servletcontainer पर निर्भर करता है। उदाहरण के लिए Tomcat में, आपको केवल crossContext वेबपैप के <Context> तत्व की true पर सेट करने की आवश्यकता है।

<Context crossContext="true"> 

फिर यह अन्य संदर्भों के लिए उपलब्ध होगा। अन्य सर्वरों के लिए, इसके दस्तावेज़ीकरण से परामर्श लें।


उन webapplications शारीरिक रूप से अलग वेब सर्वर पर चलाता है, तो अनेक विकल्प हैं: स्ट्रिंग को

  1. Convert और पैरामीटर के रूप में भेज सकते हैं। पुनर्प्राप्ति पर, स्ट्रिंग से वापस कनवर्ट करें। JSON इसके लिए एक अच्छा प्रारूप है। Google Gson पूर्ण योग्य जावा ऑब्जेक्ट्स और जेएसओएन और इसके विपरीत के बीच कनवर्ट करने की संभावनाएं प्रदान करता है। यदि आप जीईटी का उपयोग कर रहे हैं और अनुरोध यूआरआई 2KB से अधिक लंबा हो जाता है, तो जीईटी के बजाय POST का उपयोग करने पर विचार करें, अन्यथा यूआरआई सर्वर द्वारा छोटा कर दिया जा सकता है। पेशेवर: बेहतर पुन: प्रयोज्य सेवा। विपक्ष: बाइनरी डेटा भेजने के लिए मुश्किल है।

    यह भी देखें:Converting JSON to Java

  2. URLConnection या Apache HttpComponents Client प्रति RFC2388 के रूप में उपयोग करते हुए एक multipart/form-data HTTP POST अनुरोध भेजें और Apache Commons FileUpload का उपयोग कर दूसरी तरफ इसे संसाधित। पेशेवर: बाइनरी डेटा भेजने के लिए मानक विनिर्देश, संभव है। विपक्ष: अधिक कोड।

    यह भी देखें:How to use URLConnection

  3. Serialize जावा वस्तु, ObjectOutputStream का उपयोग कर इसे URLConnection#getOutputStream() के लिए कच्चे लिख सकते हैं और यह HttpServletRequest#getInputStream() से कच्चे निकालते हैं और ObjectInputStream का उपयोग कर इसे unserialize। पेशेवर: आसान। विपक्ष: पुन: प्रयोज्य, तंग युग्मित नहीं।

    यह भी देखें:Object Streams और Lesson: Serialization

1

उपयोग Serialization

के बजाय भेजने एचटीएमएल आप वस्तुओं भेजेंगे धाराओं।

बस, अतिरिक्त सुरक्षा जोड़ने के लिए जागरूक रहें, आप कुछ बाहरी स्रोतों को अपनी कॉल में जहर वाली वस्तुओं को इंजेक्ट नहीं करना चाहते हैं।

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