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