2012-12-22 4 views
5

Mam pęczek tekstu, xml i innych plików (tj. Zasobów), do których muszę uzyskać dostęp za pomocą serwletów w aplikacji internetowej java. Na przykład istnieje plik xml, którego część jest zwracana z serwletem za pomocą zapytania użytkownika. Używam Tomcat. Jaka jest najlepsza praktyka przechowywania tych plików i dostępu do nich z kodu Java? 1) Jakie są domyślne foldery, gdzie powinienem je umieścić, czy muszę umieścić je w archiwum sieciowym lub w jednym ze słoików? 2) Jak uzyskać dostęp do plików z kodu Java? Jak mogę ustawić dla nich ścieżkę, aby działała w każdym środowisku? P.S. Czytałem wiele postów związanych z tym tematem, z których większość zaleca przechowywanie zasobów w słoikach i dostęp do nich za pomocą java.lang.Class.getResourceAsStream (String). Wydaje się to dziwne, ponieważ klasy i dane powinny być oddzielone.Najlepsze praktyki do przechowywania i uzyskiwania dostępu do plików zasobów w aplikacji WWW java

Odpowiedz

7

Ładowanie ładunków statycznych przy użyciu programu ładującego klasy jest całkowicie w porządku. To właśnie robi ResourceBundle, aby załadować na przykład internacjonalizowane pliki właściwości.

Umieść je w pliku WEB-INF/classes wraz z plikami klas lub w słoiku wewnątrz WEB-INF/lib i załaduj je za pomocą ClassLoader, zgodnie z odpowiedziami, które już przeczytałeś.

Nie zabrania to umieszczania tych plików w oddzielnym katalogu z plików źródłowych Java w projekcie. Proces kompilacji powinien po prostu zapewnić umieszczenie ich w odpowiednim miejscu dla środowiska wykonawczego. Konwencja Maven and Gradle polega na umieszczeniu plików źródłowych pod src/main/java i plikami zasobów pod numerem src/main/resources.

+0

1) Co mam zrobić, jeśli mam już zasoby w folderze WEB-INF/resources? Są używane przez JavaScript na stronie HTML. Strona to WEB-INF/index.html, a skrypt odnosi się do zasobów używających względnej ścieżki. 2) Gdzie powinienem przechowywać ścieżkę do folderu zasobów? Czy jest miejsce w pliku web.xml lub innym statycznym? – Alexander

+1

Zasoby w WEB-INF nie są dostępne z zewnątrz, więc nie można załadować pliku JS do WEB-INF z przeglądarki. Możesz użyć ServletContext.getResourceAsStream(), aby załadować zasoby z dowolnego miejsca w aplikacji internetowej (w tym WEB-INF), ale to zmusza klasę ładowania do dostępu do ServletContext. Nie rozumiem twojego drugiego pytania. To jest statyczny zasób. Dlaczego nie utworzysz ścieżki na stałe? –

+0

Potrzebne jest wystąpienie serwletu, aby uzyskaćContext, a następnie uzyskać zasób lub ścieżkę folderu. Czy istnieje sposób, aby zrobić to statycznie bez tworzenia instancji? Moje drugie pytanie dotyczyło miejsca, w którym powinienem przechowywać takie stałe. Czy istnieje miejsce w niektórych zasobach sieciowych, takich jak web.xml (zamiast stałej w jednym z kodu źródłowego klasy)? – Alexander