LXF171:Рубрика сисадмина
Olkol (обсуждение | вклад) (→Иерархия развертывания) |
Olkol (обсуждение | вклад) (→Форма) |
||
Строка 81: | Строка 81: | ||
</html> | </html> | ||
+ | |||
+ | {{Врезка|left|Заголовок= |Ширина=30%|Содержание=А если не работает? | ||
+ | |||
+ | Если что-то работает не так, как должно, попробуйте поискать сообщения об ошибках в /var/log/tomcat/catalina.out. Также учтите, что браузер кэширует страницы, и это может дурно повлиять на вашу стратегию тестирования, если тестировать невнимательно. Типичный сценарий таков: вы запускаете тест, видите в браузере ошибку, исправляете ошибку в программе, снова запускаете тест, но все еще видите (кэшированную) страницу с ошибкой. Если у вас есть малейшее подозрение, что именно это и происходит, советую очистить кэш браузера. Например, в Firefox выберите Tools > Clear Recent History (Инструменты > Очистить недавнюю историю). }} | ||
====Сам сервлет==== | ====Сам сервлет==== |
Версия 04:11, 18 ноября 2018
|
|
|
По рецептам доктора Брауна
Содержание |
Эзотерическое системное администрирование из причудливых заворотов кишок серверной
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Коротко о Tomcat
Берегите мышь — мы выпускаем Tomcat, знакомимся с Java и пишем сервлет.
Начиная с самого начала: Tomcat [англ. котяра] — это web-сервер. Как и Apache, он владеет языком протокола HTTP и отвечает на запросы браузера о статическом контенте — HTML-файлах и изображениях. Но Tomcat более узко специализирован, чем Apache: его истинное призвание — быть контейнером сервлетов Java. Это означает, что он способен хранить динамически генерируемые web-страницы, использующие Java как язык на стороне сервера. Существует стандарт, подробно описывающий среду, где будут запускаться эти приложения, и Tomcat изначально разрабатывался как реализация данного стандарта.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
В первой части нашей серии из двух статей мы начнем с установки пакетов, необходимых для запуска Tomcat, а затем посмотрим, как развернуть простое web-приложение из двух страниц. Как и на других своих уроках в этом журнале, я буду работать с чистой установкой CentOS 6.2, и если вы хотите следовать за мной, можете начать с установки CentOS на виртуальную машину.
Собираем части вместе
Сперва установим необходимые компоненты. Все необходимое есть в репозиториях CentOS, и нам нужно лишь вытянуть оттуда необходимые пакеты с помощью yum. В таблице приведены пять пакетов, которые нам потребуются; итак, приступайте и выполните команду yum install с каждым из них. Я подожду, пока вы закончите...
Ну вот, Tomcat установлен, и нужно запустить сервер, позаботившись, чтобы после перезагрузки системы он запускался автоматически. Нам помогут следующие две команды (запустите их от имени суперпользователя-root):
# service tomcat6 start
# chkconfig tomcat6 on
Так как мы установили пакет tomcat6-webapps, который формирует домашнюю страницу по умолчанию, теперь можно открыть браузер, зайти на http://localhost:8080 и получить в награду домашнюю страницу, показанную на снимке экрана. Учтите, что по умолчанию Tomcat слушает порт 8080 (а не 80), поэтому его нужно указать в адресе. На этой странице есть ссылки на документацию Tomcat (которую мы также установили, из пакета tomcat6-docswebapps), и здесь вы можете легко увлечься и потратить остаток дня на чтение. Также есть ссылки на несколько примеров кода.
Наш первый сервлет
Приступим к делу и посмотрим, как развернуть на Tomcat простой сервлет. Чтобы немного усложнить традиционную “hello world”, мы создадим web-приложение из двух страниц. Первая страница — чистый HTML: на ней есть форма с текстовым полем, где пользователь должен ввести свое имя, и кнопка для отправки формы сервлету. Вторая страница — сервлет. Она просто приветствует пользователя по имени, полученному из текстового поля на форме.
Форма
Начнем с формы. Ниже приведен ее код. Пока просто поместите ее в файл formexample.html в своем каталоге home. Позже мы скопируем ее куда полагается.
<html>
<head>
<title> Простой пример формы </title>
</head>
<body>
Простой пример формы
<form action=”pootle” method=”GET”>
Введите ваше имя:
<INPUT type=”text” name=”name” />
<INPUT type=”submit” name=”Submit” value=”Submit Name”>
</form>
</body>
</html>
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Сам сервлет
Теперь займемся кодом нашего сервлета. В нем всего одна «активная» строка — она обращается к данным, введенным в форму. Однако чтобы быть сервлетом, класс Java должен наследоваться от базового класса HttpServlet. Поэтому вокруг этой единственной строки кода потребуется небольшая обертка. Для начинающих — нам надо определить класс, наследуемый от HttpServlet. Внутри этого класса следует написать метод doGet(), который Tomcat будет вызывать, когда браузер пользователя выполнит запрос HTTP GET к нашей странице. Также можно написать метод doPost() для обработки запросов HTTP POST. Затем идет внутренний слой обертки — он необходим, потому что мы хотим вернуть браузеру правильно сформированный документ HTML, и нужно включить основные структурные тэги HTML, такие как <head> и <body>.
Короче, вот каким получается код нашего сервлета (номера строк приведены для удобства ссылок, они не являются частью файла):
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4. /* Очень простой сервлет для доступа в поля формы */
5. public class FormExample extends HttpServlet {
6. public void doGet(HttpServletRequest request,
7. HttpServletResponse response)
8. throws IOException, ServletException
9. {
10. response.setContentType(“text/html”);
11. PrintWriter out = response.getWriter();
12. out.println(“<html> <head>”);
13. out.println(“<title> Form Example </title>”);
14. out.println(“</head> <body>”);
15. out.println(“Hello “ + request.getParameter(“name”) + “
”);16. out.println(“</body> </html>”);
17. }
18. }
Рассмотрим основные строки этого файла. В строке 5 задается наш класс (FormExample), а строки 6 – 17 содержат метод doGet(). Этот метод получает два параметра: request (строка 6) и response (строка 7). Мы используем объект request для доступа к полю формы (строка 15), а объект response — для доступа к потоку PrintWriter (строка 11), с помощью которого содержимое отправляется обратно браузеру (строки 12 – 16).
Если вы следуете за мной, создайте этот файл, назовите его FormExample.java и скомпилируйте его командами
$ export CLASSPATH=.:/usr/share/java/servlet.jar
$ javac FormExample.java
В том случае, если все пройдет хорошо, вы будете вознаграждены файлом FormExample.class. Он содержит скомпилированный байт-код Java для этого класса. Учтите, что Java разборчива насчет имен файлов. Код класса FormExample обязан находиться в файле FormExample.class.
Еще один файл, без которого нам никак не обойтись для запуска приложения — дескриптор развертывания web.xml. В нем можно задать все, что угодно, но мы лишь связываем «шаблон URL-адреса» с именем сервлета и имя сервлета — с классом, который его реализует. (Конечно, на XML это выражается гораздо длиннее.) Для нашего примера дескриптор выглядит так:
<web-app>
<description> Form Example Servlet </description>
<display-name> Form Example </display-name
<servlet>
<servlet-name>FormExampleServlet</servlet-name>
<servlet-class>FormExample</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FormExampleServlet</servlet-name>
<url-pattern>/pootle</url-pattern>
</servlet-mapping>
</web-app>
Иерархия развертывания
У нас есть три файла (форма, сервлет и дескриптор развертывания), и мы готовы развернуть приложение. В спецификации J2EE определяется очень четкая структура каталогов, показанная на рисунке. Чтобы упростить себе жизнь, мы размещаем «корневой каталог документа» приложения в var/lib/tomcat6/webapps, потому что любое приложение в этом каталоге автоматически развертывается при запуске Tomcat.
Базовый набор каталогов можно создать всего несколькими командами:
# cd /var/lib/tomcat6/webapps
# mkdir -p FormExample/WEB-INF/classes
Здесь можно немного поиграть с правами доступа, чтобы получить возможность копировать файлы в этот каталог, не будучи администратором. Вот возможное решение. Для начала сделайте вашего пользователя членом группы tomcat (эту команду нужно выполнять от имени root):
# usermod -a -G tomcat chris
Замените имя пользователя на свое (если только вам не повезло быть моим тезкой). Потом измените группу файлов в каталоге развертывания на tomcat и добавьте право для группы на запись таким образом:
# cd /var/lib/tomcat6/webapps
# chown -R root:tomcat FormExample
# chmod -R g+w FormExample
Далее вернитесь в каталог, где компилировали файл Java, и скопируйте его в должный каталог:
$ cp FormExample.class /var/lib/tomcat6/webapps/FormExample/WEB-INF/classes
(Кстати, вы ведь знаете, как пользоваться автодополнением, не так ли? Меня очень огорчит, если кто-то набирал всю строку вручную...)
Затем скопируйте форму в должный каталог. Это простой статический контент, и он размещается в каталоге HelloWorld, но вне каталога WEB-INF. Для доступа к нашему приложению мы просто обратимся к этому файлу.
$ cp formexample.html /var/lib/tomcat6/webapps/FormExample
Наконец, скопируйте туда же дескриптор развертывания. Этот файл должен попасть в каталог WEB-INF:
$ cp web.xml /var/lib/tomcat6/webapps/FormExample/WEBINF
Мы скопировали все файлы в должный каталог, и самый простой способ развернуть приложение — перезапустить сервер:
# service tomcat6 restart
Теперь (настал момент истины!) откройте http://localhost:8080/FormExample/formexample.html, введите свое имя в текстовое поле и нажмите на кнопку, чтобы отправить форму сервлету.
Можно сделать ссылку на форму под названием index.html таким образом:
$ cd /var/lib/tomcat6/webapps/FormExample
$ ln formexample.html index.html
Это позволит вам обращаться к приложению по более короткому адресу — http://localhost:8080/FormExample.
Если вы хотите создать чуть более динамичную страницу, вернитесь к исходному коду сервлета и добавьте строку
out.println(“The time is “ + new java.util.Date());
которая выведет текущие время и дату. Затем перекомпилируйте файл и скопируйте его в должное место в иерархии развертывания. Перезапустите сервер, и приложение будет развернуто.
Менеджер
Перезапускать сервер для каждого разворачивания приложения — довольно брутальная вещь. Сейчас я покажу способ получше. В Tomcat есть приложение Менеджер (мы установили его как часть пакета tomcat6-admin-webapps), доступное на http://localhost:8080/manager/html или по ссылке «Tomcat Manager» на домашней странице. Однако прежде чем им воспользоваться, нужно кое-что настроить, потому что Tomcat даст доступ к этому приложению, только если вы аутентифицируетесь как пользователь — член роли ‘manager’, а в конфигурации по умолчанию такого пользователя нет. Чтобы это исправить, откройте файл /etc/tomcat6/tomcat-users.xml и добавьте туда такие строки:
<role rolename=”manager”/>
<user username=”tomcat” password=”tomcatpw” roles=”manager”/>
Убедитесь, что добавляете эти строки в тэг <tomcatusers>. Имя пользователя не имеет значения, если он член роли manager. Перезапустите сервер еще раз и перейдите по ссылке ‘Tomcat Manager’ на домашней странице. Откроется окно менеджера web-приложений Tomcat со списком всех запущенных приложений. Здесь можно остановить или запустить приложение, перезагрузить или свернуть его.
Это также можно делать с командной строки, заходя на соответствующие адреса менеджера. Например, чтобы получить список всех работающих приложений, можно запустить wget таким образом (я немного сократил вывод):
$ wget --user tomcat --password tomcatpw -O - http://localhost:8080/manager/list
OK - Listed applications for virtual host localhost
/:running:0:ROOT
/manager:running:6:manager
/sample:running:0:sample
/docs:running:0:docs
/examples:running:0:examples
/FormExample:running:0:FormExample
/host-manager:running:0:host-manager
/HelloWorld:running:0:HelloWorld
Другой пример — перезагрузим наше приложение FormExample:
$ wget --user tomcat --password tomcatpw -O - http://localhost:8080/manager/reload?path=/FormExample
OK - Reloaded application at context path /FormExample
WAR [война] (и мир)
Альтернатива развертыванию приложения в иерархию «распакованных» каталогов — создание единого файла WAR и развертывание его. Файл WAR (Web Application Archive — архив web-приложения) — просто файл JAR (Java Archive — архив Java) иерархии развертывания. Файлы JAR похожи на архивы tarball, и синтаксис команды jar, которая их создает, почти полностью идентичен синтаксису tar.
Преимущество файлов WAR перед файлами tarball в том, что можно распространять и разворачивать целое web-приложение в одном файле. Один из недостатков — сложнее будет выполнять небольшие изменения (например, изменить всего одну строку кода в одном сервлете), потому что каждый раз после этого придется снова генерировать и развертывать файл WAR.
Давайте развернем наше приложение FormExample в виде файла WAR. Сначала создайте архив. Так как приложение уже разложено по необходимой структуре каталогов, это легко:
$ cd /var/lib/tomcat6/webapps/FormExample
$ jar cf ~/FormExample.war .
Здесь я создал архив в своем домашнем каталоге. Проверьте содержимое архива командой
$ jar tf ~/FormExample.war
Теперь удалите исходную структуру каталогов и перезапустите Tomcat (от имени root):
# rm -r /var/lib/tomcat6/webapps/FormExample
# service tomcat6 restart
Сейчас наше приложение FormExample уже не развернуто. Затем перейдите на домашнюю страницу Tomcat и на этой странице воспользуйтесь ссылкой для входа в приложение менеджера. Прокрутите страницу вниз до раздела Deploy [Развертывание]. Введите /FormExample в окне Context Path [Контекстный путь] и /home/chris/FormExample.war в поле WAR URL, затем нажмите Deploy [Развернуть]. Прокрутите страницу вверх и проверьте наличие сообщения, подтверждающего, что приложение было развернуто. (Если не получилось, проверьте права доступа к домашнему каталогу и к файлу и убедитесь, что они доступны для чтения пользователю tomcat.) Теперь приложение должно снова стать активным.
На этом пока все. Через месяц мы поработаем с конфигурационным файлом сервера, установим несколько фильтров для входа в систему и управления доступом и посмотрим, как спрятать Tomcat за более традиционным web-сервером вроде Apache. Увидимся! |
Страницы Java
Tomcat также может выдавать содержимое, структурированное в виде серверных страниц Java, которые состоят из HTML-разметки со вставками кода на Java в тэгах < % и %>. Эта концепция расширяется с помощью стандартной библиотеки тэгов (JSTL); тэги реализуют операции, общие для многих web-приложений, такие как обработка XML-документов и доступ к реляционным базам данных. Различие между сервлетом и JSP в целом в том, что сервлет включает HTML в каркас на Java, тогда как JSP включает код Java в каркас на HTML. Подход JSP будет более знакомым вам, если вы уже поднаторели, скажем, в ASP, .NET или LAMP.
> Установите эти пакеты с yum, чтобы получить рабочую конфигурацию Tomcat. Пакет javasdk нужен только для компиляции своих сервлетов. Но вы же будете их делать, правда?
А если не работает?
Если что-то работает не так, как должно, попробуйте поискать сообщения об ошибках в /var/log/tomcat/catalina.out. Также учтите, что браузер кэширует страницы, и это может дурно повлиять на вашу стратегию тестирования, если тестировать невнимательно. Типичный сценарий таков: вы запускаете тест, видите в браузере ошибку, исправляете ошибку в программе, снова запускаете тест, но все еще видите (кэшированную) страницу с ошибкой. Если у вас есть малейшее подозрение, что именно это и происходит, советую очистить кэш браузера. Например, в Firefox выберите Tools > Clear Recent History (Инструменты > Очистить недавнюю историю).