2008-10-14 11 views
9

Czy w pliku JAR można przechowywać treści internetowe (takie jak strony JSP, HTML, obrazy, CSS itp.)?Przechowywanie treści WWW w pliku JAR

Przeglądałem różne opcje modularyzacji naszych aplikacji internetowych i jest to jedna z możliwości.

Obecnie używamy JSF i Facelets dla naszej technologii widoku - myślę, że możliwe jest napisanie jakiejś formy niestandardowego narzędzia do rozpoznawania widoku, które byłoby raczej badaniem ścieżki klas niż katalogu systemu plików, ale nie jestem pewien pracowałbym.

Wszelkie pomysły będą mile widziane! :)

Aktualizacja: powinienem chyba wyjaśnić. Jak uzyskać kontener internetowy (taki jak Tomcat), aby załadować zasoby z pliku JAR? Na przykład wdrażam plik .war w mojej aplikacji internetowej. Po uzyskaniu dostępu do pliku /index.jsp kontener spróbuje wyszukać w katalogu treści WWW plik o nazwie index.jsp.

Czy istnieje prosty sposób skonfigurowania własnego modułu ładującego zasoby za pomocą programu Tomcat lub podobnego, aby przeszukiwać ścieżkę klas, a także system plików?

Odpowiedz

1

Absolutnie. Heck, możesz przechowywać zawartość bezpośrednio w pliku WAR, który jest w zasadzie plikiem JAR z kilkoma dodatkowymi bitami. Tak, możesz potrzebować napisać niestandardowy przelicznik, aby użyć ClassLoader.getResourceAsStream, ale w zasadzie, ponieważ masz możliwość generowania treści w dowolny sposób, pobieranie jej z pliku JAR wydaje się całkowicie uzasadnione. Prawdopodobnie będziesz chciał upewnić się, że pobiera on tylko bardzo specyficzny zestaw rozszerzeń :)

3

Tak, możliwe jest przechowywanie plików, np. właściwości, xml, xslt, obraz itp; w pliku JAR (lub WAR) i przeciągnij je w czasie wykonywania.

Aby załadować zasób ze skrzynki wdrażania, użyj następującego kodu.

this.getClass().getClassLoader().getResourceAsStream(filename) ; 

W projekcie maven, foldery & pliki umieszczone w zasobach są zawarte w słoiku. Nazwa pliku odnosi się do katalogu głównego pliku jar, więc "./filename.xml" będzie pasować do pliku filename.xml umieszczonego w "/ src/java/resources".

1

Można również użyć projektu weblets (zobacz https://weblets.dev.java.net/).

Przechowujesz część zasobów w bibliotece JAR (takich jak obrazy, css, javascript ...) i piszesz naprawdę prosty weblet-config.xml. Następnie na stronie JSF, można zwrócić je bezpośrednio z tej składni:

<h:graphicImage src="weblet://some-name/images/someimage.jpg" .../> 
+0

Dzięki, to jest naprawdę przydatne. Teraz gdyby był tylko sposób na przekonwertowanie plików JSF do pliku .jar ... –

1

plik Tag to jak fragment JSP, który można umieścić w słoiku. Używanie plików znaczników mogłoby ci pomóc, ale nigdy nie próbowałem używać obrazów, CSS itp. W słoiku.

3

Jeśli korzystasz z Mavena do zbudowania swojej aplikacji internetowej, możesz zbudować WAR swoich zasobów i nałożyć WAR na WAR podczas gry.

Warstwa zasobów zawierająca wszystkie Twoje strony JSP, obrazy, CSS itp. Jest określana jako "nakładka" i jest po prostu zależnością w docelowej aplikacji internetowej z typem ustawionym na "war".

Podczas pakowania aplikacji webowej WAR WAR tylko skopiuje pliki nie będące w konflikcie. Tak więc, jeśli masz unikalny index.jsp w swoim projekcie, i chcesz go użyć zamiast nakładki index.jsp w nakładce, po prostu umieść go w docelowej aplikacji internetowej, a Maven nie skopiuje tego zasobu.

Więcej informacji na temat Maven War plugin page about overlays.

0

W programie Core JavaServer Faces, 3 edycja, w części "Komponenty kompozytowe w pakietach JAR" na s. 382, mówi o komponentach kompozytowych w plikach JAR.

"Wszystko, co musisz zrobić, to umieścić swój komponent złożony i jego artefakty, takie jak JavaScript, arkusze stylów lub pliki właściwości, w katalogu META-INF w pliku JAR, jak pokazano na rysunku 9-14."

Nie jestem pewien, jak łatwo można uzyskać dostęp do tych zasobów bezpośrednio z innych aplikacji w przeciwieństwie do zawartych w nich komponentów kompozytowych.

Powiązane problemy