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

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

Вопрос

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

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

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

Это было полезно?

Решение

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

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

www.example.com/mymodule/index.html

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

www.example.com/index.html

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

Другие советы

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

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

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

Я нахожу, что Документация (должно быть GWT 2.6.0) о том, что это неверно или, по крайней мере, неполно / сбивает с толку.Как я это вижу (Я не гуру, поэтому, пожалуйста, поправьте меня, если мои исследования неверны!) Я смотрю на следующее пример структуры проекта

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 аннотации
  • Р.б) эти ресурсы должны быть сгруппированные по папкам, например 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.* выше:

  • П.1) (обычно рекомендуется, как я это вижу) положите красиво ресурсы, структурированные по папкам, находятся в my.gwtproj.client (здесь, например foo1.png)
    • вот так @Source("img/foo1.png")... работает нормально
    • в приведенных выше документах они говорят о некоторых public папка (в моем случае my.gwtproj.public), но создание его как пакета в Eclipse не позволяет мне этого (поскольку public является зарезервированным ключевым словом Java, но создавая его с помощью Navigator посмотреть работы)
      • однако, таким образом, @Source вышесказанное не работает (вероятно, потому, что это проблема с относительным AppClientBundle расположение файловой системы)
      • тем не менее, если ресурс должен быть общедоступным в контексте приложения, возможно, придется сделать это с помощью этого public папка
  • П.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") больше не будет работать
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top