Xpoint
   [напомнить пароль]

Устанавливаем Tomcat под Windows

Нельзя сказать, чтобы среда разработки 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

Tomcat скачивается отсюда - jakarta.apache.org. На момент написания, последний релиз был 4.1.24. В процессе написания статьи я также использовал версию 4.1.18, скаченную мной ранее, мной не было замечено принципиальных отличий. Сайт jakarta немного запутанный, поэтому готовьтесь, что вы прокопаетесь минут 15, пока найдете нужный вам дистрибутив.

Для Windows там вам будет предложено две версии – exe и zip. Первая отличается наличием инсталятора. Этот инсталятор, кроме распаковки архива в указанный каталог, проводит еще ряд действий:

  • создает группу в меню "Programs".
  • устанавливает Tomcat как сервис в Windows NT.

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

На некоторых зеркалах попадается так называемая "lightweight" версия, которая отличается от обычной отсутствием XML библиотек Xerces 2.0.1, которые входят в состав JDK версии 1.4. Учитывая, что эта "облегченная" версия меньше "обычной" лишь на 1.5Mb, смысл ее создания мне не очень понятен.

Разное

Очевидно вам потребуется архиватор с поддержкой формата ZIP. Также скачайте программу HandleEx, которая позволит отцеплять от ядра системы JAR библиотеки без перезагрузки машины. Это довольно часто требуется, когда вам нужно удалить библиотеку с целью замены ее на другую версию. Скачивается здесь - www.sysinternals.com.

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

Надеюсь вы уже установили свежий 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 и исправьте по вкусу. Этот параметр выглядит приблизительно так:

<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8080" ... />

В частности, если вы не планируете использовать 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\<service_name>

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

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

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

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

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

C:\host1

В каталоге conf сервера Tomcat есть файл server.xml. В этом файле следует найти элемент <Service name="Tomcat-Standalone">. Внутри этого элемента по умолчанию описаны два коннектора: один для доступа по протоколу 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 появится сообщение об этом.

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

<Host name="host1.loc" debug="0" appBase="C:\host1" unpackWARs="true" autoDeploy="true">
<Alias>www.host1.loc</Alias>
</Host>

Этой строкой мы создадим виртуальный сайт окликающийся по адресам 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/<имя приложения>.

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

<Host name="host1.loc" debug="0" appBase="C:\host1" unpackWARs="true" autoDeploy="true">
<Alias>www.host1.loc</Alias>
<Context path="" docBase="examples" debug="0" reloadable="true">
</Host>

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

Заключение

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

Powered by POEM™ Engine Copyright © 2002-2005