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

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

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

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

3 ответа

Решение

Разница между этими двумя местоположениями заключается в том, что файлы в общих папках копируются компилятором 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.

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

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

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

Я считаю документацию (должна быть 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();
}

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

  • Ra) эти ресурсы (например, изображения) упоминаются в коде приложения, например, в нашем AppClientBundle интерфейс через @Source аннотации
  • Rb) эти ресурсы должны быть сгруппированы по папкам, например foo2.png против img/foo1.png
  • Rc) эти ресурсы должны быть доступны за пределами определенного пути контекста URL конкретного приложения, например, если они используются в качестве библиотеки виджетов, например http://host1/gwtapp1/foo4.png против http://host1/gwtapp2/foo4.png
  • Rd) эти ресурсы должны быть независимыми от приложения (например, внешними) с 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
  • P.3) поместить ресурсы с папками myproj/war например, projdir/war/img/foo5.png
    • в отличие от п.2) @Source("img/foo5.png") не будет работать больше
Другие вопросы по тегам