Установка Apache Tomcat в ОС Windows. Устанавливаем Tomcat под Windows

Инструмент 15.06.2019
Инструмент

Следующий шаг после установки Tomcat - выбрать базовые настройки. Этот процесс разбит на два этапа, которые детально описаны в этой статье. Первый - редактирование файлов настроек XML , второй - выбор соответствующих переменных для среды.

Файлы настроек XML

Два самых важных файла настроек, чтобы запустить Tomcat, называются.xml и web.xml. По умолчанию они размещены в TOMCAT-HOME/conf/server.xml и TOMCAT-HOME/conf/web.xml, соответственно.

Не выполняйте одни и те же настройки дважды. Try Tcat - профили сервера, которые позволяют сохранять общие настройки и применять их к нескольким экземплярам Tomcat в один клик.

SERVER.XML

Файл server.xml - главный файл настроек Tomcat. Элементы server.xml относятся к пяти базовым категориям:

  • Элементы верхнего уровня (Top Level Elements)
  • Соединители или коннекторы (Connectors)
  • Контейнеры (Containers)
  • Встраиваемые компоненты (Nested Components)
  • Глобальные настройки (Global Settings)

У всех элементов из этих категорий имеется множество атрибутов, которые позволяют точно определить функциональные возможности. Чаще всего если необходимо внести какие-то существенные изменения в установку Tomcat, как, например, изменить число портов, приходится редактировать файл server.xml.

На сайте Apache’s Tomcat Documentation содержится достаточно информации, но нет некоторых сведений о настройках элементов. В этой статье все это освещено.

Элементы верхнего уровня

Server (сервер)

Этот элемент определяет отдельный сервер Tomcat и содержит элементы конфигурации Logger и ContextManager. К тому же, элемент Server поддерживает атрибуты “port”, “shutdown” и “className”. Атрибут порт используется для того, чтобы уточнить, через какой порт должны выполняться команды shutdown (отключения). Атрибут shutdown задает командную строку для отдельного порта, чтобы спровоцировать отключение. Атрибут className - реализацию класса Java, которая должна использоваться.

Service (сервис)

Это элемент, который можно поместить в элемент Server; он содержит один или несколько компонентов Connector, у которых один общий компонент Engine. Главная функция этого компонента - задать эти компоненты как один сервис. Название сервиса, который будет появляться в логах, определяется с помощью атрибута “name” (элемент Service).

Connectors (соединители)

Размещая один или несколько соединителей (connector) в теге Service, вы тем самым позволяете системе перенаправить запросы из этих портов в один компонент Engine для обработки. Tomcat позволяет определить соединители HTTP и AJP.

HTTP- соединитель

Этот элемент представляет HTTP/1.1 Connector и обеспечивает Catalina автономным функционалом веб-сервера. Это означает, что в дополнение к выполнению сервелатов и JSP -страниц, Catalina способен прослушивать специфические TCP-порты для запросов. Настраивая HTTP-коннекторы, обращайте внимание на атрибуты “minSpareThreads”, “maxThreads” и “acceptCount”.

Атрибут “maxThreads” особенно важен. Он контролирует максимальное число тредов, которые можно создать для управления запросами. Если будет установлено слишком малое значение, запросы будут застревать в серверном сокете, что может спровоцировать отказ в соединении. Эта проблема устраняется во время тестирования.

AJP-соединитель

Данный элемент является соединителем, который обеспечивает связь с протоколом AJP. Главная роль элемента в том, чтобы помочь Tomcat работать в связке с Apache.

Контейнеры

С помощью этих элементов Catalina направляет запросы в корректный обрабатывающий аппарат.

Context

Этот элемент представляет определенное веб-приложение и содержит данные о пути, по которому определяются запросы для соответствующих ресурсов приложения. Catalina получает запрос и пытается сопоставить самый длинный URI с контекстным путем определенного элемента Context до тех пор, пока не найдется корректный элемент, который бы обслуживал запрос.

У элемента Context может быть максимум один встроенный экземпляр на один элемент из вспомогательных элементов Loader, Manager , Realm, Resources и WatchedResource.

Хотя Tomcat позволяет определять элементы Context в “TOMCAT-HOME/conf/server.xml”, этого лучше избегать, поскольку эти главные настройки нельзя перезагрузить без перезагрузки Tomcat.

Engine

Этот элемент используется в связке с одним или несколькими соединителями, которые размещены в элементе Service. Элемент Engine может использоваться только в случае если он размещен в элементе Service, и только один элемент Engine разрешен в элементе Service. Обращайте внимание на атрибут “defaultHost”, который задает элемент Host.

Последний отвечает за обслуживание запросов для названий хостов на сервере, которые не настраиваются в server.xml. Название этого атрибута должно совпадать с названием одного из элементов Host, которые размещены в элементе Engine. Также важно выбрать уникальное, логичное название для каждого из элементов Engine, используя атрибут “name”. Если один элемент Server в вашем файле server.xml включает несколько элементов Service, потребуется выбрать уникальное название для каждого элемента Engine.

Host

Элемент, который размещен в элементе Engine, и используется, чтобы связать названия серверной сети с серверами Catalina . Этот элемент будет функционировать должным образом только если виртуальный хост был зарегистрирован в системе DNS соответствующего домена. Одна из самых полезных особенностей элемента Host - возможность содержать элементы Alias, использующиеся для того, чтобы определить названия нескольких сетей.

Cluster

Nested Components

Эти элементы размещаются внутри

элементов container, чтобы задать дополнительные функциональные возможности.

Listeners

Эти элементы можно поместить внутрь элементов Server, Engine, Host или Context. Они указывают на компонент, который производит определенное действие при специфическом событии.

У большинства компонентов есть атрибуты className, чтобы выбрать разные реализации элемента. Существует ряд дополнительных реализаций Listener, не только дефолтных. Все эти реализации требуют, чтобы элемент Listener размещался в определенном элементе Server.

И крайне важно настроить этот атрибут корректно. Доступные на текущий момент реализации содержатся в APR Lifecycle Listener, Jasper Listener, Server Lifecyle Listener, Global Resources Lifecyle Listener, JMX Remote Lifecycle Listener и в JRE Memory Leak Prevention Listener.

Global Naming Resources

Этот элемент используется, чтобы определить ресурсы Java Naming and Directory Interface для специфического Server, отличного от любых контекстов веб-приложения JNDI. Если нужно, вы можете задать характеристики JNDI resource lookup для и в данном элементе, определив их и связав с помощью .

Результаты этого метода эквивалентны добавлению элементов в файл приложения “/WEB-INF/web.xml”. Если используете эту технику, проверьте, что вы определили дополнительные параметры, которые необходимы, чтобы задать и настроить объект-фабрику и свойства.

Realm

Этот элемент размещается в любом элементе Container и задает базу данных, содержащую имена пользователей, пароли и роли для Container. При размещении внутри элемента Host или Engine, характеристики, заданные в элементе Realm, передаются всем контейнерам нижнего уровня по умолчанию.

Важно корректно установить атрибут “className” этого элемента, поскольку существует множество реализаций. Эти реализации используются, чтобы сделать доступным Catalina другим системам управления безопасностью пользователей (например, JDBC , JNDI или DataSource).

Resources

У этого элемента только одно предназначение - направить Catalina в статические ресурсы, которые используются вашими веб-приложениями. Эти ресурсы включают классы, HTML и JSP файлы. Использование этого элемента предоставляет Catalina доступ к файлам, содержащимся в других местах, помимо файловой системы (filesystem), таким как ресурсы, которые содержатся в архивах WAR или базах данных JDBC.

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

Valve

Компоненты Valve размещаются внутри элементов Engine, Host и Context, с их помощью добавляются специальные функциональные возможности в конвейер, обрабатывающий запросы. Это очень разносторонний элемент. Существует множество различных типов элементов Valve - от аутентификаторов до фильтров и исправлений ошибок WebDAV. Многие из этих типов Valve размещаются только внутри специальных элементов.

Web.XML

Файл web.xml содержит информацию, которая используется для конфигурации компонентов ваших веб-приложений. Задавая конфигурацию Tomcat в первый раз, вы можете задать servlet-mapping для центральных компонентов, таких как JSP. В Tomcat этот файл функционирует так же, как описано в спецификации Servlet.

Единственное отличие в том, как Tomcat обрабатывает этот файл: есть опция задать с помощью TOMCAT-HOME/conf/web.xml значения по умолчанию для всех контекстов. Если используется такой метод, базовой конфигурацией будет служить TOMCAT-HOME/conf/web.xml, который может переписать специфические для приложения файлы WEB-INF/web.xml.

Другие важные файлы конфигурации

Есть и другие важные файлы. Список ролей, пользователей и паролей, которые UserDatabaseRealm использует для аутентификации, их можно найти в tomcat-users.xml. Если нужен доступ к другим административным инструментам, которые присутствуют в Tomcat, вы можете отредактировать файл и добавить доступ администратора и менеджера.

Стандартные настройки контекста вашей установки Tomcat могут быть изменены в файле context.xml. Файл catalina.policy, который заменяет файл java.policy (с избранным JDK), содержит настройки разрешения для элементов Tomcat. Вы можете редактировать этот файл вручную или же с помощью policytool.

Переменные среды

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

JAVA_OPTS

С помощью этой переменной изменяется размер heap size of the JVM . Установить соответствующие значения для этой переменной крайне важно при размещении нового приложения, которому может понадобиться определенный размер динамической памяти для корректной работы. Подобрав соответствующие значения для этих настроек, вы сможете уменьшить число OOME-сообщений.

CATALINA_HOME

Эта переменная задает место установки Tomcat. Скрипты автозапуска в Tomcat будут пытаться определить значение этой переменной, но лучше просто установить корректное значение, чтобы избежать сложностей.

CATALINA_OPTS

Переменная, которая используется для установки различных специфических опций в Tomcat.

Проект, который реализует спецификацию контейнера сервлетов и спецификацию JavaServer Pages (JSP). Используется в качестве самостоятельного сервера веб-приложений, в качестве сервера контента в связке с веб-сервером Apache, а также в качестве контейнера сервлетов в серверах приложений JBoss и GlassFish.
В лабораторной работе предполагается установка и настройка Tomcat в качестве сервера веб-приложений под управлением ОС OpenSuSE 12.2.

Цель работы: Установить и произвести базовую настройку Apache Tomcat в качестве сервера веб-приложений.

Задания к работе

  1. Установить Java-окружение из пакета OpenJDK.
  2. Установить Tomcat.
  3. Запустить Tomcat и проверить его работу по адресу http://localhost:8080.
  4. Написать JSP-страницу test.jsp, выводящую произвольную строку.
  5. Написать сервлет test, выводящий произвольную строку.
  6. Написать стартовую страницу index.html, содержащую ссылки на страницу test.jsp и сервлет test.

Установка Java и Tomcat

1. Установка Java Development Kit (JDK)

Для работы Tomcat требуется установленное окружение для разработки Java-приложений (Java Development Kit, JDK). Проверить, какая версия установлена в системе можно, например, так:

Aag@stilo:~> zypper se java | grep "runtime" -i // фильтрация избыточной информации i | java-1_7_0-openjdk | Java runtime environment based on OpenJDK 7 and IcedTea 7 | пакет | java-1_7_0-openjdk | Java runtime environment based on OpenJDK 7 and IcedTea 7 | пакет с исходным кодом

В приведенном примере в системе установлена (символ i (nstalled)) версия 1.7 OpenJDK - свободного комплекта разработки, полностью совместимого с Sun (Oracle) JDK.

Если ни один из доступных пакетов не установлен, то его следует установить:

Aag@stilo:~> zypper in java-1_7_0-openjdk* .... // процесс установки

Проверить результаты установки можно так, как было указано выше.

Узнать путь, где размещается среда исполнения Java можно из переменной окружения $JAVA_HOME:

Aag@stilo:~> echo $JAVA_HOME /usr/lib64/jvm/jre

А узнать номер установленной (и используемой) версии JDK можно так:

Aag@stilo:~> java -version java version "1.7.0_09" OpenJDK Runtime Environment (IcedTea7 2.3.3) (suse-3.16.1-x86_64) OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)

2. Установка Tomcat

Установка Tomcat и связанных с ним пакетов из репозитария производится обычным образом:

Aag@stilo:~> zypper in tomcat* Чтение установленных пакетов... // aag: список сокращен и может отличаться от приведенного Будут установлены следующие НОВЫЕ пакеты: jakarta-commons-dbcp-tomcat jakarta-commons-pool-tomcat5 tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-servlet-3_0-api tomcat-webapps ... Полный размер загрузки: 7,2 M. После операции будет использовано дополнительно 43,6 M. Продолжить? [да/нет]:

После подтверждения, необходимые пакеты будут загружены и установлены. При этом, в системе будут созданы следующие подкаталоги (дефолтная установка в OpenSuSE 12.2, фактическое размещение зависит от дистрибутива и версии ОС и версии самого Tomcat):

  • /usr/share/tomcat/bin: управляющие скрипты;
  • /etc/tomcat/conf: конфигурационные файлы (server.xml, web.xml, context.xml, tomcat-users.xml);
  • /usr/share/java/tomcat/lib: jar-файлы, используемые всеми расширениями Tomcat и веб-приложениями;
  • /var/log/tomcat: log-файлы;
  • /srv/tomcat/webapps: каталог, содержащий веб-приложения (сервлеты и JSP);
  • /var/cache/tomcat/work: рабочий каталог Tomcat, который используется, в первую очередь, при преобразовании JSP-страниц в сервлеты;
  • /var/cache/tomcat/temp: временные файлы.

В каталоге /usr/share/tomcat будут, также, размещены симлинки на указанные каталоги. Путь к основному каталогу Tomcat можно записать в переменную окружения $CATALINA_HOME (export CATALINA_HOME="/usr/share/tomcat/").

3. Запуск и остановка сервера

Если установка прошла успешно, то можно попробовать запустить Tomcat:

Aag@stylo:~> $CATALINA_HOME/bin/catalina.sh start

Скрипт catalina.sh используется для ручного запуска и остановки сервера Tomcat. Для автоматического запуска можно использовать скрипт service (service tomcat start|stop|restart), предварительно следует указать уровни запуска, на которых будет стартовать демон tomcat (см. chkconfig)

Catalina - название компонента Tomcat, реализующего непосредственно функции контейнера сервлетов. Это название использовалось в ранних версиях (до Tomcat5) для всего продукта. Другими компонентами в составе системы являются Coyote, который осуществляющий поддержку транспорта по протоколу HTTP 1.1 и Jasper, предназначенный для обработки JSP (анализа JSP-файлов и компиляции их в Java-код, который затем передается для обработки с помощью Catalina).

Работающий сервер веб-приложений будет ожидать входящие подключения на порт 8080. Это можно проверить, если в адресной строке браузера набрать http://localhost:8080 (рис. 1).

Рис. 1. Дефолтная стартовая страница сервера Apache Tomcat

Остановить Tomcat, запущенный вручную, можно так:

Aag@stylo:~> $CATALINA_HOME/bin/catalina.sh stop

Настройка сервера Tomcat

Для настройки сервера Tomcat используются следующие конфигурационные XML-файлы , размещенные в каталоге $CATALINA_HOME/conf/:

  • server.xml: Общие настройки сервера (порты, виртуальные хосты и проч.).
  • web.xml: Параметры, общие для ВСЕХ веб-приложений на текущем сервере. Настройки отдельных веб-приложений задаются в их собственных файлах /WEB-INF/web.xml (здесь можно провести аналогию с использованием файла.htaccess в Apache).
  • context.xml: Общие настройки управления контентом.
  • tomcat-users.xml: Список пользователей и групп (ролей).

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

conf/server.xml - Изменение номера порта

По умолчанию Tomcat использует для приема входящих подключений TCP-порт 8080, а также порты 8009 и 8005:

Aag@stilo:~> netstat -tuaev --numeric-ports | grep tomcat tcp 0 0 localhost:8005 *:* LISTEN tomcat 20539 tcp 0 0 *:8009 *:* LISTEN tomcat 20533 tcp 0 0 *:8080 *:* LISTEN tomcat 20524

Эти порты могут быть изменены на другие, не используемые другими сетевыми сервисами, путем их изменения в файле conf/server.xml. Чтобы, например, заставить Tomcat работать на порту 8081, нужно найти в файле conf/server.xml указанную ниже строку и поменять значение атрибута port на требуемое (8081), затем перезапустить сервер:

... ...

Для developer-сервера можно использовать любой непривилегированный порт. Для production-сервера стоит использовать порт 80, который является стандартным для HTTP-серверов.

conf/web.xml - Включение листинга каталогов

Для установки отображения списка файлов в каталогах (листинга), нужно поменять значение атрибута listings с ложного (false) на истинное (true) в блоке настроек сервлета по умолчанию ("default"-servlet) в файле conf/web.xml. Это бывает полезным при разработке и отладке веб-приложений, но не рекомендуется использовать на production-сервере по соображениям безопасности.

... default org.apache.catalina.servlets.DefaultServlet debug 0 listings true 1 ...

conf/context.xml - Установка автоматической перезагрузки страниц

Имеется возможность заставить Tomcat выполнять автоматическую перезагрузку после изменения кода. Нужно добавить атрибут reloadable со значением "true" в элемент файла conf/context.xml. Это весьма полезно в процессе разработки и отладки сервлетов, но, опять же, не рекомендуется в готовом продукте.

reloadable="true" > ...

conf/tomcat-users.xml - Управление пользователями и ролями

Для управления пользователями, которые могут управлять сервером Tomcat, предназначен файл conf/tomcat-users.xml. Чтобы создать, например, пользователя manager, который сможет управлять веб-приложениями через графическую оболочку (предопределенная роль manager-gui), нужно добавить в этот файл запись вида:

Разработка и распространение веб-приложений под управлением Tomcat

Рассмотрим несколько примеров использования Tomcat для разработки веб-приложений на Java . Здесь мы не будем акцентировать внимание на коды программ как таковые, поскольку этому посвящена отдельная дисциплина — «Объектно-ориентированное программирование на языке Java ».

Создание структуры каталогов и размещение веб-страниц

Все веб-приложения размещаются в каталоге webapps (/srv/tomcat/webapps). Каждое приложение размещается в собственном, одноименном, каталоге с определенной вложенной структурой (webapps/youappname/WEB-INF/classes). Для нового веб-приложения (например, myapp) эту структуру можно создать, например, так:

// WEB-INF - предопределенное и регистрозависимое имя каталога aag@stilo:~> sudo mkdir -p /srv/tomcat/webapps/myapp/WEB-INF/classes

Назначение созданных каталогов следующее:

  • myapp: Корневой каталог веб-приложения. Здесь размещаются HTML-страницы и прочие ресурсы (таблицы стилей (CSS), изображения, клиентские скрипты (javascript), JSP и т.п.), доступные веб-клиентам.
  • myapp/WEB-INF: Этот каталог, недоступный веб-пользователям, содержит описание веб-приложения и его параметры в файле web.xml.
  • myapp/WEB-INF/classes: В этом каталоге размещаются все файлы Java-классов сервлетов.

Поместим в корневой каталог создаваемого веб-приложения файл index.html следующего содержания:

После перезапуска сервера к создаваемому веб-приложению можно будет обратиться по адресу http://localhost:8080/myapp/(рис. 2).

Рис. 2. Отображение статических страниц

Java Server Pages

Java Server Pages (JSP) - динамические веб-страницы, содержащие, помимо HTML-разметки, инструкции на языке Java (подобно PHP или ASP). Такие ресурсы размещаются и используются так же, как и статические ресурсы. Пример JSP приведен в листинге 1, а результат на рис. 3.

Листинг 1. Пример разметки JSP

Рис. 3. Вывод JSP-страниц

Примечание: Если при обращении к JSP-странице вы получаете сообщение об ошибке вида:
org.apache.jasper.JasperException: java.lang.IllegalStateException: No output folder.... ,
это скорее всего означает, что каталог tomcat/work не доступен для записи. Используйте команду chmod -R a+w tomcat/work для установки разрешений или chown для смены владельца.

Сервлеты

Все сервлеты (серверные приложения на Java) размещаются в подкаталоге WEB-INF/classes/. Рассмотрим использование сервлетов на примере приложения, выводящего некоторую информацию о сервере (листинг 1).

Листинг 1. Исходный код Java-сервлета

// Сохранить как /srv/tomcat/webapps/myapp/WEB-INF/classes/MyServlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // установить MIME-type и кодировку ответа response.setContentType("text/html; charset=UTF8"); PrintWriter out = response.getWriter(); // Отправка веб-страницы try { out.println(""); out.println("Servlet sample"); out.println(""); out.println("

Запрошенный ресурс: " + request.getRequestURI() + "

"); out.println("

Протокол: " + request.getProtocol() + "

"); out.println("

Адрес сервера: " + request.getRemoteAddr() + "

"); out.println(""); } finally { out.close(); // Всегда закрывать Writer } } }

Следующий этап - компиляция. Это можно сделать из той среды разработки, которую вы используете (Eclipse, NetBeans, IntelliJ и т.п.) или из командной строки. В случае использования openJDK и Tomcat 7 это будет выглядеть примерно так:

Aag@stylo:~> javac -classpath /usr/share/tomcat/lib/tomcat-servlet-3.0-api.jar:classes /srv/tomcat/webapps/myapp/WEB-INF/classes/MyServlet.java

В результате компиляции в каталоге WEB-INF/classes будет создан файл MyServlet.class. Теперь нужно сконфигурировать Tomcat для его использования.

Настройка доступа к сервлету

С точки зрения пользователя сервлет - это обычный веб-ресурс, адресуемый URI и обращение к сервлету выполняется через адресную строку браузера. Однако, чтобы сервлет стал доступным для клиентов, необходимо выполнить его настройку в файле WEB-INF/web.xml веб-приложения. Структура этого файла для рассматриваемого примера будет примерно такой:

aboutServer MyServlet aboutServer /about

В такой конфигурации сервлет из файла MyServlet.class будет выполняться при обращении по адресу /myapp/about . Для КАЖДОГО сервлета должна быть описана пара и , связанная по элементу .

Для того, чтобы изменения вступили в силу, требуется перезапустить сервер. Результат выполнения сервлета приведен на рис. 4.

Рис. 4. Выполнение сервлета

Подробную информацию о всех возможностях сервера Tomcat можно получить из документации, которая устанавливается вместе с сервером и доступна по адресу http://localhost:8080/docs/ или на официальном сайте проекта: http://tomcat.apache.org/ .

Постоянный адрес этой страницы:

Дорогие джаварашовцы, что я хочу рассмотреть в этой статье? Я просто хочу сделать небольшой обзор той части серверов приложений, которые заслуживают внимания хотя бы тем, что являются бесплатными и доступен их исходный код. Я буду исходить из того, что ваша система сходна с моей. У меня стоит Windows 7 64 бита, кроме того у меня стоит JDK 1.7 и JDK 1.8, а переменная окружения JAVA_HOME ссылается на последний из них. В моем случае это значит, что в JAVA_HOME прописан путь C:\Program Files\Java\jdk1.8.0_31. Чтобы у вас при повторении ниже описанного возникало как можно меньше вопросов типа «а почему у меня не получилось, может я что-то не так делаю?», я буду пытаться описывать каждое действие, которое я делал на своей машине. Начинаем…

Кастинг, т.е. отбор

Для начала нужно отобрать сервера приложений для нашего обзора. Для этого на википедии смотрим статью Comparison of application servers (англ., т.к. другой нет). Там есть табличка с кучей серверов приложений, но для нас интерес представляют только те, которые, с одной стороны, opensource, а с другой, поддерживают JavaEE по полной, т.е. столбец Java EE compatibility в этой таблице должен содержать строчку типа Full Platform . Из этого списка, в котором есть и WildFly , и JBoss сразу можно выкинуть последний, т.к. это просто старое название и старые версии WildFly . В результате получаем следующий список серверов, которые заслуживают нашего внимания:
  1. Glassfish (не проприетарный, а тот, что от сообщества glassfish.java.net , но который поддерживается корпорацией Oracle до такой степени, что если нужен javaEE SDK с сайта Oracle, то тебе впиндюрят и этот сервер приложений, иначе никак)
  2. (Red Hat) WildFly (бывший JBoss)
  3. (Apache) Geronimo
  4. (Apache) Tomcat (это лишь контейнер сервлетов, а не сервер приложений, но он является таким эталоном, на котором, если программа написана правильно, то она точно заработает. На других серверах программа может быть написана правильно с точки зрения JavaEE, но работать все равно будет не корректно или вообще не будет. Это я о Geronimo, о глюках которого можно говорить долго)
Теперь давайте накачаем этих серверов.
  • Для это будет сайт http://tomcat.apache.org .
  • Для Glassfish – сайт http://glassfish.java.net .
  • Для WildFly – сайт http://wildfly.org .
  • И, наконец, для – сайт http://geronimo.apache.org .
Где было можно выбрать между 32-х и 64-хбитными версиями, я выбирал архивчик под мою систему в 64 бита.

Установка

В плане установки все просто и для каждого из выбранных серверов установка – это просто распаковка архива. Я, например, создал папку AppServers на рабочем столе, куда и стал всё распаковывать.

Настройка

Настройку серверов начнем с настройки порта HTTP, на котором он будет работать. Потом пропишем себя как админа сервера. Для каждого из серверов есть свои особенности настройки. Для Tomcat. tomcat, далее папка conf , файл server.xml . Находим в этом файле число 8080 (http порт по умолчанию) и меняем его на что захотим. Я поставил 9713 . Чтобы прописать себя как админа сервера нужно, находясь в этой же папке, открыть файл tomcat-users.xml . В нем перед закрывающим тегом прописать следующий тег где в своей роли я прописал максимальное количество всяких админских прав (ролей). Это позволит мне деплоить приложения и через gui, и через удаленное подключение. Теперь запустим tomcat. Заходим в папку с распакованным tomcat, далее папка bin и запускаем файл startup.bat . Переходим в браузере по адресу http://localhost:9713 . Должно все заработать и мы увидим тигру.
Теперь давайте проверим наличие доступа в админку. Для этого переходим по адресу http://localhost:9713/manager , вводим выбранные логин и пароль и получаем доступ.
УРА! Можно временно отключить Tomcat, для этого достаточно закрыть консоль, в которой он работает. Для Glassfish. Заходим в папку с распакованным glassfish , далее в подпапку glassfish , далее подпапка domains , потом в папку domain1 . Заходим в папку config и находим файл domain.xml . Там также ищем число 8080 (это число вообще характерно в качестве http-порта по умолчанию для серверов приложений и контейнеров сервлетов) и меняем его на что захотим. Я поставил 9813 . Запустим glassfish. Заходим в папку с распакованным glassfish, далее в подпапку glassfish , потом в папку bin . Запускаем файл startserv.bat . В браузере вводим адрес http://localhost:9813 . На появившейся некрасивой странице с заголовком GlassFish Server находим ссылку go to the Administration Console и жмем на нее.
Далее, попав на красивую построенную на JSF страницу административной консоли, жмем пункт Change Administrator Password и вводим нужный нам пароль для пользователя admin , потом подтверждаем его и жмем кнопку Save .
При последующих входах в административную консоль нужно будет указывать логин admin и заданный пароль.
Теперь можно временно отключить Glassfish , для этого достаточно закрыть консоль, в которой он работает. Для WildFly. Заходим в папку с распакованным wildfly . Далее заходим в папку standalone , потом папка configuration , а в ней файл standalone.xml . Далее действуем по отлаженной схеме. Я поставил порт 9913 . Запустим сервер. Для этого перейдем в папку с распакованным wildfly . Далее заходим в папку bin и запускаем файл standalone.bat . Открываем браузер и вводим адрес http://localhost:9913 .
Жмем ссылку Administration Console для входа в админскую консоль (проще говоря, админку сервера приложений). Но не тут-то было, т.к. всплывает экран.
Этот экран сообщает нам, что админ не создан, и чтобы его создать нужно воспользоваться консольной утилитой add-user.bat . Ну, раз надо так надо. Возвращаемся в папку bin и запускаем эту утилиту. Вначале предложат выбрать тип пользователя, которого мы хотим создать. Надо выбрать пункт (a) , что будет означать, что нам нужен админ. Потом запрашивается имя этого пользователя Username и пароль Password . Пустым пароль быть не может, но односимвольным – пожалуйста. Утилита конечно поругается, но проглотит, если ей ответить yes на вопрос «Вы уверены?». Далее подтверждаем пароль повторным вводом на запрос Re-enter Password . Потом будут еще вопросы, но на них все просто отвечаем утвердительно и выходим из утилиты. Вернувшись на страницу выше, находим ссылку Try Again и жмем на нее. Теперь, введя данные только что созданного админа, можно попасть в админку.
Гасим сервер, закрыв окно консоли, через которую он был запущен. Для Geronimo. Заходим в папку с распакованным . Далее в подпапку var , потом в папку config , а в ней файл config-substitutions.properties . В этом файле описаны все используемые сервером приложений порты в удобном формате, но схема замены порта та же. Я поставил порт 10013 . Запустим сервер . Перейдем в папку с распакованным , потом в подпапку bin и запустим там файл startup.bat . Переходим на страницу http://localhost:10013 . Чтобы вы думали? Скорее всего, страницы там не будет. Почему? Все дело в том, последняя версия Geronimo (3.0) не может работать с последней версией JDK (1.8), поэтому если у вас стоит только она или пусть даже есть, скажем, 7-ая версия, но переменная окружения JAVA_HOME все равно ссылается именно на 8-ую, как у меня, то запуск сервера приложений не произойдет. Таким образом, для работы Geronimo нужно обязательно скачать JDK 1.7. Теперь допустим вы поставили 7-ой JDK, но не хотите менять значение переменной JAVA_HOME (в конце-то концов, другие программы на нее не жалуются, а значит пусть и работают с последней версией JDK). Что делать? Я советую открыть файл setjavaenv.bat , расположенный в той же папке bin , и найти в нем строку с меткой :okJdkFileCheck . После чего на следующей же строке добавьте переопределение переменной окружения. Например, так: set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_75 Этой строки там нет, так что будьте добры прописать ее самостоятельно. Если у вас 32-битная система, то больше проблем быть не должно. Более того, если у вас 64-битная система и вы поставили JDK 1.7 именно в 64-битной комплектации, то у вас тоже все в шоколаде. А теперь представим, что мы решили извратиться и поставить на 64-х битную систему (у меня, например, Windows 7 64) JDK 1.7 из линейки в 32-ва бита. Что тогда? Тогда придется еще повозиться, потому как в 64-битной системе есть две папки для установки программ: Program Files и Program Files (x86) и если ничего не менять, то 32-хбитный JDK встанет именно в последнюю. Что в этом страшного? Да вроде ничего, однако, если переменная JAVA_HOME будет иметь в своем пути скобки (x86), то у Geronimo случается несварение. Почему? Черт его знает, особенно если учесть, что согласно данным с форумов, эту ошибку в 3-ей версии должны были исправить. Но ни фига подобного. Главное в этом деле не делать пи-пи, если индейцы не исправили, то мы поправим. Для этого есть два способа, которые я предпочитаю комбинировать, чтобы уж наверняка. Во-первых, опять идем а файл setjavaenv.bat и находим уже упомянутую метку :okJdkFileCheck . Под этой меткой есть строка if "%JRE_HOME%" == "" if exist "%JAVA_HOME%\bin\javac.exe" (set JRE_HOME=%JAVA_HOME%\jre) else set JRE_HOME=%JAVA_HOME% в которой для излечения Geronimo достаточно будет взять подстроку JRE_HOME=%JAVA_HOME%\jre в кавычки, т.е. заменить всю строку на if "%JRE_HOME%" == "" if exist "%JAVA_HOME%\bin\javac.exe" (set "JRE_HOME=%JAVA_HOME%\jre") else set JRE_HOME=%JAVA_HOME% . Кроме того, помните или знайте, что у папок типа Program Files в системе Windows 7 есть синонимы (например, для папки C:\Program Files (x86) синонимом будет папка C:\Progra~2 ). Поэтому если вы в файле setjavaenv.bat после метки :okJdkFileCheck установите следующее значение переменной JAVA_HOME set JAVA_HOME=C:\Progra~2\Java\jdk1.7.0_75 то у вас тоже заработает сервер под управление 32-х битного JDK в 64-х битной операционной системе. Как-то так… Ну, наконец-то, можно и запускать , вызвав startup.bat . Теперь проблем быть не должно. Переходим в браузере на страницу http://localhost:10013 . Слева вверху находим ссылку Console и жмем на нее.
Надо ввести админские логин и пароль. Сразу подскажу, что это пользователь system с паролем manager (значения по умолчанию).
Пройдя в саму консоль и проследовав по пунктам меню как на картинке ниже (выбрать радиобатон Advanced , потом выбрать Security > Users and Groups ), можно как сменить пароль для пользователя system , так и создать другого админского пользователя, а этого удалить.
Остановить сервер можно также простым закрытием окна консоли, в котором сервер был запущен.

Заключение

В этом обзоре я, по сути, просто провел установку и первоначальную настройку популярных серверов приложений и контейнера сервлетов Tomcat. За исключение Geronimo, остальные сервера были очень дружелюбны ко мне и проявили гостеприимство. В следующем посте я продолжу рассмотрение серверов приложений и сделаю 3-ий шаг на пути рассмотрения веб-сервисов, а именно, покажу как задеплоить описанный на первом шаге веб-сервис в эти сервера. Для этого мы создадим war-архив нашего веб-сервиса, и я наглядно покажу, что набор сторонних jar-ников, которые надо включать в этот архив для корректной работы сервиса, сильно меняется от сервера к серверу.

Замысел написать эту статью про установку и настройку, наверное, одного и самых популярных веб-серверов на Java возник уже давно. Одной из причин было желание сделать небольшую заметку "для себя" с подробной инструкцией. Возможно эта статья также пригодится другим java программистам. Пользы для кого-нибудь ещё, например для системных администраторов в ней будет не так много. Скорее всего они просто сделают так: apt-get install tomcat8 и затем потребуют у программиста war-ик для развертывания. Программист же часто хочет чуть большего — например, возможности работать с различными версиями серверов (которых может даже ещё нет в официальном репозитории) или наоборот откатиться к какой-то специфичной версии. Системному администратору такие исследования, как правило, не нужны. По-хорошему, у него должна стоять просто стабильная работающая версия, на которую периодически он будет накатывать обновления и лишний раз на неё не дышать.

В общем, это статья про то, как программисту установить Apache Tomcat под Linux чтобы "поиграться" с ним, но при этом ничего сильно не сломать.
Также эта статья может быть полезна в тех случаях, когда начинающий java программист отладив свое веб-приложение Tomcat запущенным на Windows, сталкивается со жгучим желанием развернуть свой сайт на какой-нибудь недорогой VPS-ке с Ubunt-ой.

Статья может показаться излишне многословной, но мне хотелось рассказать про основные "грабли" и способы их обхода. Могу предположить, что системные администраторы могут быть недовольны тем, что это решение недостаточно системные. Поэтому тем, кто хочет подробно изучить данный вопрос или посвятить свою жизнь профессиональной (т.е. получать за это деньги) настройки линуксовых серверов, тому лучше следует обратиться к соответствующей литературе, обучится этому ремеслу у профессионала и черпать знания у сисадминского сообщества. Здесь же у меня просто блог для java программистов.

Итак, поехали!

Подготовка

Исходные данные.
Linux. Debian 9. 64bit.

1. Устанавливаем JDK.
Почему JDK, а не JRE? По-факту достаточно JRE, но лично мне приятно иметь возможность в случае необходимости по-быстрому скомпилировать программку на java прямо на сервере.
Вы не поверите, но жизнь такая интересная штука, никогда не угадаешь когда тебе может понадобится скомпилировать и запустить что-то на Java. Лично мне запуск javac из консоли на сервере помогал несколько раз.

Далее, я предпочитаю ставить Oracle JDK. Собственно OpenJDK тоже неплох и устанавливается гораздо проще (sudo apt-get install default-jdk). Просто я отдаю предпочтение оригинальной Sun/Oracle. Тем не менее, ставить Oracle JDK, OpenJDK или какую-либо другую версию - личное дело каждого. Лично я отношусь к пользователям Open JDK без предубеждения. Более того, сам часто использую версии Open JDK (например Java 9) для того, чтобы ознакомиться с их новыми возможностями.

Установка Oracle JDK под Windows и Linux сильно отличаются. Под Windows проще установить Oracle JDK проще простого (скачать и запустить), а сборку Open JDK под Windows нужно ещё поискать.
С Linux-ом всё наоборот. Open JDK как я писал ставится очень просто через apt, с Oracle JDK чуть сложнее.

В интернете существует совет, что для установки нужно добавить ещё один apt-репозиторий. Я так не делаю. Возможно это лично моя паранойя, но я стараюсь так не делать и делаю установку руками. Особенно если учесть, что установка заключается в том, чтобы скачать и распаковать архив .

Выбираем jdk-XYZ-linux-x64.tar.gz файл. Правой кнопкой - сохранить ссылку.

$wget --header "Cookie: oraclelicense=accept-securebackup-cookie" [ссылка]

Например так:

$sha256sum jdk-8u73-linux-x64.tar.gz

Смотрим что показалось на экране и сверяем значение, с тем что опубликовано на официальном сайте.
Для этого заходим на сайт на сайт загрузки и ищем строчку Checksum .

Например для jdk-8u73-linux-x64.tar.gz

$tar -xzf jdk-8u73-linux-x64.tar.gz -C /opt

По старой привычке я складываю всё в "/opt". После этого делаю симлинк.

$wget http://apache-mirror.rbc.ru/pub/apache/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz

Проверяем хэши.

$wget https://www.apache.org/dist/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz.sha1 $sha1sum -c apache-tomcat-8.0.33.tar.gz.sha1

Тоже самое в картинках:

2. Сервер можно распаковать туда же в /opt.

JAVA_HOME=/opt/jdk

Про этот файл можно почитать в документации: RUNNING.txt .
На самом деле, часто некоторые разработчики просто тупо вбивают "JAVA_HOME=...." прямо в catalana.sh.
Дело в том, что проще открыть nano catalana.sh и поправить его, чем создавать setenv.sh (а точнее как-то узнать про его существование), хотя изначально этот файл специально был сделан для того, чтобы менять ключи JVM и различные переменные окружения, и при этом не портить основной запускаемый файл.

Вот выдержка из документации:

Using the "setenv" script (optional, recommended)

Apart from CATALINA_HOME and CATALINA_BASE, all environment variables can
be specified in the "setenv" script. The script is placed either into
CATALINA_BASE/bin or into CATALINA_HOME/bin directory and is named
setenv.bat (on Windows) or setenv.sh (on *nix). The file has to be
readable.

By default the setenv script file is absent. ...

Строго говоря, часто переменная окружения JAVA_HOME часто указывает туда, где установлена системная JVM. По-большому счету это правило работает, но часто в работе/отладке приходится запускать какую-то конкретную версию Tomcat-а под какой-то специальной версией JVM. Поэтому удобно иметь возможность гибко менять настройки через setenv.sh.

После того как все пути настроены, запускаем и проверяем, что все хорошо работает.

Кстати заметил интересный момент. При запуске на виртуальном хостинге может быть довольно ощутимая задержка в старте (около минуты).
Не хочется углубляться в детали, но мне помогла установка haveged.

$groupadd tomcat $useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat $chown -R tomcat:tomcat /opt/tomcat

После этого проверяем, что всё запускается. Например так:

$iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

Естественно нужно убедиться, что у вас не установлен уже какой-нить веб-сервер (например apache или nginx), который работает на 80-ом порту.

Проверяем, что все нормально и если всё хорошо - сохраняем правило переброса портов.

$apt-get install iptables-persistent

Собственно говоря всё.

Теперь о том, на что скорее всего обратят внимание профессиональные системные администраторы.

1. Tomcat заводят через mod_jk за Apache HTTPD или за Nginx (через reverse proxy).
Это дает возможность разделить статику, балансировать нагрузку и делать многие другие полезные штуки. Это круто в продакшене, но в девелоперской конфигурации это ещё один слой который не всегда упрощает отладку и разработку.
В принципе в настройке ничего сложного нет, но всё равно нужно будет покурить документацию. Раньше я предпочитал связку через mod_jk, теперь чаще сталкиваюсь с Nginx.

2. Нужно сделать запуск Tomcat-а как службу. Это не паранойя, а здравый смысл. По-крайней мере если не дай Бог сервер перезапустится, не нужно будет в ручную его запускать.

3. Правильные сисадмины разводят файлы томката по правильным папкам (/etc, /var/log и т.д.) и более деликатно относятся к правам доступа к конфигурационным файлам (и не только).
Можно посмотреть, как это делается через apt-get install tomcat8.

4. Не буду отрицать, что у многих /opt - помойка в которой лежит всякое барахло.
Тем не менее, если это мой персональный сервер, то это не помойка, а мой личный склад программ.

5. Хорошие сисадмины настраивают iptables и прикрывают 8080 порт извне. Точнее они прикрывают все порты, к которым не нужен доступ из вне.

Если уж говорить на чистоту, то лично я не люблю заниматься администрированием и настройкой серверов. Каждый должен заниматься своим делом, пусть это делает линуксоид со стажем. Ещё раз повторюсь, здесь речь идет скорее о некой девелоперской конфигурации, т.к. сисадмин делает установку нормальной стабильной версии "на века", настраивает её и потом периодически накатывает обновления. Программисту же, в силу своей профессиональной деятельности, приходится периодически меняет настройки, тестировать, менять версии библиотек, конфиги, что-то накатывать/откатывать и делать другие непотребства с сервером, пока не добьется от сервера нужной работы.

С другой стороны, всегда нужно соблюдать технику безопасности.

Не запускать от рута (даже если нужен 80-ый порт).
- Закрывать доступ к служебным портам.
- Не оставлять дефолтных паролей.
- Не запускать непонятных и непроверенных программ.

В идеале этим нужно заниматься у себя в песочнице, но часто такие вещи нужно уметь делать и в реальном мире.
Да и вот мой реферал на DigitalOcean , для всяких пробных веб-проектов на Java я пользуюсь их хостингом. Раньше пользовался brim.ru, они наверное самый известный java-хостинг в России.

PS: Если совсем не терпится и хочется сделать совсем всё по-быстрому, то можно запустить в два-три шага:
1. Через apt-get поставить tomcat8
2. Загрузить свой ROOT.war
3. Если нужно пробросить порт.

Нельзя сказать, чтобы среда разработки Java была сильно популярна на платформе Windows. В большинстве случаем на рынке хостинга присутствуют именно Unix решения с поддержкой Java. Но, тем не менее, разрабатываясь как мультиплатформенный язык программирования, Java ни чуть не хуже работает и на Windows платформе, что безусловно может использоваться как для отладки, так и для хостинга приложений на этой платформа. Дополнительную популярность на платформе Windows язык Java, как это ни странно, приобрел после выхода конкурирующего продукта непосредственно от разработчика Windows. Агрессивная политика Microsoft заставила задуматься многих специалистов о разработке более переносимого кода, который "в случае чего" можно будет портировать на Unix платформу с меньшими потерями.

Я не буду здесь касаться проблем выбора языка разработки, равно как и преимуществ одной платформы над другой. Будем считать, что вам просто понадобилась именно такая конфигурация: Windows+Tomcat.

Подготовительный этап

Разумеется любая настройка сервера начинается с подбора необходимых программных компонент. В нашем случае, все компоненты, кроме собственно ОС являются бесплатными или условно-бесплатными и могут быть успешно скачены из Интерента.

И так нам очевидно потребуется:

Компьютер с Windows

Компьютер с установленной Windows. Здесь и далее я буду рассказывать про Windows 2000 Server, но при этом я не вижу принципиальных сложностей, если вы захотите установить рассматриваемую конфигурацию на любую другую версию Windows. В частности, я по тексту буду упоминать о возможных отличиях в настройке ПО под другие версии ОС.

Если у вас система из NT-семейства, то начните с установки на нее последнего Service Pack (SP). Для NT очевидно потребуется SP6a, а для Windows 2000 как минимум SP2, без установки которого у вас элементарно не заработает Java 1.4.1. Инсталятор Java SDK вас предупредит о необходимости установки SP2 и будет прав, ибо без SP2 он действительно не работает.

Очевидно также, что на вашем компьютере должна стоять подключенная к сети сетевая карта с установленным и настроенным протоколом TCP / IP . В случае ее отсутствия, рекомендую установить и настроить виртуальную сетевую карту, т.н. "Microsoft loopback adapter", драйвер которого входит в дистрибутив Windows 2000.

Java JDK

Java JDK очевидно берется с сайта java.sun.com . На момент написания статьи последней была версия 1.4.1_02. Вам потребуется Java 2 JDK Standard Edition (J2SE).

Разумеется соблазнительно скачать сразу Enterprise Edition (J2EE), но как таковой отдельно этой версии не существует. Реализации классов J2EE есть часть соответствующих серверов приложений. Таким образом с сайта можно скачать лишь спецификацию на J2EE и другие подобные документы.

Далее - не стоит скачивать JRE. Во первых, JRE не включает в себя компилятор javac, то не позволяет разрабатывать приложения (что в общем то логично), а, во-вторых, установке Tomcat требует именно JDK. Это также очевидно, т.к. при работе с файлами JSP именно на Tomcat ложится задача по компиляции JSP в байт-код Java. Другое отличие JRE для Windows состоит в отсутствии в его составе серверной версии библиотек JIT-компилятора (подробнее о JIT – см. ниже). Также отмечу, что JDK самодостаточный комплект библиотек и отдельно JRE не нужен.

Tomcat

Начинаем установку

Надеюсь вы уже установили свежий Service Pack и необходимое число раз перезагрузили компьютер.

Установка Java SDK

При установке Java SDK ни в коем случае не ставьте ее в каталог предлагаемый по умолчанию. Введите каталог, путь которого как можно более короткий, без пробелов и других экзотических символов, например:

C:\j2sdk1.4.1_02

Tomcat

Если вы скачали ZIP-версию дистрибутива, то все что вам нужно, это распаковать ее в созданный для этого каталог, например:

C:\Tomcat

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

Архив может иметь сложную структуру, соответственно вам нужно распаковать его так, чтобы при входе в каталог C:\Tomcat у вас отображались были каталоги bin, common, conf, logs и т.д.

Настраиваем Tomcat

Установка PATH

В принципе, установка PATH для работы Tomcat не обязательна и вы можете пропустить этот шаг, но в случае, если у вас установлено несколько Java JRE, установка PATH даст дополнительную подсказку различным программам, где искать библиотеки Java. В частности, без указания PATH может возникнуть конфликт с родной JVM от Microsoft, которая входит в некоторые версии Windows. Кроме этого, установка PATH потребуется для запуска из командной строки компилятора javac, который вам может потребоваться при дальнейшем тестировании сервера.

Таким образом, убедитесь, что у вас на компьютере работает только одна версия Java-машины и эта именно та версия, которую мы поставили. Для этого введите команду

SET PATH

и убедитесь, что в переменной PATH присутствует ссылка только на один каталог java\bin . В нашем случае это будет C:\j2sdk1.4.1_02\bin . Здесь будьте внимательны, т.к. java может входить в комплект к огромному числу разных программ, в частности, компания IBM и Oracle. Для верности, отредактируйте переменную PATH таким образом, чтобы ссылка на нашу Java была первой с списке. Напомню, что настройка переменных окружения в NT-семействе производится на вкладке Advanced свойств "Моего компьютера".

Проверить правильность настройки PATH можно так: зайдите в каталог C:\j2sdk1.4.1_02\bin и запустите команды java –version и javac из каталога C:\j2sdk1.4.1_02\bin . Затем перейдите куда-нибудь в другой каталог и повторите эти команды. Результат должен быть один и тот же.

Установка переменных окружения Tomcat

Теперь перейдем непосредственно к настройке Tomcat. Для своей работы он требует установки нескольких переменных окружения:

  • CATALINA_HOME должна указывать на каталог с установленным Tomcat. В нашем случае это C:\Tomcat .
  • JAVA_HOME должна указывать на каталог с SDK. В нашем случае, это: C:\j2sdk1.4.1_02 . Обратите внимания, что, в отличии от переменной PATH , данная переменная указывает не на каталог bin .

Пожалуйста проверьте правильность установки этих переменных окружения. При неверной установке, tomcat выводит совершенно невразумительное сообщение об ошибке, типа "The system cannot find the file -Djava.endorsed.dirs=.".

Для настройки Tomcat есть еще несколько переменных, но пока они нам не потребуются. Краткое описание этих и других переменных можно посмотреть в файле %CATALINA_HOME%\bin\catalina.bat

Хотелось бы напомнить, если в дальнейшем планируется запускать Tomcat как сервис (службу) Windows NT, нужно создавать и устанавливать системные переменные окружения (System variables), а не пользовательские (User variables). Также стоит напомнить, что для того чтобы установленные переменные вступили в силу, требуется перезапустить приложение, которое планирует их использовать. В нашем случае следует перезапустить sell (или FAR) из которого планируется тестовый запуск Tomcat.

Настройка порта

По умолчанию Tomcat "садиться" на порт 8080. Если этот порт у вас по каким-то причинам занят – найдите соответствующий параметр в файле %CATALINA_HOME%\conf\server.xml и исправьте по вкусу. Этот параметр выглядит приблизительно так:

В частности, если вы не планируете использовать IIS для доступа к Tomcat"у, то можете повесить Tomcat на порт 80 (только не забудьте отключить в этом случае IIS).

Отмечу, что, если порт на который вы устанавливаете Tomcat, занят, то Tomcat не запуститься и даже не оставит ни единого сообщения в log-файле. При этом окошко Tomcat"а закроется сразу после открытия. Аналогичная картина будет также в случае, если одна копия сервера уже запущена и случает указанный порт.

Запуск Tomcat

После того, как все указанные действия проделаны, запустите скрипт %CATALINA_HOME%\bin\startup.bat . У вас должно открыться новое текстовое окно и запуститься Tomcat. Указанный скрипт лучше запускать из командной строки, чтобы у вас была возможность прочитать выводимые сообщения об ошибках.

Для Windows 9x/ME разработчики также рекомендуют в свойствах файлах startup.bat и shutdown.bat установить параметр "Initial environment" на вкладке Memory в значение как минимум 4096. Т.к. в противном случае возможно аварийное завершение сервиса с сообщением "out of environment space". Это видимо связано с обилием переменных окружения, необходимых для работы сервера.

После этого откройте броузер и обратитесь по адресу http://127.0.0.1:8080 . Должен открыться локальный сайт, на котором, кроме прочего, присутствуют тестовые сервлеты и документация к Томкату. Tomcat запускается не сильно быстро, поэтому не торопитесь сразу открывать броузер.

Тюнинг JVM

Компилятор JIT (Just In Time) от Sun предлагает два режима работы – серверный и клиентский. По сути это два различных JIT, вызываемых командой java. В серверном режиме производится более тщательная оптимизация кода. Разумеется за оптимизацию приходится платить большим временем компиляции, но в случае с сервлетами, компиляция производится лишь единожды. Далее класс используется для обслуживания любого количества клиентов безе перекомпиляции. Таким образом для серверных решений Sun рекомендует использовать именно серверный режим JIT.

Из командной строки тот или иной режим запускается посредством указаний ключа -server или -client первым ключом командной строки.

Следующий важный параметр – объем доступной для виртуальной машины памяти (heap size). Секрет состоит в том, что по умолчанию объем максимально выделяемой памяти равняется 64Mb. Разумеется это катастрофически мало для серверного приложения и, запуская систему со значениями по умолчанию, оперирование в памяти с файлами объемом в пару десятков мегабайт будет приводить к останову сервлета с сообщением OutOfMemory.

Для настройки размеров выделяемой памяти служит два ключа: -Xms и -Xmx, которые отвечают за минимальный и максимальный объем соответственно.

Настройка указанных параметров для использования сервером Tomcat производится через еще одну переменную окружения - CATALINA_OPTS . В нашем случае переменная должна выглядеть приблизительно так:

CATALINA_OPTS = -server –Xms64m –Xmx256m

Что настроит серверный JIT, плюс установит выделяемый объем памяти в диапазоне от 64 до 256Mb

Установка Tomcat как сервиса

Для установки сервера как сервиса Windows NT, сайт Jakarta предлагает нам выполнить следующую "простую" команду (что любопытно, без каких либо комментариев):

%CATALINA_HOME%\bin\tomcat.exe -install Apache-Catalina %JAVA_HOME%\jre\bin\server\jvm.dll -Djava.class.path=%CATALINA_HOME%\bin\bootstrap.jar;%JAVA_HOME%\lib\tools.jar -Dcatalina.home=%CATALINA_HOME% %CATALINA_OPTS% -Xrs -start org.apache.catalina.startup.BootstrapService -params start -stop org.apache.catalina.startup.BootstrapService -params stop -out %CATALINA_HOME%\logs\stdout.log -err %CATALINA_HOME%\logs\stderr.log

Если попытаться разобраться в этой команде, и отобразим контекстную помощь команды tomcat.exe, то мы получим приблизительно следующее описание параметров:

Install service_name jvm_library (jvm_option) -start start_class [-method start_method] [-params (start_parameter)+] [-stop start_class [-method stop_method] [-params (stop_parameter)+]] [-out out_log_file] [-err err_log_file] [-current current_dir] [-path extra_path]

Таким образом мы последовательно указываем:

  • Имя сервиса, которое будет отображаться в оснастке Services Windows. Имя сервиса используется также для создания имени ключа реестра, поэтому пробелов там быть не должно.
  • Указание ссылки библиотеки на библиотеку Java-машины с рядом необходимых параметров. Среди которых и параметры указанные нами в переменной CATALINA_OPTS . Собственно эта библиотека и будет загружена как сервис.
  • Указания на методы запуска и останова сервиса, также с необходимыми параметрами
  • Ссылки на файлы журналов и ряд других необязательных параметром.

Замечу что, рекомендованный код также использует параметр –Xrs для запуска библиотеки Java-машины. Данный ключ позволяет пользовательским приложениям корректно завершить работу в случае получения процессом сигнала на аварийное завершение. К сожалению, мне не удалось выяснить особенности реализации данного подхода в Windows, как и необходимости принятия каких либо дополнительных мер со стороны разработчика кода.

Удаление сервиса производится командой:

Tomcat.exe -uninstall service_name

где service_name – указанное нами при установке имя сервиса.

Все введенные нами данные аккуратненько размещаются в реестре по адресу:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\

Таким образом мы можем исправить отдельные параметры, не проводя перерегистрацию сервиса. Аналогичным образом мы можем исправить имя, отображаемое в оснастке и дать нашему сервису описание. Для этого, соответственно, служат значения DisplayName и Description указанного ключа.

Отмечу, что ошибка в JDK версии 1.3. приводила к аварийной остановке сервиса при выходе пользователя из системы. Поэтому если вы еще не скачали свежую версию JDK, сейчас самое время это сделать.

Конфигурация собственного Web-узла

По умолчанию Tomcat создает лишь один Web-сайт, плюс сваливает все в один каталог. Такое положение вещей редко подходит даже для тестового сервера. Таким образом проделаем несколько шагов для упорядочивания информации.

Итак, нам нужно создать виртуальный сайт, причем разместить его за пределами каталога сервера. В production сервера, каталоги виртуальных сайтов обычно размещаются на отдельном диске. Для нашего примера, я буду использовать каталог

C:\host1

В каталоге conf сервера Tomcat есть файл server.xml . В этом файле следует найти элемент . Внутри этого элемента по умолчанию описаны два коннектора: один для доступа по протоколу HTTP 1.1 и один для доступа по протоколу AJP 1.3. Первый используется для работы Tomcat"а в роли самостоятельного Web-сервера, а второй потребуется для подключения к IIS. Кроме этого, в теге Service , по умолчанию заданы шаблоны (закомментаринные по умолчанию) для коннекторов подключения по SSL и AJP 1.2.

Полученные запросы коннекторы передают так называемому Engine"у, который в свою очередь анализируют заголовок пакета HTTP и передает управления соответствующему виртуальному сайту.

Для создания виртуального сайта, нам потребуется создать новый тег Host внутри тега Engine.

Следует отметить, что у файла server.xml нет DTD , таким образом вы не сможете проверить корректность отредактированного файла. Таким образом правку файла server.xml следует проводить осторожно. При ошибке в файле server.xml , сервер не запустится, а в каталоге %CATALINA_HOME%/logs/stderr.log появится сообщение об этом.

Итак, определим виртуальный хост следующим образом:

www.host1.loc

Этой строкой мы создадим виртуальный сайт окликающийся по адресам http://host1.loc и с внутренним именем host1.loc. Кроме того мы указываем серверу, автоматически подключать скопированные в каталог appBase приложения и автоматически разворачивать скопированные туда WAR файлы.

Теперь мы можем скопировать в наш каталог приложение примеров (которое по умолчанию размещено в каталоге %CATALINA_HOME%\webapps\examples) и убедится, что оно работает по адресу!http://www.host1.loc/examples/servlets. Разумеется, для тестирования в файле HOSTS операционной системы нужно создать записи вида

195.42.130.28 host1.loc 195.42.130.28 www.host1.loc

Указав IP адреса вашей машины.

Замечу, что если мы обратимся просто по адресу http://www.host1.loc, мы получим ошибку, т.к. к этому адресу у нас не привязано ни одного приложения, а функция autoDeploy может привязывать только приложения с адресами http://www.host1.loc/<имя приложения>.

Для привязки нашего тестового приложения приложения к корню сайта, создадим внутри элемента элемент , таким образом наш хост будет выглядеть следующим образом:

www.host1.loc

Новой строкой мы привязали наше приложение к корню сайта, плюс указали серверу отслеживать модификации файлов приложения и перегружать их при необходимости. Учитывая, что перезапуск сервера происходит сравнительно долго, данная функция крайне полезна при разработке.

Заключение

В полученной конфигурации Tomcat может вполне успешно функционировать как на тестовом, так и на production-сервере. Напомню, что в созданной нами конфигурации сервер самостоятельно обрабатывает HTTP запросы. При небольших и средних нагрузках Tomcat вполне справляется с этой ролью, в случае же больших требований, рекомендуется задействовать Tomcat лишь как контейнер сервлетов, а роль Web-сервера передать IIS или Apache.



Рекомендуем почитать

Наверх