LXF171:Рубрика сисадмина
Olkol (обсуждение | вклад) (Новая страница: « Категория: Постояные рубрики '''По рецептам доктора Брауна''' == Эзотерическое сис…») |
Olkol (обсуждение | вклад) (→Страницы Java) |
||
(не показаны 9 промежуточных версий 1 участника) | |||
Строка 19: | Строка 19: | ||
Энди, будь добр, напиши мне программу распечатки ‘hello world’ | Энди, будь добр, напиши мне программу распечатки ‘hello world’ | ||
− | Она нужна мне к утру.}} | + | Она нужна мне к утру. |
+ | chris.linuxformat@gmail.com}} | ||
+ | |||
+ | ===Коротко о Tomcat=== | ||
+ | |||
+ | ''Берегите мышь — мы выпускаем Tomcat, знакомимся с Java и пишем сервлет''. | ||
+ | |||
+ | Начиная с самого начала: Tomcat [англ. котяра] — это web-сервер. Как и Apache, он владеет языком протокола HTTP и отвечает на запросы браузера о статическом контенте — HTML-файлах и изображениях. Но Tomcat более узко специализирован, чем Apache: его истинное призвание — быть контейнером сервлетов Java. Это означает, что он способен хранить динамически генерируемые web-страницы, использующие Java как язык на стороне сервера. Существует стандарт, подробно описывающий среду, где будут запускаться эти приложения, и Tomcat изначально разрабатывался как реализация данного стандарта. | ||
+ | {{Врезка|right|Заголовок= |Ширина=20%|Содержание= Страницы Java | ||
+ | |||
+ | Tomcat также может выдавать содержимое, структурированное в виде серверных страниц Java, которые состоят из HTML-разметки со вставками кода на Java в тэгах < % и %>. Эта концепция расширяется с помощью стандартной библиотеки тэгов (JSTL); тэги реализуют операции, общие для многих web-приложений, такие как обработка XML-документов и доступ к реляционным базам данных. Различие между сервлетом и JSP в целом в том, что сервлет включает HTML в каркас на Java, тогда как JSP включает код Java в каркас на HTML. Подход JSP будет более знакомым вам, если вы уже поднаторели, скажем, в ASP, .NET или LAMP. | ||
+ | |||
+ | > Установите эти пакеты с yum, чтобы получить рабочую конфигурацию Tomcat. Пакет javasdk нужен только для компиляции своих сервлетов. Но вы же будете их делать, правда? | ||
+ | }} | ||
+ | В первой части нашей серии из двух статей мы начнем с установки пакетов, необходимых для запуска Tomcat, а затем посмотрим, как развернуть простое web-приложение из двух страниц. Как и на других своих уроках в этом журнале, я буду работать с чистой установкой CentOS 6.2, и если вы хотите следовать за мной, можете начать с установки CentOS на виртуальную машину. | ||
+ | [[Файл:LXF171.sysadmin.tomcat__opt3.png |right | thumb|400px|> Установите эти пакеты с yum, чтобы получить рабочую конфигурацию Tomcat. Пакет javasdk нужен только для компиляции своих сервлетов. Но вы же будете их делать, правда?]] | ||
+ | ===Собираем части вместе=== | ||
+ | |||
+ | Сперва установим необходимые компоненты. Все необходимое есть в репозиториях 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> | ||
+ | |||
+ | <h1> Простой пример формы </h1> | ||
+ | |||
+ | <form action=”pootle” method=”GET”> | ||
+ | |||
+ | Введите ваше имя: | ||
+ | |||
+ | <INPUT type=”text” name=”name” /> | ||
+ | |||
+ | <INPUT type=”submit” name=”Submit” value=”Submit Name”> | ||
+ | |||
+ | </form> | ||
+ | |||
+ | </body> | ||
+ | |||
+ | </html> | ||
+ | |||
+ | {{Врезка|left|Заголовок= |Ширина=30%|Содержание=А если не работает? | ||
+ | |||
+ | Если что-то работает не так, как должно, попробуйте поискать сообщения об ошибках в /var/log/tomcat/catalina.out. Также учтите, что браузер кэширует страницы, и это может дурно повлиять на вашу стратегию тестирования, если тестировать невнимательно. Типичный сценарий таков: вы запускаете тест, видите в браузере ошибку, исправляете ошибку в программе, снова запускаете тест, но все еще видите (кэшированную) страницу с ошибкой. Если у вас есть малейшее подозрение, что именно это и происходит, советую очистить кэш браузера. Например, в Firefox выберите Tools > Clear Recent History (Инструменты > Очистить недавнюю историю). }} | ||
+ | |||
+ | ====Сам сервлет==== | ||
+ | |||
+ | Теперь займемся кодом нашего сервлета. В нем всего одна «активная» строка — она обращается к данным, введенным в форму. Однако чтобы быть сервлетом, класс 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(“<h1> Hello “ + request.getParameter(“name”) + “</h1>”); | ||
+ | |||
+ | 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 таким образом (я немного сократил вывод): | ||
+ | [[Файл:LXF171.sysadmin.tomcat__opt4.png |right | thumb|600px|> Это стандарт! Web-приложения Java должны быть организованы в определенную структуру каталогов, показанную здесь. ]] | ||
+ | $ 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 | ||
+ | {{Врезка|left|Заголовок= |Ширина=40%|Содержание=Соперники | ||
+ | |||
+ | Tomcat — отнюдь не единственный контейнер сервлетов. Альтернативы с открытым исходным кодом включают Jetty (проект, ныне поддерживаемый Eclipse Foundation) и GlassFish (изначально созданный Sun, а теперь коммерческий продукт от Oracle, доступный также в поддерживаемой сообществом открытой версии). Кроме того, есть JBoss (сейчас им владеет Red Hat), Oracle Web Server (который BEA WebLogic продала Oracle), сервер Resin от Caucho и Websphere от IBM. }} | ||
+ | Сейчас наше приложение FormExample уже не развернуто. Затем перейдите на домашнюю страницу Tomcat и на этой странице воспользуйтесь ссылкой для входа в приложение менеджера. Прокрутите страницу вниз до раздела Deploy [Развертывание]. Введите /FormExample в окне Context Path [Контекстный путь] и /home/chris/FormExample.war в поле WAR URL, затем нажмите Deploy [Развернуть]. Прокрутите страницу вверх и проверьте наличие сообщения, подтверждающего, что приложение было развернуто. (Если не получилось, проверьте права доступа к домашнему каталогу и к файлу и убедитесь, что они доступны для чтения пользователю tomcat.) Теперь приложение должно снова стать активным. | ||
+ | |||
+ | На этом пока все. Через месяц мы поработаем с конфигурационным файлом сервера, установим несколько фильтров для входа в систему и управления доступом и посмотрим, как спрятать Tomcat за более традиционным web-сервером вроде Apache. Увидимся! | |
Текущая версия на 04:28, 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
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Сейчас наше приложение FormExample уже не развернуто. Затем перейдите на домашнюю страницу Tomcat и на этой странице воспользуйтесь ссылкой для входа в приложение менеджера. Прокрутите страницу вниз до раздела Deploy [Развертывание]. Введите /FormExample в окне Context Path [Контекстный путь] и /home/chris/FormExample.war в поле WAR URL, затем нажмите Deploy [Развернуть]. Прокрутите страницу вверх и проверьте наличие сообщения, подтверждающего, что приложение было развернуто. (Если не получилось, проверьте права доступа к домашнему каталогу и к файлу и убедитесь, что они доступны для чтения пользователю tomcat.) Теперь приложение должно снова стать активным.
На этом пока все. Через месяц мы поработаем с конфигурационным файлом сервера, установим несколько фильтров для входа в систему и управления доступом и посмотрим, как спрятать Tomcat за более традиционным web-сервером вроде Apache. Увидимся! |