2010-08-29 13 views
5

मैं पूर्ण ग्रहण (जेएसपी) में एक वेब अनुप्रयोग बना रहा हूं और टॉमकैट को सर्वर (ग्रहण में एकीकृत) के रूप में उपयोग कर रहा हूं। मुझे नीचे ऑब्जेक्ट बनाना है और कॉन्फ़िगरेशन फ़ाइल के पथ को निर्दिष्ट करना है। यह पूर्ण पथ बहुत अच्छा काम कर रहा है:सापेक्ष पथ (ग्रहण, जेएसपी)

Store store = StoreFactory.create("file:///C:/Users/Aliens/workspace/myProject/WebContent/config/sdb.ttl"); 

हालांकि मुझे आश्चर्य है कि मैं सापेक्ष पथ का उपयोग क्यों नहीं कर सकता। क्या यह "config/sdb.ttl" सही होना चाहिए (यदि परियोजना का नाम रूट है)? लेकिन यह इस तरह से नहीं ढूंढ सकता (NotFoundException)।

उत्तर

5

सापेक्ष डिस्क फ़ाइल सिस्टम पथ वर्तमान कार्यशील निर्देशिका से संबंधित हैं जो इस बात पर निर्भर है कि आपने एप्लिकेशन कैसे शुरू किया है (ग्रहण में यह प्रोजेक्ट फ़ोल्डर होगा, कमांड कंसोल में यह वर्तमान में खोला गया फ़ोल्डर होगा, टॉमकैट मैनेजर/सेवा Tomacat/bin फ़ोल्डर, आदि होगी)। जावा कोड के अंदर से आप पर इसका कोई नियंत्रण नहीं है, इसलिए इसके बारे में भूल जाओ।

जेएसपी/सर्वलेट में आप ServletContext#getRealPath() का उपयोग किसी रिश्तेदार वेब सामग्री पथ को परिवर्तित करने के लिए कर सकते हैं (इसकी सार्वजनिक वेबकंटेंट में इसकी जड़ है, आपके मामले में /WebContent फ़ोल्डर) एक पूर्ण डिस्क फ़ाइल सिस्टम पथ पर। तो:

String relativeWebPath = "/config/sdb.ttl"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
Store store = StoreFactory.create(absoluteDiskPath); 
// ... 

ServletContext विरासत में मिला getServletContext() विधि द्वारा सर्वलेट्स में उपलब्ध है।

+0

मैं एक वर्ग कि src फ़ोल्डर में स्थित है में इस स्टोर वस्तु बनाने रहा http://adderpit.com/jdk/j2eedocs/api/javax/servlet/ServletContext.html#getResourceAsStream(java.lang.String)

उपयोग करने के लिए है। चूंकि यह जेएसपी/सर्वलेट नहीं है, इसलिए मैं विधि ServletContext() प्राप्त नहीं कर सकता। जेएसपी में मैं इस कक्षा को तुरंत चालू करता हूं और इसके कन्स्ट्रक्टर में स्टोर ऑब्जेक्ट उत्पन्न होता है। कोई अन्य समाधान? – Aliens

+0

नौकरी के लिए एक जेएसपी फ़ाइल अर्थात् [गलत जगह] (http://stackoverflow.com/questions/3177733/howto-avoid-java-code-in-jsp-files) है। भले ही, जेएसपी फाइलों को सर्वलेट में संकलित किया गया है, इसलिए 'getServletContext') तक 'ServletContext' तक पहुंच है। आप अंतर्निहित परिवर्तनीय 'एप्लिकेशन' का भी उपयोग कर सकते हैं जो इसे संदर्भित करता है। अर्थात। 'Application.getRealPath (relativeWebPath)'। वैसे, क्या आपने ** ** वास्तव में यह कोशिश करने से पहले ** क्या मैं विधि का उपयोग नहीं कर सकता "? – BalusC

+0

हे। बेशक मैंने कोशिश की और यह अभी भी काम नहीं कर रहा है। मुझे नहीं पता कि तुम मुझे समझते हो। मैं जेएसपी में getServletContext() को कॉल नहीं कर रहा हूं। मैं इसे .java फ़ाइल में/src में कॉल करना चाहता हूं लेकिन मैं ऐसा नहीं कर सकता। यह .java फ़ाइल एक वर्ग है। और वह वर्ग जेएसपी में तत्काल है। – Aliens

0

सही/मानक/संगत रास्ते की तरह

servletContext.getResourceAsStream("config/sdb.ttl"); 
संबंधित मुद्दे