Java → Deploying java web application with Apache Tomcat.
Сегодня по просьбе
До появления Servlet API Specification 2.2 было очень много проблем с переносимостью между серверными платформами. Теперь же такой проблемы нет. Все сервера, которые соответствуют данной спецификации (ВСЕ сервлет контейнеры), должны принять веб-приложения в стандартном формате, который мы обсудим ниже.
>>
Веб-приложения должны иметь определенную структуру каталогов, которая может быть реализована в двух видах: “распакованной” группы каталогов и в запакованном – WAR-архив (Web ARchive). Первый вариан используется на стадии разработки, а второй на стадии распространения (деплоя).
Каталог верхнего уровня будет являться коревым для вашего приложения. Тут должны находиться ваши HTML, JSP и др. файлы, которые отвечают за пользовательский интерфейс вашего приложения. Во время развертывания вашего приложения администратор сервера указывает соответствующие параметры в context path. Соответственно говорит серверу, где будет корень вашего приложения.
Создание структуры каталогов
Итак рассмотрим как мы должны расположить файлы нашего приложения, относительно корня:
*.html, *.jsp, и т.д. – в корне находятся файлы, которые должны быть видимы для браузера клиента (JavaScript, css, …). В более крупных проектах, логичнее разделить их на подпапки в зависимости от контента, но для маленьких приложений, такое расположение будет самым правильным.
WEB-INF/web.xml – Deployment Descriptor вашего приложения. Это файл XML формата, который содержит данные о вашем приложении и используется сервером для анализа всех ресурсов, которые используются в приложении.
WEB-INF/classes – испльзуется для хранения всех скомпилированных java классов (сервлетов, ejb и т.д.), а именно тех которые не упакованы в jar архивы. Внутри этого каталога, классы расположены в соответствии со структурой пакетов (например org/myapplication/mymodule/MyServlet.class).
WEB-INF/lib – в этой директории хранятся jar архивы, которые необходимы для приложения (сторонние библиотеки, JDBC-драйвера и т.д.). Во время деплоя вашего приложения на сервер эти библиотеки, так же как и классы из WEB-INF/classes добавляются в classpath.
Deployment Descriptor
web.xml как сказано ранее содержит данные обо всем, что нужно знать серверу о вашем приложении (кроме contex path – задается администратором.). Пример web.xml файла можно
Интеграция с Tomcat
Теперь рассмотрим как настроить сам tomcat для того чтобы ваше приложение заработало. Для этого просто нужно скопировать корень (в указанной выше форме) в папку %TOMCAT_HOME%/webapps.Затем добавить новую запись <Context> в apps.xml. Если этого файла (а должен он находиться в %TOMCAT_HOME%/conf/apps.xml), то его нужно создать. Выгядеть он должен так:
<?xml version="1.0" encoding="ISO-8859-1"?> <webapps> </webapps>
У тега <context> есть следующие атрибуты:
path – это URI при запросе которого, сервер должен обращаться к вашему приложению. Например если вы укажите “/yourapplication”, то при запросе
docBase – это путь до корня вашего приложения. Он может быть относительным (относительно корневой директории самого tomcat – %TOMCAT_HOME%/webapps) или абсолютным (для Windows систем нужно указывать и префикс диска). Этот атрибут необходим.
debug – этот параметр будет указывать tomcat насколько детально (от 0 до 9) нужно логгировать ваше приложение в логах tomcat. По-умолчанию уровень 0.
reloadable – булевское поле, которое указывает нужно или нет tomcat следить за изменениями каталога вашего приложения. Если вы отметите как true, то при первом изменении tomcat будет перезагружаться. Эта функция конечно не используется в уже развернутом приложении и создана для удобной отладки/разработки.
trusted – так же булевское поле, разрешает/запрещает доступ к внутренним библиотекам самого tomcat (Например если вы используете авторизацию через tomcat-role).
Конечно развертывание очень специфично для каждого сервлет-контейнера, но на стороннем хостинге вам не придется над этим задумываться. Единственное требование, которое будет к вам предъявляться – это соответствие используемой ими спецификации Servlet API.
- +4
- sidney3172
- 13 декабря 2009, 22:25
Спасибо.