विकल्प ए) का प्रयोग करें ServletContext.getResourceXXX()
आप एक Aquillarian MockHttpSession और एक MockServletContext होना चाहिए। उदाहरण के लिए:
@Test
public void myTest()
{
HttpSession session = new MockHttpSession(new MockServletContext());
ServletLifecycle.beginSession(session);
..testCode..
// You can obtain a ServletContext (will actually be a MockServletContext
// implementation):
ServletContext sc = session.getServletContext();
URL url = ServletContext.getResource("/WEB-INF/testdata.xml")
Path resPath = new Path(url);
File resFile = new File(url);
FileReader resRdr = new FileReader(resFile);
etc...
..testCode..
ServletLifecycle.endSession(session);
}
आप संसाधन फ़ाइलों में & उपनिर्देशिका बना सकते हैं:
- वेब मॉड्यूल दस्तावेज़ जड़ - संसाधनों - संसाधन ब्राउज़र से और वर्गों
- वेब-INF/वर्गों/से सुलभ हैं वर्ग
- वेब-आईएनएफ/lib/*। जार स्रोत जार - कक्षाओं के लिए सुलभ
- वेब-आईएनएफ/lib/*। जार समर्पित संसाधन-केवल जार - क्लास के लिए सुलभ एस
- वेब-आईएनएफ/सीधे निर्देशिका के भीतर - कक्षाओं के लिए सुलभ। यही वह है जिसे आप पूछ रहे हैं।
सभी मामलों में संसाधन के माध्यम से पहुँचा जा सकता है:
URL url = sc.getResource("/<path from web doc root>/<resourceFileName>");
OR
InputStream resIS = sc.getResourceAsStream("/<path from web doc root>/<resourceFileName>");
>
ये युद्ध फ़ाइल में पैक किया जाएगा और तैनात अनुप्रयोग सर्वर या वे हो सकता है पर निर्देशिका में विस्फोट किया जा सकता है ऐप सर्वर पर WAR फ़ाइल के भीतर रहें। किसी भी तरह से - संसाधनों तक पहुंचने के लिए एक ही व्यवहार: ServletContext.getResourceXXX() का उपयोग करें।
ध्यान दें कि एक सामान्य सिद्धांत के रूप में, (5) शीर्ष-स्तर वाली वेब-आईएनएफ निर्देशिका स्वयं सर्वर द्वारा उपयोग के लिए है।यह 'विनम्र' है कि अपने वेब संसाधनों को सीधे यहां न डालें या यहां अपनी निर्देशिका सीधे बनाएं। इसके बजाय, ऊपर (2) का उपयोग करने के लिए बेहतर है।
JEE5 tutorial web modules JEE6 tutorial web modules
विकल्प बी): उपयोग Class.getResourceXXX()
प्रथम में वेब-INF फ़ोल्डर से बाहर ले जाने के संसाधन वेब-INF/वर्गों (या एक जार के अंदर WEB- INF/lib/*। जार)।
यदि आपकी परीक्षण वर्ग है:
फ़ाइल में
- com.abc.pkg.test.MyTest वेब-INF/वर्गों/com/एबीसी/pkg/परीक्षण/MyTest.class
और अपने संसाधन फ़ाइल
- वेब-INF/वर्गों/com/एबीसी/pkg/परीक्षण/संसाधन/testdata.xml (या एक जार फ़ाइल में समतुल्य)
0 है
Access का उपयोग सापेक्ष फ़ाइल स्थान फ़ाइल जावा classloader के माध्यम से, - क्लासपाथ पाता फ़ोल्डर/जार रिश्तेदार:
java.net.URL resFileURL = MyTest.class.getResource("resources/testdata.xml");
File resFile = new File(fileURL);
OR
InputStream resFileIS =
MyTedy.class.getResourceAsStream("resources/testdata.xml");
पहुँच फ़ाइल पूर्ण पैकेज की तरह योग्यता का उपयोग करना, जावा classloader का उपयोग करना - पाता क्लासपाथ को फ़ोल्डर/जार रिश्तेदार :
java.net.URL resFileURL = MyTest.class.getResource("/com/abc/pkg/test/resources/testdata.xml");
File resFile = new File(fileURL);
OR
InputStream resFileIS =
MyTest.class.getResourceAsStream("/com/abc/pkg/test/resources/testdata.xml");
OR
java.net.URL resFileURL = MyTest.class.getClassLoader().getResource("com/abc/pkg/test/resources/testdata.xml");
File resFile = new File(fileURL);
OR
InputStream resFileIS =
MyTest.class.getClassLoader().getResourceAsStream("com/abc/pkg/test/resources/testdata.xml");
आशा है कि यह नाखून! @B)
यह करने के लिए classpath में होना चाहिए 'class.getResourseAsStream()' करें। WEB-INF के अंदर सबकुछ क्लासपाथ में नहीं रखा जाता है। WEB-INF में कक्षा फ़ोल्डर की केवल सामग्री क्लासपाथ में जोड़ दी गई है। आप संदर्भ पथ का मार्ग प्राप्त कर सकते हैं और शेष स्थान को जोड़ सकते हैं। –
या यदि आपके पास 'ServletContext' तक पहुंच है तो आप' servletContext.getRealPath ("/ WEB-INF/testdata.xml") कर सकते हैं। –
@heshGurung लेकिन यह विफल रहता है। – LuckyLuke