Tomcat: умный котег для Java-программиста

Помня свое обязательство рассказать про написанный на Java и для Java веб-сервер Tomcat, начать хотел бы с такого понятия, как сервлет. Появилось оно в конце 90-х, когда популярность Java была, можно сказать, в зените и в ходу у веб-разработчиков были апплеты. Они представляли собой встраиваемые в html-странички "приложеньица", умевшие примерно то же, что нынешние Flash и AJAX. Java всегда стремилась проникнуть во все сферы программирования, так что написанные на этом языке программки, исполняемые на стороне сервера и призванные заменить популярные тогда perl-скрипты (CGI) не заставили себя долго ждать. Сначала их "прикручивали" к веб-серверам любительскими способами (вот ссылка, датируемая 1998 годом для интересующихся историей Java). Потом фирма Sun, идя навстречу пожеланиям трудящихся, разработала Servlets API, позволяющее создавать на стороне сервера сколь угодно сложные и при этом удобно организованные обработчики веб-запросов.

 

Сервлет написать очень просто (см., например, здесь). Но нужен еще сервер, который эти сервлеты содержит и управляет их жизненным циклом. Им и является Tomcat. Написан он на Java, разработан в недрах сообщества Apache. Взять его можно, например, здесь. Последняя версия - 6.018 и нужно отметить, что уж с год, наверно, этот продукт не обновлялся. Видимо, это связано с вытеснением "котега" такими продуктами, как JBoss или даже такими новомодными вещами, как Google Servlets Engine (на которой, если не ошибаюсь, построен сервис Gmail). И все-таки Tomcat - очень популярное, достаточно легкое в освоении и полноценное с точки зрения веб-серверного функционала решение для тех, кто предан своему языку программирования и не хочет дополнительно пудрить себе мозги такими вещами, как PHP (чур меня, чур!).

Tomcat поддерживает работу на уровне сессий, умеет взаимодействовать практически с любыми базами данных, обрабатывать JSP (html-страницы с встроенными кусками компилируемого "на лету" java-кода на манер PHP, ASP и т.п.), полноценно работает по https . Короче говоря, как устанавливать.

Скачав архив, распакуйте его... куда-нибудь. Я использую особый каталог в домашней директории и, кстати говоря, всегда запускаю Tomcat не от имени пользователя root, а от имени обычного пользователя (например, tomcat).  Вся настройка сводится к тому, что вы выясняете, где у вас "живет" Java и прописываете этот путь в переменную окружения JAVA_HOME. Я устанавливаю Java (JDK или JRE) в каталог /opt/java/sun. Следовательно, настройка Tomcat у меня заключается в добавлении в начало файла bin/setclasspath.sh (относительно каталога, куда распакован Tomcat) строки

JAVA_HOME=/opt/java/sun

В том же томкатовском каталоге bin лежат скрипты для запуска (./startup.sh) и остановки (./shutdown.sh) сервера. Кстати говоря, там же есть и версии для "виндусятников" (startup.bat и shutdown.bat), поскольку Tomcat'у, как и любому Java-приложению абсолютно пофиг на какой платформе работать. Итак, переходим в каталог bin распакованного дистрибутива, правим setclasspath.sh и вводим ./startup.sh. После этого в браузере можно ввести http://localhost:8080 и увидеть корневую страничку локального Tomcat'а со ссылками на документацию, примеры и даже панель администратора (http://localhost:8080/manager), с которой можно управлять отдельными веб-приложениями, видеть сколько соединений с сервером установлено и т.д. Правда, войти с первого раза в панеть не получится: Tomcat попросит вас сначала настроить один конфигурационный файлик (прописать логин/пароль для доступа), но это так просто, что пусть останется маленьким "домашним заданием".

Структура каталогов Tomcat такова:

Про bin мы уже поговорили; в conf, понятное дело, - конфигурационные файлы, в которых по первости нет нужды ничего менять; в libs - библиотеки (например, драйвера для связи с базами данных); в logs - логи (самый главный в процессе отладки - catalana.out, в него попадают все сообщения об ошибках и всевозможные отладочные System.out.println(...)); temp и work - системные каталоги, куда Tomcat пишет какую-то свою информацию и человеку там вообще делать нечего. А вот webapps - это как раз то место, куда программист выкладывает свои веб-приложения. Выкладывать их можно в виде WAR-архивов (отличаются от Jar-архивов только наличием в них конфигурационного файла WEB-INF/web.xml). Обнаружив такой архив, Tomcat его самостоятельно распаковывает и запускает веб-приложение (совокупность html-страничек, а также сервлетов и jsp). Можно закидывать веб-приложения и напрямую, тупым копированием (иногда, правда, приходится перезапускать Tomcat, чтобы он увидел новые каталоги внутри webapps). Безымянное "корневое" веб-приложение сервера находится в каталоге webapps/ROOT.

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

В заключение хочу поделиться тонкостью, которая не лежит на поверхности, но рано или поздно начинающий пользователь Tomcat с ней сталкивается. Когда нужно организовать доменное имя, требуется, чтобы веб-сервер работал на 80-м порту, а Tomcat по умолчанию работает на 8080. Можно, конечно, переконфигурировать, но огда придется запускать нашего котега от имени пользователя root, что нежелательно. Решение - прописать в файрволе следующее правило:

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

Это если, конечно, на 80-м порту не болтается у вас стандартный Apache, что, кстати, очень даже не исключено: два веб-сервера вполне могут мирно уживаться на одном хосте. Их можно просто разнести по разным сетевым интерфейсам (если таковых больше чем один).

Ну типа и всё. Если есть вопросы - велкам к нашим полкам!

Привет Супер, пиши еще. все

Привет

Супер, пиши еще. все доходно разъяснил.

Отправить комментарий

КАПЧА
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Enter the characters shown in the image.