Где я могу разместить статические файлы для приложения GWT? Военная папка или общая папка? - PullRequest
15 голосов
/ 01 октября 2009

У меня есть несколько файлов JavaScript, основной файл HTML, основной файл CSS и некоторые файлы CSS, которые импортируются в основной файл.

Я понимаю, что могу разместить статические файлы в двух местах: а) в папке 'war'; или б) общедоступная папка.

Где лучше всего разместить мои статические файлы? Эти два местоположения рассматриваются по-разному? Есть ли «лучшие практики» по этому вопросу?

Ответы [ 3 ]

18 голосов
/ 01 октября 2009

Разница между этими двумя местоположениями заключается в том, что файлы в общих папках копируются компилятором gwt в папку «ваш модуль» в папке «война». Это означает, что если вы развернете «войну» (например, через плагин Google в приложении Google), файлы из папки «public» не будут на верхнем уровне.

Например, если у вас есть файл index.html в папке public с модулем gwt с именем «mymodule», и вы развернули его на www.example.com, он выглядит следующим образом, вам нужно получить к нему доступ через: *

www.example.com/mymodule/index.html

Если у вас есть файл index.html в папке 'war', вы получите:

www.example.com/index.html

Подведение итогов. Ваша целевая страница должна быть в папке «война». Файлы ресурсов, используемые целевой страницей, также могут храниться здесь (CSS, изображения). Любой другой файл ресурсов, на который ссылается любой файл модуля gwt (или код, например изображения), должен храниться в «публичной» папке, связанной с модулем gwt.

6 голосов
/ 01 октября 2009

Новый способ работы в GWT - использование папки war.

Но, если вы проектируете библиотеку виджетов многократного использования, которая используется в приложении GWT, вам следует поместить ресурсы в общую папку. Компилятор позаботится о том, чтобы файлы автоматически включались в сгенерированный пакет.

4 голосов
/ 25 марта 2014

На мой взгляд, это зависит от ваших требований, но давайте сначала начнем с разговорного примера ...

Я нахожу документацию (должна быть GWT 2.6.0) об этом неверной или, по крайней мере, неполной / сбивающей с толку. Как я вижу ( Я не гуру, поэтому, пожалуйста, исправьте меня, если мои исследования неверны! ) Я смотрю на следующую примерную структуру 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

Представьте, что мы можем (или не можем) ссылаться на такие ресурсы в каком-то AppClientBundle интерфейсе (или другом контексте приложения):

interfaces AppClientBundle extends ClientBundle {

  @Source("img/foo1.png")
  ImageResource fooImg();
}

Тогда, похоже, зависит от ваших требований , например ::

  • R.a) эти ресурсы (например, изображения) упоминаются в коде приложения , например, в нашем AppClientBundle интерфейсе через @Source аннотации
  • R.b) эти ресурсы должны быть сгруппированы по папкам , например foo2.png против img/foo1.png
  • R.c) эти ресурсы должны быть доступны вне некоторого определенного контекста URL-адреса приложения, например, если используется как библиотека виджетов, например http://host1/gwtapp1/foo4.png против http://host1/gwtapp2/foo4.png
  • R.d) эти ресурсы должны быть независимыми от приложения (например, внешними) с URL-ссылкой, например, http://host1/gwtapp1/foo4.png против http://host1/foo6.png

Вот что можно сделать ( Возможности ) и его последствия в отношении R. * выше:

  • P.1) ( обычно рекомендуется, как я вижу это ) положите красиво ресурсы со структурой папок в my.gwtproj.client (здесь, например, foo1.png)
    • таким образом @Source("img/foo1.png")... отлично работает
    • в приведенных выше документах говорится о некоторой папке public (в моем случае my.gwtproj.public), но создание ее в Eclipse как пакета не позволяет этого (так как public является зарезервированным ключевым словом Java , но его создание в представлении Navigator работает)
      • однако, таким образом, @Source выше не работает (вероятно, потому что это проблема с относительным AppClientBundle расположением файловой системы)
      • тем не менее, если ресурс должен быть общедоступным в контексте приложения, может потребоваться сделать это через эту папку public
  • P.2) положить "несгруппированные" ресурсы непосредственно под myproj/war, например, projdir/war/foo6.png
    • таким образом, его можно использовать / находить в аннотациях, например, @Source
    • и на него можно ссылаться вне самого приложения через, например, http://host1/foo6.png
  • стр.3) положить ресурсы со структурой папок в myproj/war, например, projdir/war/img/foo5.png
    • в отличие от п.2) @Source("img/foo5.png") больше не будет работать
...