Куда мне поместить статические файлы для приложения GWT?военная папка или общедоступная папка?
-
19-09-2019 - |
Вопрос
У меня есть несколько файлов 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")
больше не будет работать
- в отличие от П.2)