Où dois-je placer des fichiers statiques pour l'application GWT? dossier de guerre ou d'un dossier public?
-
19-09-2019 - |
Question
J'ai des fichiers JavaScript, un fichier HTML principal, un fichier CSS principal, et certains fichiers CSS qui s'importés dans le principal.
Je comprends que je peux mettre des fichiers statiques en deux endroits: a) le dossier de la « guerre »; ou b) le dossier 'public'.
Quel est le meilleur endroit pour mettre mes fichiers statiques? Sont les deux endroits traités différemment? Y at-il une « meilleure pratique » sur cette question?
La solution
La différence entre les 2 emplacements est que les fichiers dans les dossiers publics sont copiés par le compilateur GWT dans le dossier de votre module 'dans le dossier de la « guerre ». Ceci est moyen si vous déployez la « guerre » (par exemple via le plug-in Google AppEngine à google) les fichiers du dossier « public » ne sont pas au premier niveau.
Par exemple, si vous avez un index.html dans le dossier « public » avec module GWT nommé « mymodule » et vous déployez à www.example.com il se présente comme suit, vous devez accéder via:
www.example.com/mymodule/index.html
Si vous avez le index.html dans le dossier « de guerre », vous obtenez:
www.example.com/index.html
Résumer. Votre page d'atterrissage doit être dans le dossier « de guerre ». Les fichiers de ressources utilisés par la page de destination peuvent également être stockés ici (css, images). Tout autre fichier de ressources qui est fait référence dans un fichier de module GWT (ou code, comme des images) doivent être stockés dans le dossier « public » lié au module GWT.
Autres conseils
La nouvelle façon de travailler dans GWT est d'utiliser le dossier de la guerre.
Mais, si votre projet est une bibliothèque de widgets réutilisable qui est utilisé dans une application GWT alors vous devriez mettre les ressources dans le dossier public. Le compilateur fera en sorte que les fichiers sont automatiquement inclus dans le package généré.
Comme je le vois, cela dépend de vos besoins, mais commençons par un exemple parlant d'abord ...
Je trouve la documentation rel="nofollow"> (devrait être GWT 2.6.0) à ce sujet est incorrect ou incomplet au moins / confusion. Comme je le vois ( Je ne suis pas un gourou donc s'il vous plaît me corriger si mes enquêtes ont tort! ) Je suis à la recherche à l'adresse suivante Exemple de structure proj
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
Imaginez que nous pouvons (ou non) doivent faire référence à ces ressources dans une interface AppClientBundle
(ou un autre contexte de référence de l'application):
interfaces AppClientBundle extends ClientBundle {
@Source("img/foo1.png")
ImageResource fooImg();
}
Ensuite, il semble dépend de vos besoins , par exemple:.
- R.Un) ces ressources (comme les images) sont refered dans le code d'application , par exemple dans notre interface
AppClientBundle
via des annotations@Source
- R.b) ces ressources doivent être regroupés par dossiers , par exemple
foo2.png
contreimg/foo1.png
- R.C) ces ressources devraient être disponibles en dehors d'un chemin de contexte d'URL de l'application spécifique, par exemple si elle est utilisée en tant que bibliothèque de widgets, par exemple
http://host1/gwtapp1/foo4.png
contrehttp://host1/gwtapp2/foo4.png
- R.d) ces ressources doivent être application indépendamment (par exemple en externe) référencé URL, par exemple
http://host1/gwtapp1/foo4.png
contrehttp://host1/foo6.png
Voici ce que l'on peut faire ( Possibilités ) et ses implications en ce qui concerne R * ci-dessus.
- P.1) ( généralement recommandé que je vois ) mettre bien dossier structuré ressources sous
my.gwtproj.client
(ici par exemplefoo1.png
)- cette
@Source("img/foo1.png")...
façon fonctionne très bien - dans les documents ci-dessus, ils Speek sur certains dossier
public
(dans mon casmy.gwtproj.public
), mais la création comme un paquet dans Eclipse ne me permet pas cette (depuispublic
est réservé Java mot clé , mais la création via les œuvres de vueNavigator
)- cependant, de cette façon le
@Source
précédent ne fonctionne pas (probablement parce qu'il est un problème avec l'emplacement du système de fichiersAppClientBundle
relatif) - néanmoins si la ressource doit être rendue publique dans le contexte d'application, on peut avoir à le faire via ce dossier
public
- cependant, de cette façon le
- cette
- P.2) mettre les ressources "dissociées" directement sous
myproj/war
, par exempleprojdir/war/foo6.png
- cette façon, il peut être utilisé / trouvé dans les annotations, par exemple
@Source
- et il peut être référencé en dehors de l'application elle-même par exemple
http://host1/foo6.png
- cette façon, il peut être utilisé / trouvé dans les annotations, par exemple
- P.3) mettre les ressources de dossiers structurés sous
myproj/war
, par exempleprojdir/war/img/foo5.png
- contrairement à P.2)
@Source("img/foo5.png")
ne fonctionne plus
- contrairement à P.2)