2012-02-02 14 views
11

मैं एक एम्बेडेड जेटी सर्वर से clientacesspolicy.xml फ़ाइल का पर्दाफाश करना चाहता हूं।एम्बेडेड जेटी का उपयोग करके दिए गए पते पर मैं एक विशेष क्लासपाथ संसाधन कैसे सेवा कर सकता हूं?

मेरे वर्तमान प्रयास इस तरह दिखता है:

ContextHandler capHandler = new ContextHandler(); 
capHandler.setContextPath("/clientaccesspolicy.xml"); 
capHandler.setBaseResource(Resource.newClassPathResource("clientaccesspolicy.xml")); 
HandlerList handlers = new HandlerList(); 
handlers.addHandler(capHandler); 
... 
httpServer.setHandler(handlers); 

लेकिन मैं जेट्टी में प्रोग्राम के रूप में किसी URL पर 404 तक पहुँचने http://localhost:9000/clientaccesspolicy.xml

मैं एक classpath संसाधन कैसे प्रदर्शित कर सकते हैं?

धन्यवाद, क्योंकि एक ContextHandler वास्तव में सर्वर की सामग्री नहीं है एंडी

उत्तर

8

आपका कोड काम नहीं करता। एक छोटा समायोजन इसे प्रकार का काम करेगा, लेकिन जो भी आप चाहते हैं वह करने के लिए आपको अपना खुद का हैंडलर लिखना होगा।

संस्करण " कार्यों के तरह":

ContextHandler capHandler = new ContextHandler(); 
capHandler.setContextPath("/clientaccesspolicy.xml"); 
ResourceHandler resHandler = new ResourceHandler(); 
resHandler.setBaseResource(Resource.newClassPathResource("clientaccesspolicy.xml")); 
capHandler.setHandler(resHandler); 

लेकिन, उस संस्करण व्यवहार करता है /clientaccesspolicy.xml एक निर्देशिका के रूप में, तो यह /clientaccesspolicy.xml/ पर रीडायरेक्ट और फिर XML फ़ाइल की सामग्री को प्रदर्शित करता है।

यह लग रहा है क्या की तरह आप चाहते हैं ResourceHandlerयूआरएल =>संसाधन के देखने है कि का एक संस्करण है। जेट्टी एक हैंडलर के साथ शिप नहीं करता है जो ऐसा करता है, लेकिन आप ResourceHandler का उप-वर्ग बनाने में सक्षम होना चाहिए और फिर getResource ओवरराइड करना चाहिए। उस स्थिति में आपको ContextHandler की आवश्यकता नहीं होगी [बस चाहते हैं], बस "/clientaccesspolicy.xml" पर कॉल की जांच करें और इसे सही क्लासपाथ संसाधन में मैप करें।

+0

सही लगता है, इसे जाने देगा! धन्यवाद – Andy

+0

अद्यतन - दोनों सुझाव काम करते थे, लेकिन केवल दूसरे ने उपयोग करने योग्य क्लाइंट एक्सेस नीति फ़ाइल बनाई – Andy

17

दरअसल, आप केवल कक्षा पथ संसाधन (आश्चर्यजनक रूप से) के रूप में कक्षा वर्ग पंजीकृत कर सकते हैं।

ResourceHandler resHandler = new ResourceHandler(); 
resHandler.setBaseResource(Resource.newClassPathResource("/")); 
server.setHandler(resHandler); 

फिर आप अपने वर्ग पथ में जो भी फाइलें एक्सेस कर सकते हैं। तो अगर आपके पास file.xml है तो इसे स्थानीयहोस्ट से 9 000/file.xml से परोसा जाएगा।