2012-01-06 16 views
5

Próbuję załadować plik obrazu binarnego, aby wykonać pewne przetwarzanie wewnątrz mojego kodu Java po stronie serwera. Ja obecnie umieszczenie mojego wizerunku w opakowaniu, gdzie istnieje klasa moim wykonaniu i wywołanie:Jak mogę odczytać plik zasobów w niewybytym pliku wojennym wdrożonym w Tomcat?

Image img = Image.getInstance(this.getClass().getResource("logo.png")); 

Działa to dobrze, gdy biegnę Tomcat na moim polu rozwoju w rozłożeniu instalacji wojennej, ale gdy wdrożyć do serwera uruchamiając Tomcat, gdzie nie eksploduje plików wojennych, wywołanie getResource zwraca wartość null.

Próbowałem zostały również przeniesienie obrazu do mojego kontekstowego katalogu głównego i dostępu do niego tak:

Image img = Image.getInstance(this.getClass().getResource("/../../logo.png")); 

Ponownie, to działa na moim komputerze rozwoju, ale nie kiedy wdrożyć go w innym miejscu.

Czy jest lepszy sposób dostępu do tego pliku? Co ja robię źle?

Dzięki!

+0

pewnie powinien mieć również wspomnieć, że jestem używając Mavena do zbudowania mojej aplikacji internetowej. Mam kompletną odpowiedź, która rozwiązuje mój problem, ale nie mogę opublikować go przez 8 godzin na moje własne pytanie. – 11101101b

+0

Umieść zasoby w katalogu "src/main/resources". Następnie uzyskaj dostęp do nich za pomocą: this.getClass(). GetResource ("/ logo.png"); lub: Thread.currentThread(). GetContextClassLoader(). GetResource ("logo.png"); – 11101101b

Odpowiedz

5

Jeśli budujesz użyciu Maven, będziemy chcieli, aby upewnić się, że obraz rzeczywiście zostanie umieszczony w archiwum.

Umieść zasoby w swoim katalogu src/main/resources. Potem do nich dostęp z:

this.getClass().getResource("/logo.png"); 

lub:

Thread.currentThread().getContextClassLoader().getResource("logo.png"); 

(próbki kodu z komentarzem powyżej, ale umieścić odpowiedź jest bardziej widoczne)

+0

Proszę nie zapomnieć o "/" przed nazwą pliku w pierwszym przypadku –

1

Można umieścić swoje zdjęcia w katalogu głównym ścieżce klas i spróbuj tego:

Thread.currentThread().getContextClassLoader() 
       .getResource("logo.png"); 
+1

+1 - Na podstawie katalogu głównego ścieżki klasy "WEB-INF/classes" w pliku WAR znajduje się miejsce, w którym wielu umieści wymienione zasoby. Chociaż mogą się organizować za pomocą takich folderów jak "images/logo.png". – rfeak