- Tomcat conoce Javarush
- Tomcat: ¿qué es?
- Componentes de Tomcat
- Instalación de Tomcat
- Cómo crear una aplicación web
- Cómo incrustar una aplicación en un servidor en ejecución
- Beneficios de Tomcat para el desarrollo
- Enlaces adicionales
Tomcat conoce Javarush
Tomcat se estudia en el nivel 9 de la misión Colecciones de Java en el curso JavaRush. En 2 conferencias, Bilaabo le dirá cómo descargar y configurar Tomcat , así como también cómo crear su primera aplicación web .Tomcat: ¿qué es?
Tomcat es un contenedor de servlets de código abierto que también actúa como servidor web. A primera vista, Tomcat parece un tema bastante complicado, pero no lo es. La mayoría de las aplicaciones Java se inician mediante la línea de comandos y realizan algunas acciones. Estas aplicaciones implementan una función predefinida, después de la cual ya no se ejecutan. Estos programas suelen tener un métodomain
mediante el cual se pueden iniciar. La aplicación web está diseñada para interactuar con el cliente. Si hay una solicitud del cliente, se procesa y se envía una respuesta al usuario. Si no, la aplicación está inactiva. ¿Cómo implementar dicha lógica en una aplicación estándar, dado que necesita admitir sesiones, aceptar solicitudes HTTP, etc.? Ciclo while-true
? No, necesitamos una solución confiable aquí. Para eso está Tomcat. De hecho, es una aplicación Java que se encarga de abrir el puerto para la interacción con el cliente, configurar sesiones, número de solicitudes, longitud del encabezado y muchas más operaciones.
Componentes de Tomcat
Tomcat tiene componentes que realizan funciones específicas que vale la pena conocer. Miremos más de cerca.Catalina
Gracias a este componente, los desarrolladores tienen la oportunidad de implementar sus programas en un contenedor. Catalina implementa la especificación Servlet API, la tecnología web central en la programación web Java. De hecho, Catalina es un contenedor de servlets dentro de Tomcat (veremos este concepto con más detalle a continuación).Jaspe
Gracias a este componente, el programador utiliza tecnología JSP. Son como archivos HTML, solo que tienen código Java incrustado que se puede ejecutar cuando la página se envía al usuario. Esto le permite incrustar dinámicamente cualquier dato en la página. Jasper convierte el código Java en HTML y también rastrea los cambios y los actualiza automáticamente.Coyote
Este es un componente importante que escucha las solicitudes HTTP de un cliente en un puerto específico, proporciona esos datos para procesarlos en la aplicación y también devuelve respuestas a los usuarios. Es decir, Coyote implementa la funcionalidad de un servidor HTTP. Estos componentes se pueden describir estructuralmente mediante el siguiente diagrama: Aquí se muestra un diagrama aproximado de la interacción de los componentes "en los dedos". De hecho, la forma en que funciona Tomcat es mucho más compleja, pero esto es suficiente para una comprensión básica.Instalación de Tomcat
Para utilizar Tomcat en Java, es necesario instalarlo en el sistema. Puede leer sobre cómo instalar Tomcat en este artículo, que también cubre otros servidores de aplicaciones. Entonces, al tener un Tomcat funcional integrado en IDEA, puede intentar preparar su primer servlet.Cómo crear una aplicación web
Para crear una aplicación web, debe cumplir con una estructura de carpetas específica. IntelliJ IDEA tiene una función de generación de aplicaciones web en el menú de creación de proyectos. Habiendo creado el proyecto de esta manera, puedes ver una estructura simple: en src, como siempre, hay fuentes, y en la carpeta web se generan web.xml e index.jsp. web.xml es una instrucción para Tomcat donde buscar controladores de solicitudes y otra información. index.jsp es la página principal de la aplicación web, donde el usuario debe ir primero (esta es la configuración predeterminada). Como primera ejecución, simplemente puede editar el archivo index.jsp:<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
Si Tomcat está instalado directamente en IDEA, puede iniciar el servidor de aplicaciones: el cliente recibe el contenido del archivo index.jsp en el navegador cuando navega a '/', es decir, a la página principal. Ahora agreguemos un enlace a la página donde se ubicará la hora actual del servidor. Para crear su primer servlet, necesita usar la biblioteca servlet-api.jar que viene con Tomcat (se puede encontrar en la carpeta lib). Creemos un servlet que mostrará la hora actual del servidor en la página. Para hacer esto necesitas crear una clase TimeWorker
. Coloquémoslo en la carpeta src/ru/javarush/tomcat:
package ru.javarush.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
hereda de la clase HttpServlet
y anula el doGet
. En este método recibimos dos parámetros: request
y response
. Como ejemplo, se almacena request
un atributo con un nombre y que contiene una representación de cadena de la fecha actual. data
Luego se llama y se requestDispatcher
le pasan parámetros . El controlador ha sido creado. Ahora necesitas enviarle solicitudes específicamente. Deje que cualquier transición conduzca a la página time.jsp. Abra web.xml, inserte la siguiente configuración entre las etiquetas: request
response
/time
<web-app>
<servlet>
<servlet-name>timeWorker</servlet-name>
<servlet-class>ru.javarush.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>
La primera etiqueta servlet
define el nombre del servlet y especifica la ruta a la clase de servlet que procesará las solicitudes. La segunda etiqueta - servlet-mapping
- indica que se llamará al servlet con el nombre timeWorker
cuando se solicitewelcome-file-list
— указывает файл, который будет вызван при переходе на
url /
. Это необходимо настраивать, если существует потребность изменить файл по-умолчанию. Здесь включен для примера. Теперь при переходе на
/time
будет вызываться метод
doGet
в классе
TimeWorker
и отдавать página time.jsp… которой нет. Создадим ее рядом с index.jsp:
<%@ 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
идет обращение к un objetoу
request
, которое обрамлено
<%=
и
%>
. Это теги шаблонизации. Код, заключенный в данные теги, вызывается до того, Cómo будет отправлен клиенту. Ну а un objetoы
request
и
response
доступны в таких тегах в любом jsp-файле. В данном примере туда будет подставлено текущее время servidorа, которое передает сервлет
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">Узнать текущее время servidorа</a>
</body>
</html>
Запускаем пример:
Переходим по ссылке:
Отлично, все работает. В примере мы реализовали переход с главной paginas на вспомогательную, в которую был передан параметр и отображен для пользователя. При наличии проблем с запуском сервлетов рекомендую прочитать
этот пост, где дают советы по решению этой проблемы. Для более полного ознакомления с сервлетами, рекомендуем прочитать статьи (
часть 1,
часть 2), где автор подробно расписывает создание простейшего aplicaciones на сервлетах и jsp.
Как встроить приложение в работающий servidor
Несмотря на то, что встроенный Tomcat в IDEA — удобная фича, веб-приложение может быть перенесено на другой servidor и в другой контейнер. Рассмотрим вариант, когда необходимо встроить свое приложение в уже работающий servidor. Во-первых, необходимо дополнительно разобрать цель и функции контейнера сервлетов. Программа, которая приведена в примере выше — это веб-приложение. КлассTimeWorker
— сервлет. Компоненты выполняют исключительно обработку pedidoов. Данные компоненты должны быть встроены в специальный контейнер сервлетов.
Цель контейнера сервлетов — поддержка сервлетов и обеспечение их жизненного цикла. Простейший пример работы Tomcat — сканирование определенной папки с целью определить, появился ли в ней новый сервлет. Если да — инициализировать его и подготовить к приему pedidoов от клиентов. Если сервлет был обновлен, провести повторную инициализацию для обновления компонентов. При удалении сервлета — остановить обработку pedidoов, удалить сервлет из Tomcat.
Функции контейнера сервлетов
- Обмен данными между сервлетом и клиентами;
- Организация клиентских сессий;
- Creación программной среды для функционирования сервлета;
- Идентификация и авторизация клиентов;
- В большинстве случаев — управление метаданными (заголовки, методы и прочее).
Установка сервлета
Tomcat принимает для обработки веб-aplicaciones на Java, которые имеют расширение .war. Это Cómo jar, только web. Файлы такого типа объединяют в себе JSP-файлы, сервлеты, class-файлы, статические ресурсы и прочее. При установке такого archivo в Tomcat происходит его распаковка, а затем запуск, поэтому существует строгое требование к структуре файлов в проекте. Если проект был создан в IDEA, вся структура создана автоматически. Файл war можно создать стандартными средствами IDEA. Для этого необходимо зайти в ProjectStructure -> Artifacts -> Нажать “ +” -> WebApplication: Archive. В открывшемся поле задать Nombre для итогового war-archivo, например deployed_war. Ниже необходимо нажать на кнопку Create Manifest… Далее необходимо указать manera de папке web проекта. В ней будет создана папка META-INF, в которую будет помещен файл MANIFEST.MF. Далее следует нажать Apply и Ok. Quéбы собрать проект в war-файл, следует во вкладке Build выбрать опцию Build Artifact: В появившемся поле нужно нажать на deployed_war. Затем начнется сборка проекта и Intellij IDEA создаст папку out, в которой появится папка artifacts с именем нашего артефакта. В этой папке будет лежать файл deployed_war.war: Теперь можно деплоить этот файл в Tomcat. Деплой aplicaciones проще всего выполнить из веб-интерфейса Tomcat. Просто нажмите кнопку выбора archivo на вкладке Deploy, перейдите к местоположению archivo WAR и выберите его, затем нажмите кнопку развертывания. В обоих случаях, если все пойдет хорошо, консоль Tomcat сообщит нам, что развертывание прошло успешно примерно таким выводом в консоль: INFO: Deployment of web application archive \path\to\deployed_war has finished in 4,833 msПольза Tomcat для разработки
Для разработчиков контейнеры сервлетов имеют огромную роль, так Cómo решают целый спектр проблем. Для программирования на Java Tomcat обеспечивает несколько серьезных преимуществ:-
Самое главное, Tomcat может выполнять роль полноценного web-servidorа. Благодаря этому развертывание приложений происходит гораздо быстрее, чем было раньше.Также Tomcat может выступать в роли классического контейнера сервлетов, который можно встроить в более крупный веб-servidor.
-
Tomcat способствует обмену данными между клиентом и сервлетом, обеспечивает программный контекст для веб-приложений, берет на себя функции идентификации и авторизации клиентов, создание сессий для каждого из них.
-
Предоставляет очень удобное управление JSP-páginaми. Фактически веб-servidor может отдавать только html. Jasper, компонент Tomcat, компoрует código, содержащийся в шаблонных тегах JSP-страниц в корректный HTML-файл, который получает клиент. Вся логика шаблонизации находится внутри Tomcat, позволяя добавлять даже сложные конструкторы в классическую форму HTML.
main
un método? A primera vista, si nos fijamos en los ejemplos anteriores, es posible. Nuestro servlet se ejecutó sin el archivo
main
. Sin embargo, no lo es. Tomcat tiene su propio método
main
que se llama cuando se inicia el servidor. Te pueden pillar haciendo esta pregunta en una entrevista.
GO TO FULL VERSION