Где я ставил статические файлы для приложения GWT? военная папка или общая папка?
У меня есть некоторые файлы JavaScript, основной файл HTML, основной файл CSS и некоторые файлы CSS, которые импортируются в основной.
Я понимаю, что могу ставить статические файлы в двух местах: a) в папку "war"; или b) "общедоступная" папка.
Где лучшее место для размещения моих статических файлов? Связаны ли эти два места по-разному? Есть ли "лучшая практика" по этой проблеме?
Ответы
Ответ 1
Разница между двумя местоположениями заключается в том, что файлы в общих папках копируются компилятором gwt в папку "ваш модуль" в папке "war". Это означает, что если вы разворачиваете "войну" (например, через плагин google для Google appengine), файлы из "общедоступной" папки не находятся в верхнем уровне.
Например, если у вас есть index.html в "общедоступной" папке с модулем gwt с именем "mymodule", и вы развертываете его на www.example.com, это выглядит следующим образом: вам нужно получить доступ к нему через:
www.example.com/mymodule/index.html
Если у вас есть index.html в папке "war", вы получаете:
www.example.com/index.html
Подведение итогов. Ваша целевая страница должна находиться в папке "война". Файлы ресурсов, используемые целевой страницей, также могут храниться здесь (css, images). Любой другой файл ресурсов, который упоминается в любом файле модуля gwt (или код, например изображения), должен храниться в папке "public", связанной с модулем gwt.
Ответ 2
Новый способ работы в GWT - использовать военную папку.
Но если вы проектируете библиотеку многократного использования виджета, которая используется в приложении GWT, вы должны поместить ресурсы в общую папку. Компилятор будет следить за тем, чтобы файлы автоматически включались в сгенерированный пакет.
Ответ 3
Как я вижу, это зависит от ваших требований, но пусть сначала начнется с выступления...
Я нахожу документацию (должен быть 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
vs. 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
) strong > 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
- в отличие от P.2)
@Source("img/foo5.png")
больше не будет работать