JavaRush /Blog Java /Random-ES /Tomcat en Java

Tomcat en Java

Publicado en el grupo Random-ES
En algún momento, cada desarrollador adquiere suficientes habilidades como para pensar en crear su propio proyecto para poner sus conocimientos en práctica. Es más fácil emprender un proyecto web, ya que la implementación de una aplicación web no está limitada por ninguna restricción, como las aplicaciones de escritorio. El cliente sólo necesita un navegador y puede interactuar con la aplicación sin descargar ninguna distribución. Sin registro y SMS, como dicen (aunque esto depende de la propia aplicación). Tomcat en Java - 1Entonces, para implementar una buena aplicación web en Java, no puedes prescindir de una herramienta llamada Tomcat. Contenido:

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étodo mainmediante 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: Tomcat en Java - 2Aquí 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: Tomcat en Java - 3en 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: Tomcat en Java - 4el 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);
  }
}
TimeWorkerhereda de la clase HttpServlety anula el doGet. En este método recibimos dos parámetros: requesty response. Como ejemplo, se almacena requestun atributo con un nombre y que contiene una representación de cadena de la fecha actual. dataLuego se llama y se requestDispatcherle 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: requestresponse/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 servletdefine 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 timeWorkercuando se solicite url /time. Третий тег — welcome-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>
Запускаем пример: Tomcat en Java - 5Переходим по ссылке: Tomcat en Java - 6Отлично, все работает. В примере мы реализовали переход с главной paginas на вспомогательную, в которую был передан параметр и отображен для пользователя. При наличии проблем с запуском сервлетов рекомендую прочитать этот пост, где дают советы по решению этой проблемы. Для более полного ознакомления с сервлетами, рекомендуем прочитать статьи ( часть 1, часть 2), где автор подробно расписывает создание простейшего aplicaciones на сервлетах и jsp.

Как встроить приложение в работающий servidor

Несмотря на то, что встроенный Tomcat в IDEA — удобная фича, веб-приложение может быть перенесено на другой servidor и в другой контейнер. Рассмотрим вариант, когда необходимо встроить свое приложение в уже работающий servidor. Во-первых, необходимо дополнительно разобрать цель и функции контейнера сервлетов. Программа, которая приведена в примере выше — это веб-приложение. Класс TimeWorker — сервлет. Компоненты выполняют исключительно обработку pedidoов. Данные компоненты должны быть встроены в специальный контейнер сервлетов. Цель контейнера сервлетов — поддержка сервлетов и обеспечение их жизненного цикла. Простейший пример работы Tomcat — сканирование определенной папки с целью определить, появился ли в ней новый сервлет. Если да — инициализировать его и подготовить к приему pedidoов от клиентов. Если сервлет был обновлен, провести повторную инициализацию для обновления компонентов. При удалении сервлета — остановить обработку pedidoов, удалить сервлет из Tomcat.

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

  1. Обмен данными между сервлетом и клиентами;
  2. Организация клиентских сессий;
  3. Creación программной среды для функционирования сервлета;
  4. Идентификация и авторизация клиентов;
  5. В большинстве случаев — управление метаданными (заголовки, методы и прочее).
Во-вторых, необходимо разобраться, Cómo установить свой сервлет.

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

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: Tomcat en Java - 7В появившемся поле нужно нажать на deployed_war. Затем начнется сборка проекта и Intellij IDEA создаст папку out, в которой появится папка artifacts с именем нашего артефакта. В этой папке будет лежать файл deployed_war.war: Tomcat en Java - 8Теперь можно деплоить этот файл в 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 обеспечивает несколько серьезных преимуществ:
  1. Самое главное, Tomcat может выполнять роль полноценного web-servidorа. Благодаря этому развертывание приложений происходит гораздо быстрее, чем было раньше.Также Tomcat может выступать в роли классического контейнера сервлетов, который можно встроить в более крупный веб-servidor.

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

  3. Предоставляет очень удобное управление JSP-páginaми. Фактически веб-servidor может отдавать только html. Jasper, компонент Tomcat, компoрует código, содержащийся в шаблонных тегах JSP-страниц в корректный HTML-файл, который получает клиент. Вся логика шаблонизации находится внутри Tomcat, позволяя добавлять даже сложные конструкторы в классическую форму HTML.

Y finalmente: muy a menudo a los desarrolladores novatos se les pregunta: ¿es posible ejecutar una aplicación Java sin mainun 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 mainque se llama cuando se inicia el servidor. Te pueden pillar haciendo esta pregunta en una entrevista.

Enlaces adicionales:

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION