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?

War es hilfreich?

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 Fall my.gwtproj.public), aber schaffen es als Paket in Eclipse nicht mir erlauben, dieses (da public vorbehalten, die ein Java-Schlüsselwort, aber schaffen Sie es über die Navigator view funktioniert)
      • jedoch, auf diese Weise die @Source oben funktioniert nicht (wahrscheinlich, weil es ein Problem mit der relativen AppClientBundle 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
  • 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
  • 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top