лучшие практики веб-приложения Java

Я пытаюсь выяснить оптимальный способ разработать и выпустить довольно простое веб-приложение, и я сталкиваюсь с несколькими проблемами. Я обрисую в общих чертах решения, которые я принял, потому что где-нибудь я ясно слетел с катушек.. Чрезвычайно благодарный за любую справку!

Я имею то, что я думаю, довольно простое веб-приложение. Это содержит несколько jsps что ссылка несколько бобов Java, и обычный статический HTML, js, CSS и изображения.

Решение 1), я хотел иметь четкую и чистую процедуру выпуска, такую, что я мог разработать на своей локальной машине и затем выпустить надежно к производственной машине. Я поэтому принял решение упаковать приложение в военный файл (включая все статические ресурсы), минимизировать отдельные остатки, которые я должен буду выпустить.Пока все хорошо?

Решение 2) я хотел, чтобы вещи на моей локальной машине были максимально подобны продуктивной среде. Таким образом в моем HTML, например, у меня может быть ссылка на статический файл, такой как http://static.foo.com/file. Для хранения этого кода, работающего беспрепятственно над dev и напоминанием, я решил поместить static.foo.com в свой/etc/hosts при разработке локально, так, чтобы все URL работали правильно, ничего не изменяя.

Решение 3) я решил использовать затмение и знатока, чтобы дать мне среду лучшей практики для того, чтобы администрировать и разработать мой проект.

Таким образом, у меня есть хороший трудный набор теперь, за исключением того, что:

Каждый раз, когда я хочу изменить что-либо в разработке, как одна строка в файле HTML, я должен восстановить весь проект и затем ожидать кота для загрузки войны, прежде чем я буду видеть, является ли это тем, что я хотел. Таким образом, мои вопросы:

1) Существует ли способ соединить затмение и кота так, чтобы я не восстанавливал войну каждый раз? т.е. кот прямо смотрит на мою фактическую рабочую область для подавания статических файлов?

2) Я думаю, что, возможно, делаю вещи тяжелее при помощи/etc/hosts, чтобы отразить, что производственные URL - являются там лучшим путем, который не включает вручную переключающиеся URL (относительные URL прекрасны, конечно, но где Вы имеете много субдоменов, говорите один для статических файлов и один для динамического, необходимо ли выписать полный путь, конечно?)

3) Эта действительно лучшая практика?? Как люди настраивают вещи так, чтобы они сбалансировали требование для автоматизированного, всеобъемлющего процесса сборки, с одной стороны, и скорость и гибкость, чтобы смочь разработать JavaScript и HTML и CSS быстро, как быстро как будто один просто резкий апач в каталоге и разработанный живой? Что люди находят работами?

Большое спасибо!

Править: Спасибо все для Ваших больших ответов! Если я мог бы отметить их хорошо, я был бы.. Это действительно выручило меня. То, что я слышу, - то, что лучшая практика должна сохранить структуру веб-приложения в разработке и выполнить его в максимально близкой среде к производству. Кажется, что различиями между людьми является степень, до которой люди подготовлены к горячему, развертывают ресурсы в контейнер сервлета, обходя процесс сборки для небольшой дополнительной скорости или удобства. Это имеет смысл. Еще раз спасибо.

5
задан Jeremy 13 May 2010 в 15:56
поделиться

6 ответов

Чтобы ответить на первый вопрос, я бы предложил следующее:

  1. Потратьте некоторое время на изучение maven, чтобы построить свой .war без затмения. С правильным архетипом это не так уж и сложно. Подробнее см. Здесь: http://maven.apache.org/guides/mini/guide-webapp.html
  2. Maven может создавать проекты eclipse либо через mvn eclipse: eclipse , либо через с помощью подключаемого модуля m2
  3. Для развертывания на локальном компьютере и в производственной среде используйте подключаемый модуль maven cargo. http://cargo.codehaus.org/Maven2+plugin и http://blank.jasonwhaley.com/2010/03/automated-deployment-with-cargo-drive.html

Чтобы ответить на вопрос № 2, нет ничего плохого в том, чтобы изменить ваш файл / etc / hosts для имитации производственной среды. Просто получите быстрый скрипт, который позволяет вам добавлять / удалять эти записи и очищать ваш DNS-кеш. Я делаю именно это все время. (не забывайте регулярно очищать кеш в браузере, используя соответствующие настройки).

Чтобы ответить на вопрос № 3) да, именно так вам следует поступать. Каждая сборка должна приводить к созданию единого развертываемого артефакта, который вы можете развернуть в любой из ваших сред за один шаг. Вы должны убедиться, что можете сделать это без вашей IDE и использовать IDE только как инструмент, который поможет вам на этапе разработки.

3
ответ дан 18 December 2019 в 10:42
поделиться

Это очень похоже на то, что я должен делать на работе, хотя мы используем ant (пока?). Кроме того, хотя я использую IDE (или две), я отказываюсь иметь одну как часть моего процесса сборки, КОГДА-ЛИБО. Кто-то должен уметь понимать и настраивать вашу сборку.

4
ответ дан 18 December 2019 в 10:42
поделиться

Вам не нужно восстанавливать файл war, если ваш проект представляет собой динамическое веб-приложение в Eclipse и правильно настроен сервер Tomcat. Следуйте приведенным ниже инструкциям:

1) Посмотрите ниже, как настроить сервер Tomcat с помощью eclipse: http://greatwebguy.com/programming/eclipse/make-eclipse-and-tomcat -play-nice-together /

2) Используйте относительные пути для вашего приложения, но не абсолютные пути.

3) Если вы правильно выполните два вышеуказанных шага, то у вас будет лучшая среда для разработки.

2
ответ дан 18 December 2019 в 10:42
поделиться

Другие уже ответили вам, я просто прокомментирую это (это слишком долго для комментария, поэтому я сделаю это ответом):

Каждый раз, когда я хочу изменить что-либо в процессе разработки, например одну строку в html-файле, мне приходится перестраивать весь проект, а затем ждать tomcat чтобы загрузить войну, прежде чем я смогу увидеть, чего я хотел.

Если вы измените одну строку в html-файле, нет необходимости перестраивать весь проект.

Обратите внимание, что я всегда перестраиваю полный .war и повторно развертываю мой .war , но это занимает менее двух секунд (менее одной секунды, чтобы повторно заархивировать файл. .war [это действительно то, что такое .war, заархивированный файл] и менее одной секунды для его повторного развертывания), потому что:

  • вам не нужно перекомпилировать весь проект, когда вы просто изменяете одну строку в html-файле

То же самое, когда вы изменяете один файл .java : вы можете просто перекомпилировать этот один файл и повторно начать войну.

Я написал свой собственный файл сборки Ant с нуля (здесь нет Maven), и у меня есть несколько целей. Я могу принудительно выполнить «чистую сборку», которая перекомпилирует все, но обычно я просто переупаковываю и повторно развертываю .war

. Вы можете проверить это сами: создайте .war, распакуйте его, скажем, в каталог dir1 , затем измените один .html (или один файл .java / .class) и создайте новый .war и распакуйте этот новый .war, скажем, в dir2 .

Затем сравните dir1 и dir2 : теперь исправьте процесс сборки, чтобы вы могли создать второй .war без необходимости перекомпилировать все.

Изменение одного файла .html, .java, .jsp, .css, .js / любого другого файла и повторное развертывание нового .war должно занять несколько секунд (менее двух секунд, если вы не бросили кухонную раковину в свою Webapp).

Обратите внимание, что в том же проекте другой разработчик предпочитает «горячее развертывание» / замену файлов непосредственно в развернутом веб-приложении (я предпочитаю повторно развертывать .war каждый раз, и потому что моя полная переупаковка / повторное развертывание занимает менее двух секунд. Меня это устраивает).

2
ответ дан 18 December 2019 в 10:42
поделиться

Есть ли способ связать затмение и кота, чтобы мне не приходилось каждый раз перестраивать войну?

1) Я думаю, вы слишком сильно полагаетесь на свою IDE. Обычно у меня есть Ant build.xml, в котором есть несколько задач: одна - это «война сборки», другая - «обновление jsps». Building the war компилирует весь код, упаковывает его, развертывает в Tomcat и все перезапускает. Обновление jsps не перезапускает сервер, это просто прямая копия из моих локальных файлов на развернутый экземпляр Tomcat. Перезагрузка не требуется, поскольку они JSP. Занимает примерно полсекунды.

если у вас много субдоменов, скажем один для статических файлов и один для динамических, вы должны указать полный путь, верно?

2) Ни за что, Хосе. То есть вы имеете в виду, что каждый раз, когда имя сервера меняется, вам нужно перекомпилировать код? Если вам нужна поддержка динамических URL-адресов, возможно, вы захотите укусить пулю и взглянуть на фреймворк, который сделает за вас тяжелую работу. Я неравнодушен к Stripes (который поддерживает динамическое перезапись URL-адресов из коробки) ... есть и другие.

4
ответ дан 18 December 2019 в 10:42
поделиться

во время разработки вы должны настроить eclipse и tomcat так, чтобы не требовалась пересборка/переделка. просто измените html/css/jsp и т.д., сохраните и обновите браузер, чтобы увидеть результат.

но перед развертыванием на рабочем сайте, вы должны сделать чистую полную сборку и тщательно протестировать ее.

домены: они должны быть в конфигурационном файле; dev и prod должны иметь разные конфигурационные файлы.

1
ответ дан 18 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: