Tutorial de aplicaciones web Java para principiantes

Las aplicaciones web Java se utilizan para crear sitios web dinámicos. Java proporciona soporte para aplicaciones web a través de Servlets y JSP . Podemos crear un sitio web con páginas HTML estáticas, pero cuando queremos que la información sea dinámica, necesitamos una aplicación web.

Aplicación web Java

El objetivo de este artículo es proporcionar detalles básicos de los diferentes componentes de una aplicación web y cómo podemos usar Servlet y JSP para crear nuestra primera aplicación web Java.

  1. Servidor web y cliente
  2. HTML y HTTP
  3. Comprender la URL
  4. ¿Por qué necesitamos Servlet y JSP?
  5. Primera aplicación web con Servlet y JSP
  6. Contenedor web
  7. Estructura del directorio de aplicaciones web
  8. Descriptor de implementación

Servidor web y cliente

Un servidor web es un software que puede procesar la solicitud del cliente y enviar la respuesta al cliente. Por ejemplo, Apache es uno de los servidores web más utilizados. El servidor web se ejecuta en una máquina física y escucha la solicitud del cliente en un puerto específico. Un cliente web es un software que ayuda a comunicarse con el servidor. Algunos de los clientes web más utilizados son Firefox, Google Chrome, Safari, etc. Cuando solicitamos algo al servidor (a través de una URL), el cliente web se encarga de crear una solicitud y enviarla al servidor para luego analizar la respuesta del servidor y presentarla al usuario.

HTML y HTTP

El servidor web y el cliente web son dos programas independientes, por lo que debería existir un lenguaje común para la comunicación. HTML es el lenguaje común entre el servidor y el cliente y significa lenguaje de marcado de hipertexto . El servidor web y el cliente necesitan un protocolo de comunicación común, HTTP ( Protocolo de transferencia de hipertexto ) es el protocolo de comunicación entre el servidor y el cliente. HTTP se ejecuta sobre el protocolo de comunicación TCP/IP. Algunas de las partes importantes de la solicitud HTTP son :

  • Método HTTP : acción a realizar, normalmente GET, POST, PUT, etc.
  • URL – Página a la que acceder
  • Parámetros de formulario : similares a los argumentos de un método Java, por ejemplo, detalles de usuario y contraseña de la página de inicio de sesión.

Ejemplo de solicitud HTTP:

GET /FirstServletProject/jsps/hello.jsp HTTP/1.1Host: localhost:8080Cache-Control: no-cache

Algunas de las partes importantes de la respuesta HTTP son:

  • Código de estado : un número entero que indica si la solicitud se realizó correctamente o no. Algunos de los códigos de estado más conocidos son 200 para éxito, 404 para No encontrado y 403 para Acceso prohibido.
  • Tipo de contenido : texto, HTML, imagen, PDF, etc. También conocido como tipo MIME
  • Contenido : datos reales que el cliente presenta y muestra al usuario.

Ejemplo de respuesta HTTP:

200 OKDate: Wed, 07 Aug 2013 19:55:50 GMTServer: Apache-Coyote/1.1Content-Length: 309Content-Type: text/html;charset=US-ASCII!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"htmlheadmeta http-equiv="Content-Type" content="text/html; charset=US-ASCII"titleHello/title/headbodyh2Hi There!/h2brh3Date=Wed Aug 07 12:57:55 PDT 2013/h3/body/html

Tipo MIME o tipo de contenido : si ve el encabezado de respuesta HTTP de ejemplo anterior, contiene la etiqueta “Content-Type”. También se denomina tipo MIME y el servidor lo envía al cliente para informarle el tipo de datos que está enviando. Ayuda al cliente a representar los datos para el usuario. Algunos de los tipos MIME más utilizados son text/html, text/xml, application/xml, etc.

Comprender la URL

URL es el acrónimo de Universal Resource Locator y se utiliza para localizar el servidor y el recurso. Cada recurso en la web tiene su propia dirección única. Veamos partes de la URL con un ejemplo. https://localhost:8080/FirstServletProject/jsps/hello.jsp https:// – Esta es la primera parte de la URL y proporciona el protocolo de comunicación que se utilizará en la comunicación servidor-cliente. localhost – La dirección única del servidor, la mayoría de las veces es el nombre de host del servidor que se asigna a la dirección IP única. A veces, varios nombres de host apuntan a las mismas direcciones IP y el host virtual del servidor web se encarga de enviar una solicitud a la instancia del servidor en particular. 8080 – Este es el puerto en el que el servidor está escuchando, es opcional y si no lo proporcionamos en la URL, la solicitud va al puerto predeterminado del protocolo. Los números de puerto del 0 al 1023 son puertos reservados para servicios conocidos, por ejemplo, 80 para HTTP, 443 para HTTPS, 21 para FTP, etc. FirstServletProject/jsps/hello.jsp : recurso solicitado al servidor. Puede ser HTML estático, PDF, JSP, servlets, PHP, etc.

¿Por qué necesitamos Servlet y JSP?

Los servidores web son buenos para páginas HTML con contenido estático, pero no saben cómo generar contenido dinámico ni cómo guardar datos en bases de datos, por lo que necesitamos otra herramienta que podamos usar para generar contenido dinámico. Existen varios lenguajes de programación para contenido dinámico, como PHP, Python, Ruby on Rails, Java Servlets y JSP. Java Servlet y JSP son tecnologías del lado del servidor que amplían la capacidad de los servidores web al brindar soporte para la respuesta dinámica y la persistencia de datos.

Desarrollo web en Java

Primera aplicación web con Servlet y JSP

Usaremos “Eclipse IDE for Java EE Developers” para crear nuestra primera aplicación servlet. Dado que servlet es una tecnología del lado del servidor, necesitaremos un contenedor web que admita la tecnología Servlet, por lo que usaremos el servidor Apache Tomcat. Es muy fácil de configurar y dejo esa parte para ti. Para facilitar el desarrollo, podemos agregar la configuración de Tomcat con Eclipse, lo que ayuda a una implementación y ejecución de aplicaciones sencillas. Ve a Preferencias de Eclipse y selecciona Entornos de ejecución del servidor y selecciona la versión de tu servidor tomcat, el mío es Tomcat 7. Proporciona la ubicación del directorio apache tomcat y la información de JRE para agregar el entorno de ejecución. Ahora ve a la vista Servidores y crea un nuevo servidor como la imagen de abajo que apunta al entorno de ejecución agregado arriba. Nota : Si la pestaña Servidores no está visible, puedes seleccionar Ventana Mostrar vista Servidores para que sea visible en la ventana de Eclipse. Intenta detener e iniciar el servidor para asegurarte de que esté funcionando bien. Si ya ha iniciado el servidor desde la terminal, tendrá que detenerlo desde la terminal y luego iniciarlo desde Eclipse, de lo contrario no funcionará perfectamente. Ahora estamos listos con nuestra configuración para crear el primer servlet y ejecutarlo en el servidor Tomcat. Seleccione Archivo Nuevo Proyecto web dinámico y use la siguiente imagen para proporcionar el entorno de ejecución como el servidor que agregamos en el último paso y la versión del módulo como 3.0 para crear nuestro servlet usando las especificaciones de Servlet 3.0. Puede hacer clic directamente en el botón Finalizar para crear el proyecto o puede hacer clic en los botones Siguiente para verificar otras opciones. Ahora seleccione Archivo Nuevo Servlet y use la siguiente imagen para crear nuestro primer servlet. Nuevamente podemos hacer clic en Finalizar o podemos verificar otras opciones a través del botón Siguiente. Cuando hacemos clic en el botón Finalizar, genera nuestro código de esqueleto de Servlet, por lo que no necesitamos escribir todos los diferentes métodos e importaciones en el servlet y nos ahorra tiempo. Ahora agregaremos algo de HTML con código de datos dinámicos en el método doGet() que se invocará para la solicitud HTTP GET. Nuestro primer servlet se ve como se muestra a continuación.

package com.journaldev.first;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class FirstServlet */@WebServlet(description = "My First Servlet", urlPatterns = { "/FirstServlet" , "/FirstServlet.do"}, initParams = {@WebInitParam(name="id",value="1"),@WebInitParam(name="name",value="pankaj")})public class FirstServlet extends HttpServlet {private static final long serialVersionUID = 1L;public static final String HTML_START="htmlbody";public static final String HTML_END="/body/html";           /**     * @see HttpServlet#HttpServlet()     */    public FirstServlet() {        super();        // TODO Auto-generated constructor stub    }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter out = response.getWriter();Date date = new Date();out.println(HTML_START + "h2Hi There!/h2br/h3Date="+date +"/h3"+HTML_END);}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub}}

Antes de Servlet 3, necesitábamos proporcionar la información del patrón de URL en el descriptor de implementación de la aplicación web, pero Servlet 3.0 usa anotaciones de Java que son fáciles de entender y las posibilidades de errores son menores. Ahora elija la opción Ejecutar Ejecutar en el servidor desde la ventana del editor de servlet y use las imágenes a continuación para las opciones. Después de hacer clic en Finalizar, el navegador se abrirá en Eclipse y obtendremos la siguiente página HTML. Puede actualizarla para verificar que la fecha sea dinámica y siga cambiando, también puede abrirla fuera de Eclipse en cualquier otro navegador. Entonces, servlet se usa para generar HTML y enviarlo en respuesta, si observa la implementación de doGet(), en realidad estamos creando un documento HTML como si lo escribiéramos en el objeto PrintWriter de respuesta y estamos agregando información dinámica donde la necesitamos. Es bueno para comenzar, pero si la respuesta es enorme con muchos datos dinámicos, es propensa a errores y difícil de leer y mantener. Esta es la razón principal para la introducción de JSP. JSP también es una tecnología del lado del servidor y es como HTML con características adicionales para agregar contenido dinámico donde lo necesitamos. Los JSP son buenos para las presentaciones porque son fáciles de escribir, ya que son como HTML. Aquí está nuestro primer programa JSP que hace lo mismo que el servlet anterior.

%@page import="java.util.Date"%%@ page language="java" contentType="text/html; charset=US-ASCII"    pageEncoding="US-ASCII"%!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"htmlheadmeta http-equiv="Content-Type" content="text/html; charset=US-ASCII"titleHello/title/headbodyh2Hi There!/h2brh3Date=%= new Date() %/h3/body/html

Si ejecutamos el JSP anterior, obtenemos un resultado como el de la imagen siguiente. La jerarquía final del proyecto se ve como la de la imagen siguiente en Eclipse.

Descargar el proyecto FirstServlet

Descargar el proyecto de ejemplo Hello World del servlet

Analizaremos Servlets y JSP con más detalle en futuras publicaciones, pero antes de concluir esta publicación, deberíamos tener una buena comprensión de algunos de los aspectos de las aplicaciones web Java.

Contenedor web

Tomcat es un contenedor web. Cuando se realiza una solicitud desde un cliente al servidor web, pasa la solicitud al contenedor web y su trabajo es encontrar el recurso correcto para manejar la solicitud (servlet o JSP) y luego usar la respuesta del recurso para generar la respuesta y proporcionársela al servidor web. Luego, el servidor web envía la respuesta al cliente. Cuando el contenedor web recibe la solicitud y si es para un servlet, el contenedor crea dos objetos HTTPServletRequest y HTTPServletResponse. Luego, encuentra el servlet correcto según la URL y crea un hilo para la solicitud. Luego, invoca el método service() del servlet y, según el método HTTP, el método service() invoca los métodos doGet() o doPost(). Los métodos del servlet generan la página dinámica y la escriben en la respuesta. Una vez que se completa el hilo del servlet, el contenedor convierte la respuesta en una respuesta HTTP y la envía de regreso al cliente. Algunos de los trabajos importantes que realiza el contenedor web son:

  • Soporte de comunicación : el contenedor proporciona una forma sencilla de comunicación entre el servidor web y los servlets y JSP. Gracias al contenedor, no necesitamos crear un socket de servidor para escuchar cualquier solicitud del servidor web, analizar la solicitud y generar una respuesta. Todas estas tareas importantes y complejas las realiza el contenedor y todo lo que tenemos que centrarnos es en la lógica empresarial de nuestras aplicaciones.
  • Gestión de recursos y ciclo de vida : el contenedor se encarga de gestionar el ciclo de vida de los servlets. El contenedor se encarga de cargar los servlets en la memoria, inicializarlos, invocar sus métodos y destruirlos. El contenedor también proporciona una utilidad como JNDI para la gestión y agrupación de recursos.
  • Compatibilidad con subprocesos múltiples : el contenedor crea un nuevo subproceso para cada solicitud al servlet y, cuando se procesa, el subproceso finaliza. De esta forma, los servlets no se inicializan para cada solicitud y se ahorra tiempo y memoria.
  • Compatibilidad con JSP : los JSP no se parecen a las clases Java normales y el contenedor web proporciona compatibilidad con JSP. Todos los JSP de la aplicación son compilados por el contenedor y convertidos a Servlet, que luego los administra como otros servlets.
  • Tarea Miscelánea : El contenedor web administra el grupo de recursos, realiza optimizaciones de memoria, ejecuta el recolector de elementos no utilizados, proporciona configuraciones de seguridad, soporte para múltiples aplicaciones, implementación en caliente y varias otras tareas detrás de escena que nos hacen la vida más fácil.

Estructura del directorio de aplicaciones web

Las aplicaciones web Java se empaquetan como archivos web (WAR) y tienen una estructura definida. Puede exportar el proyecto web dinámico anterior como archivo WAR y descomprimirlo para verificar la jerarquía. Será algo como la imagen siguiente.

Descriptor de implementación

El archivo web.xml es el descriptor de implementación de la aplicación web y contiene un mapeo para servlets (anteriores a 3.0), páginas de bienvenida, configuraciones de seguridad, configuraciones de tiempo de espera de sesión, etc. Eso es todo por el tutorial de inicio de la aplicación web Java, exploraremos más sobre servlets y JSP en futuras publicaciones. Actualización : el próximo tutorial de esta serie es Tutorial de servlets de Java

SUSCRÍBETE A NUESTRO BOLETÍN 
No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio