Wariant A) Zastosowanie ServletContext.getResourceXXX()
Powinieneś mieć Aquillarian MockHttpSession i MockServletContext. Np:
@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);
}
Można tworzyć pliki zasobów & podkatalogi:
- internetowej modułu głównego dokumentu - zasoby są dostępne z poziomu przeglądarki i od zajęć
- WEB-INF/classes/- Zasoby są dostępne dla klas
- WEB-INF/lib/*. jar źródłowy jar - dostępny dla klas
- WEB-INF/lib/*. jar dedykowany tylko dla zasobów - dostępny dla klasy s
- WEB-INF/bezpośrednio w katalogu - dostępne dla klas. Tego właśnie prosisz.
We wszystkich przypadkach źródłem mogą być dostępne poprzez:
URL url = sc.getResource("/<path from web doc root>/<resourceFileName>");
OR
InputStream resIS = sc.getResourceAsStream("/<path from web doc root>/<resourceFileName>");
>
Będą one pakowane w pliku WAR i może być eksplodował w katalogach na wdrożonej mogą one serwera aplikacji lub pozostań w pliku WAR na serwerze aplikacji. Tak czy inaczej - to samo zachowanie dla dostępu do zasobów: użyj ServletContext.getResourceXXX().
Należy pamiętać, że zgodnie z ogólną zasadą (5) sam katalog najwyższego poziomu WEB-INF jest przeznaczony do użytku przez serwer.Jest "uprzejme", aby nie umieszczać tutaj bezpośrednio swoich zasobów sieciowych lub nie tworzyć bezpośrednio własnego katalogu. Zamiast tego lepiej użyć (2) powyżej.
JEE5 tutorial web modules JEE6 tutorial web modules
Wariant B): Użyj Class.getResourceXXX()
Najpierw przesunąć zasoby z katalogu WEB-INF do WEB-INF/classes (lub wewnątrz słoika WEB- INF/lib/*. Jar).
Jeśli klasa test jest:
- com.abc.pkg.test.MyTest w pliku WEB-INF/classes/com/abc/pkg/test/MyTest.class
i plik zasobów jest
- WEB-INF/classes/com/abc/pkg/test/resources/testdata.xml (lub równowartość w pliku jar)
dostęp do plików za pomocą względna lokalizację pliku, za pośrednictwem Java ClassLoader - stwierdza Foldery/Jars względem Classpath:
java.net.URL resFileURL = MyTest.class.getResource("resources/testdata.xml");
File resFile = new File(fileURL);
OR
InputStream resFileIS =
MyTedy.class.getResourceAsStream("resources/testdata.xml");
dostępu do plików Korzystanie pełny pakiet podobny Kwalifikacje, Korzystanie Java ClassLoader - stwierdza Foldery/Jars względem Classpath :
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");
Mam nadzieję, że to nails! @B)
To powinno być w ścieżce klasy do wykonaj 'Class.getResourseAsStream()'. Nie wszystko w WEB-INF jest umieszczone w ścieżce klas. Tylko zawartość folderu klas w WEB-INF jest dodawana do ścieżki klasy. Możesz uzyskać ścieżkę ścieżki kontekstowej i dołączyć do niej resztę lokalizacji. –
Lub jeśli masz dostęp do 'ServletContext' możesz zrobić' servletContext.getRealPath ("/ WEB-INF/testdata.xml") '. –
@BheshGurung Ale to się nie udaje. – LuckyLuke