- Tomcat в курсі Javarush
- Tomcat – що це?
- Компоненти Tomcat
- Установка Tomcat
- Як створити веб-додаток
- Як вбудувати програму в працюючий сервер
- Користування Tomcat для розробки
- Додаткові посилання
Tomcat в курсі Javarush
Tomcat вивчається на 9 рівні квесту Java Collections у курсі JavaRush. За 2 лекції Білаабо розповість, як завантажити та налаштувати Tomcat , а також зібрати перший веб-додаток .Tomcat – що це?
Tomcat — це контейнер сервлетів з відкритим кодом, який також виконує функцію веб-сервера. При першому погляді Tomcat здається досить тяжкою темою, проте це не так. Більшість програм Java запускаються за допомогою командного рядка і виконують деякі дії. Такі програми реалізують одну заздалегідь задану функцію, після чого більше не виконуються. У таких програм, як правило, є методmain
, через який їх можна запустити. Веб-програма розрахована на взаємодію з клієнтом. Якщо є запит від клієнта, він обробляється, і користувачеві надсилається відповідь. Якщо ні, програма простоює. Як реалізувати таку логіку в стандартному додатку з огляду на те, що потрібно підтримувати сесії, приймати HTTP-запити та інше? Циклwhile-true
? Ні, тут потрібне надійне рішення. Для цього існує Tomcat. Фактично він являє собою Java-додаток, який піклується про відкриття порту для взаємодії з клієнтом, настроювання сесій, кількість запитів, довжину заголовка і ще багато операцій.
Компоненти Tomcat
Tomcat має компоненти, що виконують певні функції, і про них варто знати. Давай розберемося докладніше.Catalina
Завдяки цьому компоненту у розробників з'являється можливість розгортати свої програми у контейнері. Catalina реалізує специфікацію Servlet API – основну веб-технологію у web-програмуванні Java. Фактично Catalina – це контейнер сервлетів усередині Tomcat (докладніше розглянемо це поняття нижче).Jasper
Завдяки цьому компоненту програміст використовує технологію JSP. Це як HTML-файли, тільки в них вбудований Java код, який може виконуватися в момент відправки сторінки користувачу. Це дозволяє динамічно вбудовувати у сторінку будь-які дані. Jasper перетворює Java код на HTML, а також відстежує зміни та автоматично оновлює їх.Coyote
Це важливий компонент, який прослуховує запити HTTP від клієнта на певному порту, надає ці дані для обробки в додатку, а також повертає користувачам відповіді. Тобто Coyote реалізує функціонал HTTP-сервера. Ці компоненти структурно можна описати наступною схемою: Тут “на пальцях” показано зразкову схему взаємодії компонентів. Фактично схема роботи Tomcat набагато складніша, проте для базового розуміння цього достатньо.Установка Tomcat
Щоб використовувати Tomcat у Java, його необхідно встановити у систему. Про те, як встановити Tomcat можна прочитати в цій статті, де також розглядаються інші сервери додатків. Отже, маючи працюючий Tomcat, вбудований у IDEA, можна спробувати приготувати свій перший сервлет.Як створити веб-додаток
Щоб створити веб-програму, слід дотримуватися певної структури папок. IntelliJ IDEA в меню створення проекту має функцію генерації веб-додатка. Створивши проект таким чином, можна побачити просту структуру: У src, як завжди, — вихідники, а в папці web згенеровані web.xml та index.jsp. web.xml - це інструкція Tomcat, де шукати обробники запитів та інша інформація. index.jsp — головна сторінка веб-програми, куди користувач повинен потрапити в першу чергу (йдеться про конфігурацію за умовчанням). Як перший запуск можна просто відредагувати файл index.jsp:<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
Якщо Tomcat встановлений безпосередньо в IDEA, можна запустити сервер програми: Клієнт отримує у браузер вміст файлу index.jsp, коли переходить на '/', тобто на головну сторінку. А тепер додамо посилання на сторінку, де розташовуватиметься поточний час сервера. Щоб створити свій перший сервлет, потрібно використовувати бібліотеку servlet-api.jar, яка постачається разом із Tomcat (можна знайти в папці lib). Створимо сервлет, який відображатиме на сторінці поточний час сервера. Для цього необхідно створити клас TimeWorker
. Розташуємо його в папці src/ru/codegym/tomcat:
package ru.codegym.tomcat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
public class TimeWorker extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Date date = new Date();
req.setAttribute("date", date.toString());
req.getRequestDispatcher("time.jsp").forward(req, resp);
}
}
TimeWorker
успадковується від класу HttpServlet
і перевизначає метод doGet
. У цей метод ми отримуємо два параметри – request
і response
. Як приклад request
зберігається атрибут з назвою data
і містить рядкове представлення поточної дати. Потім викликається requestDispatcher
і передаються в нього параметри request
і response
. Обробник створено. Тепер потрібно надіслати запити саме на нього. Нехай будь-який перехід /time
буде вести на сторінку time.jsp. Відкриваємо web.xml, між тегами <web-app>
вставляємо наступну конфігурацію:
<servlet>
<servlet-name>timeWorker</servlet-name>
<servlet-class>ru.codegym.tomcat.TimeWorker</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>timeWorker</servlet-name>
<url-pattern>/time</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Перший тег - servlet
визначає ім'я сервлета і вказує шлях до класу-сервлета, який оброблятиме запити. Другий тег - servlet-mapping
вказує, що сервлет з ім'ям timeWorker
буде викликатися тоді, коли надійде запит наwelcome-file-list
url /
/time
doGet
TimeWorker
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Current server time: <%=request.getAttribute("date")%></h1>
</body>
</html>
Початок класичний, однак у тегу
h1
йде звернення до об'єкта
request
, яке обрамлено
<%=
і
%>
. Це теги шаблонизації. Код, укладений у ці теги, викликається до того, як буде відправлений клієнту. Ну а об'єкти
request
і
response
доступні у таких тегах у будь-якому jsp-файлі. У цьому прикладі туди буде підставлено поточний час сервера, який передає сервлет
TimeWorker
. У файл index.jsp для зручності створюємо посилання на
/time
:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>Hello world!</h1>
<a href="/time">Узнать текущее время сервера</a>
</body>
</html>
Запускаємо приклад:
Переходимо за посиланням:
Добре, все працює. У прикладі ми реалізували перехід з головної сторінки на допоміжну, яку було передано параметр і відображено для користувача. За наявності проблем із запуском сервлетів рекомендую прочитати
цей пост , де дають поради щодо вирішення цієї проблеми. Для більш повного ознайомлення з сервлетами, рекомендуємо прочитати статті (
частина 1 ,
частина 2 ), де автор докладно розписує створення найпростішого додатку на сервлетах та jsp.
Як вбудувати програму в працюючий сервер
Незважаючи на те, що вбудований Tomcat в IDEA — зручна фіча, веб-додаток може бути перенесений на інший сервер та інший контейнер. Розглянемо варіант, коли необхідно вбудувати свою програму в сервер, що вже працює. По-перше, необхідно додатково розібрати мету та функції контейнера сервлетів . Програма, яка наведена в прикладі вище, - це веб-додаток. КласTimeWorker
- сервлет. Компоненти виконують виключно обробку запитів. Ці компоненти повинні бути вбудовані в спеціальний контейнер сервлетів.
Мета контейнера сервлетів- Підтримка сервлетів та забезпечення їх життєвого циклу. Найпростіший приклад роботи Tomcat — сканування певної папки з метою визначити, чи з'явився новий сервлет. Якщо так — ініціалізувати його та підготувати до прийому запитів від клієнтів. Якщо сервлет було оновлено, провести повторну ініціалізацію оновлення компонентів. У разі видалення сервлета — зупинити обробку запитів, видалити сервлет із Tomcat.
Функції контейнера сервлетів
- Обмін даними між сервлетом та клієнтами;
- Організація клієнтських сесій;
- створення програмного середовища для функціонування сервлета;
- Ідентифікація та авторизація клієнтів;
- У більшості випадків - управління метаданими (заголовки, методи та інше).
Установка сервлету
Tomcat приймає для обробки веб-програми на Java, які мають розширення .war. Це як jar, тільки web. Файли такого типу поєднують у собі JSP-файли, сервлети, class-файли, статичні ресурси та інше. При установці такого файлу Tomcat відбувається його розпакування, а потім запуск, тому існує сувора вимога до структури файлів у проекті. Якщо проект створено в IDEA, вся структура створена автоматично. Файл war можна створити стандартними засобами IDEA. Для цього необхідно зайти в ProjectStructure -> Artifacts -> Натиснути " + " -> WebApplication: Archive . У полі, що відкрилося, задати ім'я для підсумкового war-файлу, наприклад deployed_war. Нижче необхідно натиснути кнопку Create Manifest… Далі необхідно вказати шлях до папки веб-проекту. У ній буде створено папку META-INF, до якої буде розміщено файл MANIFEST.MF. Далі слід натиснути Apply та Ok . Щоб зібрати проект у war-файл, слід у вкладці Build вибрати опцію Build Artifact : У полі, що з'явилося, потрібно натиснути на deployed_war . Потім розпочнеться складання проекту та Intellij IDEA створить папку out, в якій з'явиться папка artifacts з ім'ям нашого артефакту. У цій папці лежатиме файл deployed_war.war: Тепер можна деплоїти цей файл у Tomcat. Деплой програми найпростіше виконати з веб-інтерфейсу Tomcat. Просто натисніть кнопку вибору файлуна вкладці Deploy, перейдіть до місцезнаходження файлу WAR і виберіть його, потім натисніть кнопку розгортання . В обох випадках, якщо все піде добре, консоль Tomcat повідомить нам, що розгортання пройшло успішно приблизно таким висновком до консолі: INFO:Користування Tomcat для розробки
Для розробників контейнери сервлетів мають величезну роль, оскільки вирішують цілий спектр проблем. Для програмування Java Tomcat забезпечує кілька серйозних переваг:-
Найголовніше, Tomcat може виконувати роль повноцінного веб-сервера. Завдяки цьому розгортання додатків відбувається набагато швидше, ніж було раніше. Також Tomcat може виступати в ролі класичного контейнера сервлетів, який можна вбудувати у більший веб-сервер.
-
Tomcat сприяє обміну даними між клієнтом та сервлетом, забезпечує програмний контекст для веб-додатків, бере на себе функції ідентифікації та авторизації клієнтів, створення сесій для кожного з них.
-
Надає дуже зручне керування JSP-сторінками. Фактично веб-сервер може віддавати лише HTML. Jasper, компонент Tomcat, компілює код, що міститься в шаблонних тегах JSP-сторінок до коректного HTML-файлу, який отримує клієнт. Вся логіка шаблонизації знаходиться всередині Tomcat, дозволяючи навіть додавати складні конструктори в класичну форму HTML.
main
-методу. На перший погляд, якщо дивитися на приклади вище, можна. Наш сервлет було виконано без методу
main
. Однак, це не так. Tomcat має власний метод
main
, який викликається при запуску сервера. На таке запитання можна потрапити на співбесіді.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ