Buduję aplikację opartą o JavaBeans/POJOs - Servlety - JSP.
Chciałem napisać klasę korzystającą z pliku "plik.xml" umieszczonego w katalogu /WEB-INF/. Używałem przy tym: File plik = new File("/WEB-INF/plik.xml"), jednak w ten sposób plik wyszukiwany jest w "C:/WEB-INF/plik.xml" (dość oczywiste).
Czy jest jakaś możliwość dotarcia do pliku przez podanie ścieżki "/WEB-INF/plik.xml"?
skonfiguruj sobie to we właściwościach servletu.
Gdybyś mógł mi wytłumaczyć w jaki sposób to zrobić, byłbym bardzo wdzięczny.
Poradziłem sobie używając w servlecie:
InputStream is = getServletContext().getResourceAsStream("/WEB-INF/plik.xml");
Mimo wszystko Koziołek, bardzo jestem ciekawy Twojego sposobu, więc jakbyś mógł mi go przybliżyć byłbym wdzięczny.
Może chodziło o to, że servlet może mieć własny parametr inicjalizacyjny.
Jeśli tak, to nie o to mi chodziło. Taki parametr to String, który nic mi nie daje, bo potrzebuję File'a, bądź InputStream'a.
W parametrze inicjalizacyjnym mogę co najwyżej określić ścieżkę do pliku (co wydaje się być dobrym pomysłem, bo uniknę wpisywania ścieżki w kodzie serwletu).
Taki parametr to String, który nic mi nie daje, bo potrzebuję File'a,
Ale jak chcesz mieć obiekt file lub inpustream bez url?
Masz ten adres w web.xml i git, w kodzie servletu zawsze musisz stworzyć obiekt File czy inny.
Ewentualnie, mógłbyś sobie pobierać ten obiekt z jakieś zwykłej klasy w init(), ale po co?
GhostDog, jakbyś przeczytał drugą linijkę tego posta, zauważyłbyś że napisałeś to samo co ja, tylko w inny sposób. Problem był w tym, że przy zastosowaniu File'a plik był lokalizowany nie tam gdzie chciałem (pierwszy post).
Ostatecznie problem rozwiązałem tak jak wcześniej pisałem, ale właśnie z użyciem parametru:
web.xml:
<init-param>
<param-name>plik</param-name>
<param-value>/WEB-INF/plik.xml</param-value>
</init-param>
servlet:
InputStream is = getServletContext().getResourceAsStream(getServletConfig().getInitParameter("plik"));