Où dois-je placer des fichiers statiques pour l'application GWT? dossier de guerre ou d'un dossier public?

StackOverflow https://stackoverflow.com/questions/1502166

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?

Était-ce utile?

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 contre img/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 contre http://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 contre http://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 exemple foo1.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 cas my.gwtproj.public), mais la création comme un paquet dans Eclipse ne me permet pas cette (depuis public est réservé Java mot clé , mais la création via les œuvres de vue Navigator)
      • 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 fichiers AppClientBundle relatif)
      • néanmoins si la ressource doit être rendue publique dans le contexte d'application, on peut avoir à le faire via ce dossier public
  • P.2) mettre les ressources "dissociées" directement sous myproj/war , par exemple projdir/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
  • P.3) mettre les ressources de dossiers structurés sous myproj/war , par exemple projdir/war/img/foo5.png
    • contrairement à P.2) @Source("img/foo5.png") ne fonctionne plus
scroll top