Инсталляция Tomcat под Linux
Автор: © Allan Peda
| |||||||||||||||||||||||||||||||||
К настоящему моменту я уверен, у многих из вас может быть впечатление, что если вы не знаете Java, то ваше резюме несколько от этого проигрывает, и даже если вы знаете Java отлично, ваши работодатели с растущими запросами могут спросить, знаете ли вы Java Server Pages (JSPs), и/или сервлеты. К счастью, существует свободный сервер приложений для Java Server Pages и связанными с ним Java сервлетами, он называется Jakarta-Tomcat (далее просто Tomcat). Я решил скачать и установить его, документируя для справки свой опыт. Я устанавливаю Tomcat на старенький Pentium 2/200 под SuSE 7.2, однако думается, что шаги, описанные здесь, будут работать с любой современной версией, лишь бы с помощью Java можно было компилировать исходники. Инсталяция апплет-сервера включает скачивание и компиляцию нескольких пакетов в дополнение к очевидно нужным для Java и Tomcat. Необходимы следующие пакеты:
Устанавливаем JavaИнсталляция Java описывалась столь часто, что, наверное, не стоит эти инструкции повторять здесь, однако для полноты описания я быстренько пробегусь по этапам установки из RPM. Я скачал версию 1.3 SDK (также известный как JDK) с сайта Java, а 1.4 была Beta, и может быть к тому времени, когда вы будете читать эти строки, перестала быть таковой. В заметках к библиотеке Secure Sockets сказано, что 1.4 будет ее включать, так что инсталляция будет несколько проще. Для Linux, Java от Sun приходит в виде скрипта, являющегося оболочкой для пакета RPM, поэтому вам нужно будет запустить его и согласиться с лицензией перед тем как собственно установите RPM. После распаковки shell-скрипта в RPM, следуйте стандартным инстукциям по установке от имени root.
Я модифицировал path, включив в него место расположения JDK, на SuSE советуется для этого редактировать /etc/profile.local, хотя в других дистрибутивах вы можете редактировать прямо /etc/profile. Учтите также, что переменные окружения $JAKARTA_HOME и $TOMCAT_HOME мы в настоящий момент можем игнорировать, но они могут вам понадобиться достаточно скоро, как часть процедуры установки, так что легче определить их сейчас. Примите во внимание, что я предварительно не устанавливал переменную CLASSPATH, хотя вы можете сделать это по желанию или при необходимости. Ниже вы увидите шаги, которые я сделал, чтобы быть уверенным, что Java может найти библиотеки.
Инсталляция библиотеки Java XML ParserЯ установил библиотеки для обработки XML, разархивировав zip-архив и скопировав требуемые библиотеки в lib/ext директорию (как root). Первоначально я распаковал этот файл в своей директории. Куда вы первоначально разпаковываете архив значения не имеет при условии, что Java знает, где искать установленные библиотеки.
Я люблю все делать по порядку. Итак, чтобы проверить, что
ваша программа установки найдет новые библиотеки, я предлагаю запустить
программу-пример, которая включена в библиотеку обработки XML.
Если вы видите что-то такое, проверьте место расположения библиотек (.jar файлы). Я постоянно натыкался на эту проблему и разрешил ее путем копирования симлинков на корректное расположение или исправляя $CLASSPATH.
Инсталляция библиотеки Secure SocketsДля установки Secure Sockets следуйте похожей процедуре, копируя .jar файлы в директорию ..lib/ext.
Затем я отредактировал файл /usr/java/jdk1.3.1/jre/lib/security/java.security чтобы он содержал раздел о "com.sun.net.ssl.internal.www.protocol", которого не было в файле по умолчанию.
Теперь, чтобы проверить, что javac сможет найти эти библиотеки, я быстренько напечатал следующий кусок кода, сохранил его как TestSSL.java и скомпилировал:
Мы компилируем в байткод, используя стандартный вызов javac: moby:~/jsse1.0.2 > javac TestSSL.javaЕще раз, если java не может найти библиотеки, тогда я получу ошибку java.lang.NoClassDefFoundError и не получится файл байткода TestSSL.class. После компиляции с помощью javac в байткод, я захотел протестировать библиотеку ssl, подключившись к SSL сайту (sourceforge). Здесь необходимо определить использование SSL в комендной строке, или, как говорит документация Sun по установке, "добавьте название пакета обработчика к списку пакетов, который анализируется Java-классом URL". Я представляю себе это как аналог подключения с помощью опции компоновщика -lm библиотеки math, исключая время выполнения.
Итак, теперь у нас есть Apache, Java, Java-библиотеки для XML и Secure Sockets и мы можем устанавливать Jakarta-Tomcat. Не совсем все - нам еще нужен Ant, реализация "make" на Java, и Servlet API.
Инсталляция AntНесмотря на тот факт, что мы не совсем готовы к установке дистрибутива Jakarta-Tomcat, следующий шаг включает установку некоторых неотъемлемых компонент Jakarta, так что нам нужно изменить наше окружение, чтобы сделать установку пакета возмодной. Мы делаем это, создавая переменную окружения $JAKARTA_HOME, с которой мы кратко познакомились вместе с переменной $JAVA_HOME. Я решил разместить Jakarta под /opt просто потому, что там было свободное место, а также потому, что все свои исходники я храню именно там, оставив /usr и /usr/local для RPM. Ну а теперь определяйтесь с тем, куда устанавливать Ant, перед тем как начать инсталляцию.Сначала - скачайте и распакуйте. В моем примере я скачал сжатый сырец в мою домашнюю директорию, затем переместил в директорию $JAKARTA_HOME. Потом я распаковал его в директории $JAKARTA_HOME, позволив tar выбрать имя директории. Подчиняясь требованию, что jakarta-ant должен(а) быть в директории с именем $JAKARTA_HOME/jakarta-ant я сделал симлинк на корректное имя директории. Затем я перешел в директорию jakarta-ant/ и как рут запустил скрипт bootstrap.sh. После выполнения скрипта там должна появиться новая субдиректория, содержащая библиотеки:
Вывод загрузочного скрипта Ant
Установка Servlet APIСледующим шагом мы устанавливаем servlet API, опять же сделав симлинк реальной директории, где распаковали, на требуемое имя директории:
Я был готов построить библиотеки jakarta servlet, используя скрипт build.sh. Но это был именно тот момент, когда я вынужден был пойтина небольшой "хак", чтобы справиться с двумя ошибками, касающимися библиотек:
Сообщения об ошибках выглядят разными, но на самом деле
они оба ссылаются на то, что библиотеки не были найдены. Первое
сообщение относится к библиотеке ant.jar, второе - к "потерянной"
tools.jar. Чтобы решить эту проблему я создал два симлинка
под $JAVA_HOME/jre/lib/ext, позволив Java найти заново созданные
библиотеки ant.jar и tools.jar.
Еще я знаю два варианта борьбы с этой проблемой, которые должны работать (но у меня это не получилось сделать):
После создания этих симлинков следующая команда работает прекрасно:
Вот вывод скрипта сборки сервлета
Построение TomcatНаконец, момент истины, построение пакета Jakarta-Tomcat. У меня все еще есть одна ошибка,
Смысл этого сообщения об ошибке, в отличие от других, очевиден. После создания симлинков на на bin-директорию jakarta-ant работает безупречно.
Здесь вывод скрипта построения Tomcat. Теперь вы можете cd в $JAKARTA_HOME/dist/tomcat/bin и запустить startup.sh .
Примерно также остановка:
Поздравляю! После запуска начального скрипта, вы можете увидеть сраницу приветствия, указав браузеру на вебсервер, порт 8080 (по умолчанию).
Бродя по этим страничкам, можно посмотреть на скриншоты примеров сервлетов и Java Server Pages. Это процедура, конечно, - на любителя подразнить себя, потому что, глядя на скриншоты, постоянно возникает соблазн попробовать позапускать демки. Но, с другой стороны, это все-таки здорово посмотреть, на что собственно говоря способен Jakarta Tomcat.
Работает!В настоящий момент у вас запущено два сервера: простой вебсервер, "слушающий" порт 8080, и сервер приложения, являющегося контейнеров для сервлетов, который слушает порт 8007. Первое, что меня заинтересовало - это то, что все установлено рутом. Сопровождающая документация предлагает запускать сервер как "nobody", но мне казалось, что специальный пользователь jakarta, аналогично юзеру database, будет хорошим решением, так как для него можно установить переменные окружения. Имея специального юзера jakarta просто для сервлетов, можно оставить конфигурацию в домашней директории ~jakarta. Это будет тем более полезно, если в системе установлены другие версии javaВо всяком случае, все это довольно просто. После того, как юзер jakarta установлен, как показано, вы можете запустить jakarta под одноименным пользователем, и до тех пор, пока он использует непривилегированные порты, у вас не будет проблем. Хотя я подумал, что права доступа могли бы быть еще более аскетичными, чтобы только юзер jakarta мог запускать контейнер для сервлетов, так что я остановил сервер и изменил права доступа следующим образом:
Можно, конечно, установить и пароли, но так как руту все эти пароли, что есть что нет, то меня это мало волнует. Я решил сузить некоторые права доступа по использованию этого скрипта. Теперь только юзер jakarta может стартовать или остановить сервлеты и страницы Java сервера. Переменные окружения, установленные в /etc/profile или /etc/profile.localб теперь могут быть в ~jakarta/.profile или ~jakarta/.bash_profile, оставляя право выбора иной версии java другим пользователям и уменьшая число переменных окружения. Теперь, когда Tomcat запущен, вы можете поэкспериментировать с изменениями в конфигурации. Здесь много опций, и конечно, так как Jakarta - это проект на базе Apache, он разработан, чтобы его было легко интегрировать с Apache. Просмотрите руководство пользователя, там есть несколько хороших примеров, также, консультации по этому проекту можно получить на сайте. XML - "родной" формат его конфигурационных файлов, и вам нужно будет пройти в аварийном порядке курс изучения XML, но этого курса будет недостаточно. Чтобы начать, см. конфигурационные файлы "server.xml" и "web.xml". Итак, добро пожаловать в мир Java Server Pages и Servlets. Вы найдете, что это хорошо продуманная и интересная технология. Удачи.
Ссылки:
Allan PedaAllan имеет счастье пользоваться Linux примерно с 1995 года, немного позже он открыл для себя Perl. Сейчас он работает экспертом-консультантом по Linux в Нью-Йорке. Алану нравится серфинг и плавание на парусных судах. Также он мечтает о том, как однажды он приобретет свою собственную яхту и будет на ней плавать в тихих водах Коста Рики
| |||||||||||||||||||||||||||||||||
Copyright © 2001, Allan Peda. Copying license http://www.linuxgazette.com/copying.html Published in Issue 69 of Linux Gazette, August 2001 | |||||||||||||||||||||||||||||||||
Вернуться на главную страницу |