2008-09-13 15 views
5

यदि मैं एक हस्ताक्षरित जावा एप्लेट चला रहा हूं, तो क्या मैं दूरस्थ स्रोतों (उसी डोमेन में, शायद एक ही मेजबान) से अतिरिक्त कक्षाएं लोड कर सकता हूं और उन्हें चला सकता हूं?एक हस्ताक्षरित एप्लेट से जावा कक्षाएं लोड करना

मैं पृष्ठों को बदलने या यहां तक ​​कि वर्तमान एप्लेट को रोकने के बिना ऐसा करना चाहता हूं। बेशक, सभी कक्षाओं का कुल आकार उन्हें एक साथ लोड करने के लिए बहुत बड़ा है।

क्या ऐसा करने का कोई तरीका है? और क्या यह हस्ताक्षरित एप्लेट्स के साथ ऐसा करने का एक तरीका है और उनकी "आत्मविश्वास" स्थिति को सुरक्षित रखता है?

उत्तर

5

मुझे लगता है कि कक्षाएं ऐप्पल में आलसी लोड हैं। मांग पर लोड किया जा रहा है।

वैसे भी, यदि कक्षाएं जार के बाहर हैं तो आप बस एप्लेट क्लासलोडर का उपयोग कर सकते हैं और उन्हें नाम से लोड कर सकते हैं। उदाहरण के लिए:

ClassLoader loader = this.getClass().getClassLoader(); 
Class clazz = loader.loadClass("acme.AppletAddon"); 

आप एक जार मुझे लगता है कि आप जार (ओं) का यूआरएल (रों) के साथ URLClassLoader का एक नया उदाहरण बनाने की आवश्यकता होगी से कक्षाओं लोड करने के लिए चाहते हैं।

URL[] urls = new URL[]{new URL("http://localhost:8080/addon.jar")}; 
URLClassLoader loader = URLClassLoader.newInstance(urls,this.getClass().getClassLoader()); 
Class clazz = loader.loadClass("acme.AppletAddon"); 

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

+0

धन्यवाद, URLClassLoader बस वही जैसा दिखता है जैसा मैं चाहता था। मुझे बस यह सुनिश्चित करने की आवश्यकता होगी कि मैं हस्ताक्षर श्रृंखला को बरकरार रख सकूं। –

+1

यह माता-पिता (लोडर) एप्लेट पर हस्ताक्षर किए जाने के बाद काम किया। लेकिन बच्चे (भारित) जार, भले ही वे हस्ताक्षरित हैं, सुरक्षा अनुमतियां प्राप्त न करें। –

0

लगता है जैसे यह संभव होना चाहिए (लेकिन मैंने इसे कभी नहीं किया है)। क्या आपने पहले से ही दूरस्थ विधि आमंत्रण (RMI) पर एक नज़र डाली है?

+0

आरएमआई वह दिशा नहीं है जिसे मैं ढूंढ रहा हूं, लेकिन वैसे भी धन्यवाद। –

2

हां, आप उस होस्ट से यूआरएल कनेक्शन खोल सकते हैं, जिस पर आपने अपना एप्लेट चलाया था। आप या तो HTTP यूआरएल के साथ एक क्लासलोडर बना सकते हैं, या उपयोगकर्ता की मशीन पर कक्षाएं (जार के रूप में) डाउनलोड कर सकते हैं और क्लासपाथ में उन जारों के साथ क्लासलोडर बना सकते हैं। एप्लेट बंद नहीं होगा और आपको एक और पेज लोड करने की आवश्यकता नहीं है।

आत्मविश्वास के बारे में आपके प्रश्न के दूसरे भाग के बारे में, एक बार जब उपयोगकर्ता ने आपके एप्लेट तक पहुंच प्रदान की है तो यह कुछ भी डाउनलोड कर सकता है, हाँ कुछ भी, यह स्थानीय मशीन चाहता है। यदि आप अपना यूआई डिज़ाइन इस परमिट करते हैं, तो आप शायद उपयोगकर्ता को यह बता सकते हैं कि यह क्या कर रहा है।

उम्मीद है कि इससे मदद मिलती है।

+0

शानदार, धन्यवाद। काश मैं दोनों उत्तरों को स्वीकार/विलय कर सकता हूं। –

+0

दुर्भाग्यवश, जैसा कि मैंने जसुनकाओ के उत्तर पर टिप्पणी की थी, अब तक लोड किए गए एप्लेट को उचित अनुमति नहीं है। –