2008-10-14 6 views
9

Ist es möglich, Webinhalte (wie JSPs, HTML, Bilder, CSS usw.) in einer JAR-Datei zu speichern?Webinhalt in einer JAR-Datei speichern

Ich habe verschiedene Möglichkeiten zur Modularisierung unserer Web-Anwendungen untersucht und dies ist eine Möglichkeit.

Wir verwenden derzeit JSF und Facelets für unsere Ansichtstechnologie - ich denke, dass es möglich ist, eine Form von benutzerdefinierten Ansichtsresolver zu schreiben, die den Klassenpfad und nicht ein Dateisystemverzeichnis untersuchen würde, aber ich bin mir nicht sicher würde funktionieren.

Irgendwelche Ideen würden geschätzt werden! :)

Update: Ich sollte wahrscheinlich klären. Wie erhalten Sie den Webcontainer (z. B. Tomcat) zum Laden von Ressourcen aus einer JAR-Datei? Zum Beispiel stelle ich eine WAR-Datei mit meiner Webanwendung bereit. Wenn ich auf /index.jsp zugreife, versucht der Container, im Verzeichnis des Web-Inhalts nach einer Datei namens index.jsp zu suchen.

Gibt es eine einfache Möglichkeit, Ihren eigenen Ressourcenlader mit Tomcat oder ähnlichem zu konfigurieren, so dass er sowohl den Klassenpfad als auch das Dateisystem durchsucht?

Antwort

1

Absolut. Verdammt, Sie können Inhalte direkt in einer WAR-Datei speichern, die im Grunde eine JAR-Datei mit ein paar zusätzlichen Bits ist. Ja, Sie müssen möglicherweise einen benutzerdefinierten Resolver schreiben, um ClassLoader.getResourceAsStream zu verwenden, aber im Grunde, da Ihnen die Möglichkeit gegeben wird, den Inhalt nach Belieben zu generieren, scheint das Abrufen aus einer JAR-Datei völlig in Ordnung zu sein. Sie werden wahrscheinlich sicherstellen wollen, dass es nur einen sehr spezifischen Satz von Erweiterungen holt :)

3

Ja, es ist möglich, Dateien z. Eigenschaften, XML, XSLT, Bild usw .; in einer JAR (oder WAR) -Datei und ziehen Sie sie zur Laufzeit.

Verwenden Sie den folgenden Code, um eine Ressource aus dem Deployment-Jar zu laden.

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

In einem Maven-Projekt, Ordner & in Ressourcen platzierten Dateien werden in dem Glas eingeschlossen. Der Dateiname ist relativ zum Stamm der JAR-Datei, so dass "./filename.xml" mit der Datei filename.xml übereinstimmt, die in "/ src/java/resources" abgelegt ist.

1

Sie können auch das Weblets-Projekt verwenden (siehe https://weblets.dev.java.net/).

Sie speichern einige Ressourcen in einer JAR-Bibliothek (wie Bilder, CSS, Javascript ...) und Sie schreiben eine wirklich einfache weblet-config.xml. Dann in der JSF-Seite, können Sie sie direkt mit dieser Syntax verweisen:

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

Danke, das ist wirklich nützlich. Wenn es nur einen Weg gäbe, JSF pagge selbst in eine .jar-Datei zu bekommen ... –

1

Eine Tag-Datei wie ein JSP-Fragment, das in ein Gefäß gegeben werden kann. Die Verwendung von Tag-Dateien könnte Ihnen helfen, aber ich habe nie versucht, Bilder, CSS usw. in einem Jar zu verwenden.

3

Wenn Sie Maven verwenden, um Ihre Webanwendung zu erstellen, können Sie eine WAR Ihrer Ressourcen erstellen und diese WAR zum Build-Zeitpunkt auf Ihre webapp WAR überlagern.

Die Ressource WAR, die alle Ihre JSPs, Bilder, CSS usw. enthält, wird als "Overlay" bezeichnet und ist lediglich eine Abhängigkeit in Ihrer Ziel-Webanwendung mit dem Typ "Krieg".

Wenn Sie Ihre Webanwendung packen, wird die Ressource WAR nur über nicht konfligierende Dateien kopieren. Wenn Sie also eine eindeutige index.jsp in Ihrem Projekt haben und diese anstelle der index.jsp im Overlay verwenden möchten, fügen Sie sie einfach in Ihre Ziel-Webanwendung ein, und Maven kopiert diese Ressource nicht.

Weitere Informationen über die Maven War plugin page about overlays.

0

In Core JavaServer Faces, 3. Ausgabe, unter "Composite Components in JARs verpacken" auf S. 21 382, es geht um das Verpacken von Composite-Komponenten in JAR-Dateien.

"Sie müssen Ihre zusammengesetzte Komponente und ihre Artefakte wie JavaScript, Stylesheets oder Eigenschaftendateien in einem META-INF-Verzeichnis im JAR platzieren, wie in Abbildung 9-14 gezeigt."

components.jar 
+-- META-INF 
    +-- resources 
     +-- css 
     | +-- styles.css 
     +-- images 
     | +-- back.png 
     +-- util 
      +-- icon.xhtml 
      +-- login.js 
      +-- login.properties 

bin ich nicht sicher, wie leicht diese Ressourcen direkt aus anderen Anwendungen auf die enthaltenen Verbundbauteile im Gegensatz zugegriffen werden.

Verwandte Themen