Una aplicación web Java se utiliza para crear sitios web dinámicos. Java proporciona soporte para aplicaciones web a través de Servlets y JSPs. 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 sobre los diferentes componentes en una Aplicación Web y cómo podemos usar Servlet y JSP para crear nuestra primera aplicación web en Java.
- Servidor y Cliente Web
- HTML y HTTP
- Entendiendo la URL
- ¿Por qué necesitamos Servlet y JSPs?
- Primera Aplicación Web con Servlet y JSP
- Contenedor Web
- Estructura de Directorios de la Aplicación Web
- Descriptor de Despliegue
Servidor y Cliente Web
Servidor web es un software que puede procesar la solicitud del cliente y enviar la respuesta de vuelta al cliente. Por ejemplo, Apache es uno de los servidores web más ampliamente utilizados. El servidor web se ejecuta en alguna máquina física y escucha las solicitudes 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 la URL), el cliente web se encarga de crear una solicitud y enviarla al servidor, luego analiza la respuesta del servidor y la presenta al usuario.
HTML y HTTP
El servidor web y el cliente web son dos programas separados, por lo que debe haber algún lenguaje común para la comunicación. HTML es el lenguaje común entre el servidor y el cliente y significa HiperTexto Marcado Lenguaje. El servidor web y el cliente necesitan un protocolo común de comunicación, HTTP (HiperTexto Transferencia Protocolo) 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, generalmente GET, POST, PUT, etc.
- URL – Página a acceder
- Parámetros de formulario – similares a los argumentos en un método Java, por ejemplo, detalles de usuario y contraseña de la página de inicio de sesión.
Solicitud HTTP de muestra:
GET /FirstServletProject/jsps/hello.jsp HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
Algunas de las partes importantes de la Respuesta HTTP son:
- Código de Estado – un número entero para indicar si la solicitud fue exitosa 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 son renderizados por el cliente y mostrados al usuario.
Respuesta HTTP de muestra:
200 OK
Date: Wed, 07 Aug 2013 19:55:50 GMT
Server: Apache-Coyote/1.1
Content-Length: 309
Content-Type: text/html;charset=US-ASCII
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=Wed Aug 07 12:57:55 PDT 2013
</h3>
</body>
</html>
Tipo MIME o Tipo de Contenido: Si ves el encabezado de respuesta HTTP de muestra arriba, contiene la etiqueta “Content-Type”. También se llama tipo MIME y el servidor lo envía al cliente para hacerles saber el tipo de datos que está enviando. Ayuda al cliente a renderizar los datos para el usuario. Algunos de los tipos MIME más utilizados son text/html, text/xml, application/xml, etc.
Comprendiendo la URL
URL es el acrónimo de Localizador de Recursos Universal 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 una 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 de servidor 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 JSPs?
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 tanto, necesitamos otra herramienta que podamos utilizar para generar contenido dinámico. Hay varios lenguajes de programación para contenido dinámico, como PHP, Python, Ruby on Rails, Java Servlets y JSPs. Java Servlet y JSPs son tecnologías del lado del servidor que amplían la capacidad de los servidores web al proporcionar soporte para respuestas dinámicas y persistencia de datos.
Desarrollo web con 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 el servlet es una tecnología del lado del servidor, necesitaremos un contenedor web que admita la tecnología Servlet, por lo que utilizaremos el servidor Apache Tomcat. Es muy fácil de configurar y dejo esa parte en tus manos. Para facilitar el desarrollo, podemos configurar Tomcat con Eclipse, lo que ayuda en la implementación y ejecución sencillas de aplicaciones. Ve a Preferencias de Eclipse y selecciona Entornos de tiempo de ejecución del servidor y elige la versión de tu servidor tomcat, la mía es Tomcat 7. Proporciona la ubicación del directorio de Apache Tomcat e información de JRE para agregar el entorno de tiempo de ejecución. Ahora ve a la vista de Servidores y crea un nuevo servidor como se muestra en la siguiente imagen apuntando al entorno de tiempo de ejecución que agregamos anteriormente.
Nota: Si la pestaña de Servidores no es visible, entonces puedes seleccionar Ventana > Mostrar Vista > Servidores para que sea visible en la ventana de Eclipse. Intenta detener y arrancar el servidor para asegurarte de que funcione correctamente. Si ya has iniciado el servidor desde la terminal, entonces tendrás 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. Selecciona Archivo > Nuevo > Proyecto Web Dinámico y utiliza la siguiente imagen para proporcionar el tiempo 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 Servlet 3.0.
Puedes hacer clic directamente en el botón Finalizar para crear el proyecto o puedes hacer clic en los botones Siguiente para verificar otras opciones. Ahora selecciona Archivo > Nuevo > Servlet y utiliza 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 el esqueleto de código de nuestro Servlet, por lo que no necesitamos escribir todos los métodos e importaciones diferentes en el servlet y nos ahorra tiempo. Ahora agregaremos un poco 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 así.
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="";
public static final String HTML_END="";
/**
* @see HttpServlet#HttpServlet()
*/
public FirstServlet() {
super();
// TODO Auto-generado 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 + "Hi There!
Date="+date +"
"+HTML_END);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generado método stub
}
}
Antes de Servlet 3, necesitamos proporcionar la información del patrón de URL en el descriptor de implementación de la aplicación web, pero Servlet 3.0 utiliza anotaciones de Java que son fáciles de entender y tienen menos probabilidades de errores. Ahora elige Ejecutar > Ejecutar en la opción de servidor desde la ventana del editor de servlet y utiliza las imágenes siguientes para las opciones.
Después de hacer clic en finalizar, el navegador se abrirá en Eclipse y obtendremos la siguiente página HTML.
Puedes actualizarla para comprobar que la fecha es dinámica y sigue cambiando; también puedes abrirlo fuera de Eclipse en cualquier otro navegador. Entonces, el servlet se utiliza para generar HTML y enviarlo en respuesta. Si observas la implementación de doGet(), en realidad estamos creando un documento HTML y escribiéndolo en el objeto PrintWriter de respuesta, y estamos agregando información dinámica donde la necesitamos. Es bueno para empezar, pero si la respuesta es enorme con muchos datos dinámicos, es propenso a errores y difícil de leer y mantener. Esta es la razón principal de 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 la presentación porque es fácil escribirlos, 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">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=<%= new Date() %>
</h3>
</body>
</html>
Si ejecutamos el JSP mencionado, obtendremos una salida similar a la imagen de abajo. La jerarquía final del proyecto se ve como en la imagen de abajo en Eclipse.
Descargar el Proyecto FirstServlet
Descargar el Proyecto Ejemplo Servlet Hello World
Analizaremos Servlets y JSPs con más detalle en futuras publicaciones, pero antes de concluir esta publicación, deberíamos tener una buena comprensión de algunos aspectos de las aplicaciones web en Java.
Contenedor Web
Tomcat es un contenedor web, cuando se realiza una solicitud desde el Cliente al servidor web, este pasa la solicitud al contenedor web y es tarea del contenedor web encontrar el recurso correcto para manejar la solicitud (servlet o JSP) y luego usar la respuesta del recurso para generar la respuesta y proporcionarla al servidor web. Luego, el servidor web envía la respuesta de vuelta 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 basado en la URL y crea un hilo para la solicitud. Luego invoca el método service() del servlet y basado en 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 el hilo del servlet está completo, el contenedor convierte la respuesta a respuesta HTTP y la envía de vuelta al cliente. Algunas de las tareas importantes realizadas por el contenedor web son:
- Soporte de Comunicación – El contenedor proporciona una forma fácil de comunicación entre el servidor web y los servlets y JSPs. Debido al contenedor, no necesitamos construir un socket de servidor para escuchar cualquier solicitud del servidor web, analizar la solicitud y generar una respuesta. Todas estas tareas importantes y complejas son realizadas por el contenedor y todo en lo que necesitamos enfocarnos es en nuestra lógica de negocio para nuestras aplicaciones.
- Gestión del Ciclo de Vida y Recursos – El contenedor se encarga de gestionar el ciclo de vida del servlet. El contenedor se encarga de cargar los servlets en la memoria, inicializar los servlets, invocar los métodos del servlet y destruirlos. El contenedor también proporciona utilidades como JNDI para el agrupamiento y gestión de recursos.
- Soporte para multihilos – El contenedor crea un nuevo hilo para cada solicitud al servlet y cuando se procesa, el hilo muere. Por lo tanto, los servlets no se inicializan para cada solicitud y ahorran tiempo y memoria.
- Soporte para JSP – Los JSP no se parecen a las clases Java normales y el contenedor web proporciona soporte para JSP. Cada JSP en la aplicación es compilado por el contenedor y convertido a Servlet, luego el contenedor los gestiona como otros servlets.
- Tareas varias – El contenedor web gestiona el pool de recursos, realiza optimizaciones de memoria, ejecuta el recolector de basura, proporciona configuraciones de seguridad, soporte para múltiples aplicaciones, implementación en caliente y varias otras tareas detrás de escena que facilitan nuestra vida.
Estructura de directorios de la aplicación web
Las aplicaciones web de Java se empaquetan como Archivo Web (WAR) y tienen una estructura definida. Puedes exportar el proyecto web dinámico anterior como un archivo WAR y descomprimirlo para verificar la jerarquía. Será algo como la siguiente imagen.
Descriptor de Despliegue
El archivo web.xml es el descriptor de despliegue de la aplicación web y contiene un mapeo para servlets (antes de la versión 3.0), páginas de bienvenida, configuraciones de seguridad, ajustes de tiempo de espera de sesión, etc. Eso es todo para el tutorial de inicio de la aplicación web en Java, exploraremos Servlets y JSPs más en futuras publicaciones. Actualización: El próximo tutorial de esta serie es Tutorial de Java Servlets
Source:
https://www.digitalocean.com/community/tutorials/java-web-application-tutorial-for-beginners