Пример работы с tomcat и сервлетами

Ваш путь постижения дзена JavaEE не сможет пройти мимо сервлетов Java и их контейнеров. И чем раньше вы разберётесь с тем, как они взаимодействуют – тем легче будет проходить погружение в более тяжеловесные фрэймворки. Предлагаю познакомиться с контейнером под названием Tomcat, посмотрим как он устанавливается, запускается и работает с приложениями, а заодно напишем маленький сервлет для демонстрации идеи их использования.

Tomcat реализует спецификацию сервлетов и является веб сервером. Он умеет «на лету» подхватывать приложения. Начнём с самого начала. А для этого нам его необходимо скачать. Apache предлагают версии сервера как для 32х, так и для 64-разрядных машин. Также можно выбрать для загрузки либо инсталлятор, ло архив с потрохами сервера. Мы выберем второй вариант и разворачивать будем в среде windows. Качаем архив и распаковываем его в папку, желательно поближе к корню диска(c:\Tomcat). Перед запуском необходимо прописать переменные среды CATALINA_HOME и JAVA_HOME. Для этого идём Панель управления->Система->пример использования tomcat (java servlet)->Дополнительные параметры системы

пример использования tomcat (java servlet)

->Переменные среды

пример использования tomcat (java servlet)

Создаёте новую системную переменную с именем CATALINA_HOME и указываете для неё путь куда вы распаковали tomcat(у меня c:\tomcat). Также, если у вас не было, аналогичным образом создаёте ещё одну переменную JAVA_HOME и указываете где у вас лежит JDK (например C:\ProgramFiles\Java\jdk1.8.0_05). После этого рекомендую перезагрузить систему, иначе tomcat может отказываться запускаться без каких либо видимых причин. После всех манипуляций открываете командную строку, переходите в каталог с tomcat в папку bin, там есть два файла, startup.bat и shutdown.bat. Первый включает, второй выключает наш сервер. Запускаете startup.bat, после чего в отдельном окне должен начаться запуск сервера.

пример использования tomcat (java servlet)

Теперь идём в браузер и открываем адрес localhost:8080 Если всё нормально, вы увидите страницу tomcat’а, на которой есть ссылки на примеры простых сервлетов, туториалы и т.д.

пример использования tomcat (java servlet)

Конфигурация сервера производится с помощью *.xml файлов, находящихся в папке conf в корневом каталоге tomcat. Подробная документация по каждому тэгу есть на сайте Apache. Итак, сервер работает, а что же дальше? Как ему скормить наши страницы?

В корне tomcat есть папка webapps, которая ждёт-не дождётся пока ей кто ни будь не закинет файл с расширением war. war файлы – это специальные, так называемые web archives. Архивы, которые содержат в себе определённую структуру папок и файлов, которая подходит tomcat’у для запуска. Но перед созданием первого рабочего сервлета давайте подключим к IDEA наш сервер. Для этого открываем настройки, находим ApplicationServers, нажимаем + и выбираем сервер Tomcat.

пример использования tomcat (java servlet)

Указываем директории, если IDEсама их не прописала

пример использования tomcat (java servlet)

Жмём ок, apply и создаём новый проект. Не забываем установить галочку WebApplication

пример использования tomcat (java servlet)

Далее даём имя нашему проекту, пусть это будет TestWebProject и видим что IDE уже приготовила для нас необходимую иерархию папок и даже что то набросала в файлы web.xml и index.jsp Файл web.xml является дескриптором проекта, в нём находятся инструкции для сервера о том как правильно его разворачивать. Index.jsp по умолчанию стартовая страница проекта, давайте попробуем что-нибудь написать в неё и запустить.

пример использования tomcat (java servlet)

пример использования tomcat (java servlet)

Хорошо, а теперь давайте напишем наш первый сервлет, добавляющий жизни нашей пробной страничке. Создаём jsp страницу redirect, которая направляет запрос на наш будущий сервлет

пример использования tomcat (java servlet)

Перед тегом <html> пишем <jsp:forward page=”/redirect”></jsp:forward>

Теперь нужно создать класс Redirect, который унаследовавшись от класса javax.servlet.http.HttpServlet и станет нашим сервлетом, в котором можно будет получать и отправлять HTTPзапросы

пример использования tomcat (java servlet)

package info.javaway.web.servlets;
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;
import java.util.Random;

public class Redirect extends HttpServlet{
  private static int count = 0;
  private static int size = 0;
  private static Random rand = new Random();

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  count++;
  size = rand.nextInt(10);
   Date date = new Date();
  req.setAttribute("current_count", count);
  req.setAttribute("date", date.toString());
  req.setAttribute("size", size);
  req.getRequestDispatcher("index.jsp").forward(req, resp);
  }
}

В классе для демонстрации, используя метод setAttribute() класса HttpServletRequest добавляем в запрос счётчик обращений к странице(count), дату в текстовом формате и переменную size, которая при каждом обращении будет менять размер шрифта.



Следующим шагом необходимо в файле web.xml прописать так называемые servlet-mapping’и. Это необходимо для того, что бы контейнер «увидел» связь между строкой адреса браузера и страницами нашего проекта. Добавляем следующие строчки перед закрывающим тегом </web-app>

<servlet>

  <servlet-name>Redirect</servlet-name>

  <servlet-class>info.javaway.web.servlets.Redirect</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>Redirect</servlet-name>

  <url-pattern>/redirect</url-pattern>

  </servlet-mapping>

  <welcome-file-list>

  <welcome-file>redirect.jsp</welcome-file>

  </welcome-file-list>

<welcome-file-list> указывает стартовую страницу. Итого мы получили то что запрос приходит на redirect.jsp, от туда перенаправляется в наш сервлет Direct, где к нему добавляются атрибуты(там же можно получить и данные о запросе, протокол, заголовок и т.д.) и перенаправляется на index.jsp



Осталось только оформить вывод отображения. В файле index.jsp видно как с помощью тега <%=%> можно получить данные из запроса и встроить их в html.

пример использования tomcat (java servlet)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

  <head>

  <title></title>

  </head>

  <body>

  <div>

  <p>


  <table>

  <tr>

  <td><font size="<%=request.getAttribute("size")%>">посещений </font></td>

  <td><font size="<%=request.getAttribute("size")%>"><%=request.getAttribute("current_count")%></font></td>

  </tr>

  <tr>

  <td><font size="<%=request.getAttribute("size")%>">Дата</font></td>

  <td><font size="<%=request.getAttribute("size")%>"><%=request.getAttribute("date")%></font></td>

  </tr>

  </table>


  </p>

  </div>

  </body>

</html>

Для демонстрации работы приложения осталось запустить проект и открыть localhost:8080/redirect в браузере. Мы видим что при каждом обновлении страницы информация на ней динамически обновляется.

пример использования tomcat (java servlet)

Давайте теперь соберём проект средствами IDE(согласен – не кошерно. Но Maven будет в следующей статье). В результате получим TestWebProject_war exploded.war, переименуем его в TestWebProject.war и подложим в папку webapps, которую упоминали в начале. Теперь при старте Tomcat развернёт проект и при обращении по ссылке http://localhost:8080/testwebproject/ мы увидим что сервер отлично справляется с возложенной на него задачей. Можно в рантайме подсовывать ему приложения, он примерно раз в 30 секунд проверяет, не лежит ли чего свеженького в папке webapps.

Надеюсь что вы поняли основные концепции работы Tomcatс сервлетами java. Успехов в освоении!=)

Понравилась статья? Поделиться с друзьями:

Комментарии:

Комментарии: 5
  1. Андрей

    Добрый день. Пытаюсь установить томкэт по этой инструкции. При запуске startup.bat что-то очень быстро мелькает в открывшемся окне и пропадает, так что я не успеваю прочитать. ХЗ, отработало оно как надо или нет. Но открыть после этого в браузере localhost:8080 не удается («Попытка соединения не удалась»). Можете подсказать, куда глянуть, что проверить?

    1. PikselNsk (автор)

      Добрый день, извините что задержался с ответом… вы startup.bat запустите не двойным кликом, а из командной строки. Тогда ничего не закроется и вы сможете узнать что за ошибка. Возможно некорректно прописаны переменные окружения.

  2. Alexandr

    Спасибо большое, самый простой и понятный пример, который помог понять как работают сервлеты.

    1. PikselNsk (автор)

      Рад что это кому-то пригодилось, спасибо!

  3. Dmitriy

    Очень задним числом, но вдруг кому-то пригодится. Еще в проект нужно добавить библиотеку servlet-api.jar что идет с томкатом

Добавить комментарий для Андрей Отменить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: