Tomcat в Java

Стаття з групи Random UA
учасників
У якийсь момент кожен розробник набирає достатньо навичок, і в нього з'являється думка про створення власного проекту, щоб застосувати знання на практиці. Найлегше взятися за веб-проект, оскільки реалізація веб-додатку не скута будь-якими обмеженнями, як, наприклад, десктопні програми. Клієнту потрібен лише браузер, і він може взаємодіяти з додатком, не скачуючи будь-яких дистрибутивів. Без реєстрації та смс, як кажуть (хоча це залежить від самого додатку). Tomcat в Java - 1Так ось, для того, щоб реалізувати на Java хорошу веб-додаток, не обійтися без інструмента під назвою 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 в Java - 2Тут “на пальцях” показано зразкову схему взаємодії компонентів. Фактично схема роботи Tomcat набагато складніша, проте для базового розуміння цього достатньо.

Установка Tomcat

Щоб використовувати Tomcat у Java, його необхідно встановити у систему. Про те, як встановити Tomcat можна прочитати в цій статті, де також розглядаються інші сервери додатків. Отже, маючи працюючий Tomcat, вбудований у IDEA, можна спробувати приготувати свій перший сервлет.

Як створити веб-додаток

Щоб створити веб-програму, слід дотримуватися певної структури папок. IntelliJ IDEA в меню створення проекту має функцію генерації веб-додатка. Створивши проект таким чином, можна побачити просту структуру: Tomcat в Java - 3У 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, можна запустити сервер програми: Tomcat в Java - 4Клієнт отримує у браузер вміст файлу 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буде викликатися тоді, коли надійде запит на url/time. Третій тег — вказує файл, який буде викликаний під час переходу на . Це необхідно налаштовувати, якщо існує потреба змінити файл за замовчуванням. Тут включено для прикладу. Тепер при переході на викликатиметься метод у класі і віддавати сторінку time.jsp… якої немає. Створимо її поряд з index.jsp: 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>
Запускаємо приклад: Tomcat в Java - 5Переходимо за посиланням: Tomcat в Java - 6Добре, все працює. У прикладі ми реалізували перехід з головної сторінки на допоміжну, яку було передано параметр і відображено для користувача. За наявності проблем із запуском сервлетів рекомендую прочитати цей пост , де дають поради щодо вирішення цієї проблеми. Для більш повного ознайомлення з сервлетами, рекомендуємо прочитати статті ( частина 1 , частина 2 ), де автор докладно розписує створення найпростішого додатку на сервлетах та jsp.

Як вбудувати програму в працюючий сервер

Незважаючи на те, що вбудований Tomcat в IDEA — зручна фіча, веб-додаток може бути перенесений на інший сервер та інший контейнер. Розглянемо варіант, коли необхідно вбудувати свою програму в сервер, що вже працює. По-перше, необхідно додатково розібрати мету та функції контейнера сервлетів . Програма, яка наведена в прикладі вище, - це веб-додаток. Клас TimeWorker- сервлет. Компоненти виконують виключно обробку запитів. Ці компоненти повинні бути вбудовані в спеціальний контейнер сервлетів. Мета контейнера сервлетів- Підтримка сервлетів та забезпечення їх життєвого циклу. Найпростіший приклад роботи Tomcat — сканування певної папки з метою визначити, чи з'явився новий сервлет. Якщо так — ініціалізувати його та підготувати до прийому запитів від клієнтів. Якщо сервлет було оновлено, провести повторну ініціалізацію оновлення компонентів. У разі видалення сервлета — зупинити обробку запитів, видалити сервлет із Tomcat.

Функції контейнера сервлетів

  1. Обмін даними між сервлетом та клієнтами;
  2. Організація клієнтських сесій;
  3. створення програмного середовища для функціонування сервлета;
  4. Ідентифікація та авторизація клієнтів;
  5. У більшості випадків - управління метаданими (заголовки, методи та інше).
По-друге, необхідно розібратися, як встановити свій сервлет .

Установка сервлету

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 : Tomcat в Java - 7У полі, що з'явилося, потрібно натиснути на deployed_war . Потім розпочнеться складання проекту та Intellij IDEA створить папку out, в якій з'явиться папка artifacts з ім'ям нашого артефакту. У цій папці лежатиме файл deployed_war.war: Tomcat в Java - 8Тепер можна деплоїти цей файл у Tomcat. Деплой програми найпростіше виконати з веб-інтерфейсу Tomcat. Просто натисніть кнопку вибору файлуна вкладці Deploy, перейдіть до місцезнаходження файлу WAR і виберіть його, потім натисніть кнопку розгортання . В обох випадках, якщо все піде добре, консоль Tomcat повідомить нам, що розгортання пройшло успішно приблизно таким висновком до консолі: INFO:

Користування Tomcat для розробки

Для розробників контейнери сервлетів мають величезну роль, оскільки вирішують цілий спектр проблем. Для програмування Java Tomcat забезпечує кілька серйозних переваг:
  1. Найголовніше, Tomcat може виконувати роль повноцінного веб-сервера. Завдяки цьому розгортання додатків відбувається набагато швидше, ніж було раніше. Також Tomcat може виступати в ролі класичного контейнера сервлетів, який можна вбудувати у більший веб-сервер.

  2. Tomcat сприяє обміну даними між клієнтом та сервлетом, забезпечує програмний контекст для веб-додатків, бере на себе функції ідентифікації та авторизації клієнтів, створення сесій для кожного з них.

  3. Надає дуже зручне керування JSP-сторінками. Фактично веб-сервер може віддавати лише HTML. Jasper, компонент Tomcat, компілює код, що міститься в шаблонних тегах JSP-сторінок до коректного HTML-файлу, який отримує клієнт. Вся логіка шаблонизації знаходиться всередині Tomcat, дозволяючи навіть додавати складні конструктори в класичну форму HTML.

І наостанок: дуже часто розробникам-початківцям ставлять питання: чи можливо запустити Java-додаток без main-методу. На перший погляд, якщо дивитися на приклади вище, можна. Наш сервлет було виконано без методу main. Однак, це не так. Tomcat має власний метод main, який викликається при запуску сервера. На таке запитання можна потрапити на співбесіді.

Додаткові посилання:

Коментарі
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Для цієї сторінки немає коментарів.