Где я могу разместить статические файлы для приложения 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")
не будет работать больше
- в отличие от п.2)