Вопрос о наилучшей практике в каталоге приложений Java EE

#java #web-applications #netbeans

#java #веб-приложения #netbeans

Вопрос:

Я относительно новичок в Java EE и только что познакомился с традиционной структурой каталогов приложений (которая включает в себя папки BUILD, DIST, NBPROJECT, SRC и WEB). Мне было интересно: если моему приложению требуется использовать некоторые ресурсы / assets (такие как изображения или PDF-файлы) на сервере, в какую из 5 папок, перечисленных выше, мне следует разместить эти ресурсы? Я думаю, что технически я могу разместить их где угодно, если я правильно ссылаюсь на файлы, но не уверен, какова общая наилучшая практика для этого.

Ответ №1:

Обычно вы включаете статический контент, например, изображения или PDF-файлы, которые должны быть прочитаны http-запросами в WebContent, например, если my-web является вашим проектом WAR:

 my-web/WebContent/images
my-web/WebContent/scripts
my-web/WebContent/misc
  

Это означает, что вы можете получить доступ, используя, например:

 /my-web/images/bob.jpg
/my-web/scripts/bob.js
/my-web/misc/bob.pdf
  

Хранение файлов здесь обеспечивает общедоступный доступ. Я процитирую это со страниц справки Eclipse:

Папка веб-содержимого представляет содержимое файла WAR, который будет развернут на сервере. Любые файлы, не находящиеся в папке Web content, считаются ресурсами времени разработки (например, .java-файлы, .sql-файлы и .mif-файлы) и не развертываются при модульном тестировании или публикации проекта.

Комментарии:

1. Я использую Netbeans и не вижу папки WebContent. Нужно ли мне его создавать?? Все, что я вижу внутри веб-каталога, — это META-INF, WEB-INF и index.jsp

2. Я не пользователь NetBeans. Но я полагаю, что вы добавляете папки и статическое содержимое в папку Web Pages. Итак, у вас может быть MyWebProject / WEB-INF. Добавьте ваши файлы в MyWebProject / изображения, MyWebProject / скрипты, MyWebProject / разное. NetBeans может отображать папку с именем «Веб-страницы», поэтому поместите туда свои папки и содержимое.

3. Попался! Спасибо.. Из любопытства только что понял, что внутри каталогов DIST и WEB содержимое, которое в настоящее время находится там, идентично. В чем причина этого?

4. Я не уверен на 100% — является ли каталог DIST именно тем местом, куда копируются выходные файлы (таким образом, WEB содержит master, а DIST — это просто копия). Может быть, вы могли бы взглянуть на файловую систему, чтобы разобраться в этом.

Ответ №2:

Вам нужно подумать о том, как активы доставляются клиенту, прежде чем решать, куда их поместить. Такие ресурсы, как ccs и статические html-страницы, извлекаются клиентом с помощью отдельных HTTP-вызовов, поэтому они должны находиться в доступном месте. В вашем случае я бы сказал, что они должны быть на уровне index.jsp или в подкаталогах на этом уровне. Если вы поместите их в WEB-INF, они будут недоступны из внешнего мира. Возможно, вы могли бы поместить их в META-INF, но это было бы необычным использованием этого каталога.