Wo setze ich statische Dateien für die GWT-app?Krieg-Ordner oder öffentliche Ordner?
-
19-09-2019 - |
Frage
Ich habe einige JavaScript-Dateien, eine Haupt-HTML-Datei, ein Haupt-CSS-Datei, und einige CSS-Dateien, die importiert werden, die in das Haupt.
Ich verstehe, dass ich statische Dateien an zwei Orten:a) die "Kriegs" - Ordner;oder b) die "öffentlichen" Ordner.
Wo ist der beste Ort, um meine statischen Dateien?Sind die beiden Orte unterschiedlich behandelt?Gibt es ein 'best practice' auf dieses Problem?
Lösung
Der Unterschied zwischen den zwei Standorten ist, dass Dateien in den öffentlichen Ordnern von der GWT-Compiler zum ‚Ihr Modul‘ -Ordner in den Ordner ‚Krieg‘ kopiert werden. Dies ist ein Mittel, wenn Sie den ‚Krieg‘ (zum Beispiel über die Google-Plug-in dem Google App Engine) die Dateien aus den ‚öffentlichen‘ Ordnern sind nicht auf der obersten Ebene bereitstellen.
Zum Beispiel, wenn Sie eine index.html im ‚öffentlichen‘ Ordner mit GWT-Modul namens ‚mymodule‘ haben und Sie bereitstellen auf www.example.com es sieht wie folgt aus, benötigen Sie für den Zugriff über:
www.example.com/mymodule/index.html
Wenn Sie die index.html im ‚Krieg‘ Ordner haben, erhalten Sie:
www.example.com/index.html
Summieren. Ihre Zielseite sollte in den ‚Krieg‘ Ordner. Ressourcendateien von der Zielseite verwendet wird, kann auch hier (css, Bilder) gespeichert werden. Jede andere Ressource-Datei, die in jeder gwt Moduldatei bezeichnet wird (oder Code, wie Bilder) auf den GWT-Modul im Zusammenhang im ‚öffentlichen‘ Ordnern gespeichert werden.
Andere Tipps
Der neue Weg in GWT Arbeits ist, den Krieg Ordner zu verwenden.
Aber, wenn Sie projizieren eine wiederverwendbare Widget-Bibliothek, die in einer GWT-Anwendung verwendet wird, dann sollten Sie die Ressourcen im öffentlichen Ordner. Der Compiler wird sicherstellen, dass die Dateien automatisch in dem generierten Paket enthalten.
Wie ich es sehe, es hängt von Ihren Anforderungen ab, aber lasst uns von Anfang an ein sprechendes Beispiel erste ...
Ich finde die Dokumentation (sollte GWT 2.6.0) über dieses falsch oder zumindest unvollständig, verwirrend.Wie ich es sehe (Ich bin kein guru, also bitte korrigieren Sie mich, wenn meine Untersuchungen sind falsch!) Ich freue mich auf die folgenden Beispiel proj Struktur
myproj/
src/my/gwtproj/
client/
img/
foo1.png
AppClientBundle.java
foo2.png
public/
img/
foo3.png
foo4.png
war/
img/foo5.png
foo6.png
.classpath
.project
Vorstellen, dass wir möglicherweise (oder möglicherweise nicht) verweisen müssen diese Ressourcen in manchen AppClientBundle
Schnittstelle (oder andere Anwendung, Referenz-Rahmen):
interfaces AppClientBundle extends ClientBundle {
@Source("img/foo1.png")
ImageResource fooImg();
}
Dann scheint es von Ihren Anforderungen abhängen, z.B.:
- R. a) diese Ressourcen (wie Bilder) verwiesen auf die in den code der Anwendung, z.B.in unserem
AppClientBundle
Schnittstelle über@Source
Anmerkungen - R. b) diese Ressourcen sind gruppiert nach Ordner, z.B.
foo2.png
vs.img/foo1.png
- R. c) diese Ressourcen sollten außerhalb der einige spezifische Anwendungs-URL ein Kontext-Pfad, z.B.wenn verwendet als widget-Bibliothek, z.B.
http://host1/gwtapp1/foo4.png
vs.http://host1/gwtapp2/foo4.png
- R. d) diese Mittel müssen Anwendung-unabhängig (z.B.extern) URL verwiesen wird, z.B.
http://host1/gwtapp1/foo4.png
vs.http://host1/foo6.png
Hier ist, was man tun kann, (Möglichkeiten), und es ist Implikationen im Hinblick auf R.* oben:
- P. 1) (generell wird empfohlen, so wie ich es sehe) bringen Sie schön Ordner-strukturierte Ressourcen unter
my.gwtproj.client
(hier z.B.foo1.png
)- auf diese Weise
@Source("img/foo1.png")...
funktioniert einwandfrei - in der Dokumentation über Sie sprechen, über einige
public
Ordner (in meinem Fallmy.gwtproj.public
), aber schaffen es als Paket in Eclipse nicht mir erlauben, dieses (dapublic
vorbehalten, die ein Java-Schlüsselwort, aber schaffen Sie es über dieNavigator
view funktioniert)- jedoch, auf diese Weise die
@Source
oben funktioniert nicht (wahrscheinlich, weil es ein Problem mit der relativenAppClientBundle
Speicherort im Dateisystem) - dennoch, wenn die Ressource, die öffentlich zugänglich sein sollten unter der Anwendung Kontext kann man haben, tun Sie es über diesen
public
Ordner
- jedoch, auf diese Weise die
- auf diese Weise
- P. 2) setzen "nicht gruppierten" Ressourcen direkt unter
myproj/war
, z.B.projdir/war/foo6.png
- auf diese Weise verwendet werden können/gefunden in Anmerkungen, z.B.
@Source
- und es kann verwiesen werden, die außerhalb der Anwendung selbst, z.B. über
http://host1/foo6.png
- auf diese Weise verwendet werden können/gefunden in Anmerkungen, z.B.
- P. 3) setzen Ordner-strukturierte Ressourcen unter
myproj/war
, z.B.projdir/war/img/foo5.png
- im Gegensatz zu P. 2)
@Source("img/foo5.png")
würde nicht mehr funktionieren
- im Gegensatz zu P. 2)