Servets
Servets
Servets
Una página web estática es un documento HTML que es almacenado en un archivo (.html / .htm) y
raramente cambia el contenido.
Hypertext Markup Language (HTML) es un lenguaje que los navegadores de internet entienden y lo
usan para mostrar (render) las páginas web al usuario final.
Hypertext Transfer Protocol (HTTP) es el protocolo que los navegadores web y los servidores web
usan para comunicarse entre ellos.
¿Qué son las páginas web dinámicas?
A diferencia de una página web estática, una página web dinámica cambia en base a los parámetros que son
enviados por el usuario o por otra página.
La páginas web dinámicas son documentos HTML generados por la aplicación web.
La aplicación web se desarrolla con un lenguaje de programación que es ejecutado en el servidor.
– Java (el objetivo de este curso)
– PHP
– .NET
Las aplicaciones web modernas almacenan y recuperan los datos de un servidor de base de datos.
El navegador de internet no sabe que lenguaje es utilizado en el servidor, el solo necesita que el servidor le
envíe documentos HTML válidos.
Conceptos básicos de Servlets
Un Servlet es una clase java (.java) que permite procesar peticiones web
(HTTP Request) y devolver una respuesta (HTTP Response). Los Servlets
son clases que se ejecutan en el servidor.
Son utilizados para recibir parámetros, ya sea vía GET, como por ejemplo
parámetros en la URL, o parámetros enviados por un formulario HTML
(POST).
La respuesta que envía un Servlet puede ser de tipo HTML, XML, JSON,
incluso archivos como PDF, imágenes, video, audio, etc.
En una aplicación MVC (Model, View, Controller), los Servlets juegan el
papel del Controlador.
Los Servlets son la base de muchos Frameworks como Struts, Spring, JSF,
etc.
Si sabemos como funcionan los Servlets, al utilizar cualquiera de los
Frameworks antes mencionados será mas rápido el aprendizaje.
Estructura básica de un Servlet
package net.itinajero.servlets;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; Clases para utilizar HTTP
import javax.servlet.http.HttpServletResponse; Request y HTTP Response
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("Petición de tipo GET");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("Petición de tipo POST");
}
}
Configuración de un Servlet.
Un Servlet no puede ejecutarse por si solo (Run). La forma de ejecutarlo siempre es mediante una URL. A esto
se le conoce como «Serlvet Maping».
La configuración de un Servlet se realiza en el archivo WEB-INF/web.xml (deployment descriptor).
Apartir de la versión API Servlet 3.0 (Tomcat 7 en adelante), se puede utilizar la anotación WebServlet
@WebServlet(name = “HolaMundo", urlPatterns = "/holaMundo")
Un Servlet puede ser ejecutado por medio de una URL (GET). Cuando se
ejecuta de esta forma, en el Servlet se ejecuta el método doGET()
Un Servlet puede ser ejecutado por medio de un <a> Link (GET). Cuando
se ejecuta de esta forma, en el Servlet se ejecuta el método doGET().
/comentarios?name=alonso&perfil=admin&id=4852
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// La respuesta sera una pagina HTML
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
…
out.println("<table border='1' style='width:100%;'>");
out.println("<tr>");
out.println("<th>id</th>");
out.println("<th>Categoria</th>");
• LA POTENCIA DE LOS SERVLETS, ES
out.println("<th>Nombre</th>"); QUE PODEMOS UTILIZAR TODO EL
out.println("<th>Precio</th>");
out.println("</tr>");
CODIGO JAVA QUE DESEEMOS PARA
MANIPULAR LOS DATOS QUE NOS
// Generamos contenido HTML dinamico
ProductoDB db = new ProductoDB();
ENVIO UN CLIENTE.
List<Producto> lista = db.getAll(); • EN ESTE EJEMPLO, LA LISTA DE
for (Producto prod : lista) {
out.println("<tr>");
PRODUCTOS LA ESTAMOS TRAYENDO
out.println("<td>"+prod.getId()+"</td>"); DE UNA BASE DE DATOS Y CREAMOS
out.println("<td>"+prod.getCategoria()+"</td>");
out.println("<td>"+prod.getNombre()+"</td>");
UNA TABLA HTML CON ESOS DATOS
out.println("<td>$"+prod.getPrecio()+"</td>"); DE FORMA DINAMICA, Y SE LA
out.println("</tr>");
}
ENVIAMOS AL CLIENTE (NAVEGADOR
// Termina contenido dinamico DE INTERNET)
out.println("</table>");
…
}
Resultado tabla HTML generada por el Servlet
Cliclo Request-Response de un Servlet
Cabecera de respuesta Content-Type
}
Enviar respuesta - XML
}
Enviar respuesta - JSON
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response type to JSON
response.setContentType("application/json");
PrintWriter out = response.getWriter();
out.println("{\"employees\":[\n" +
" {\"firstName\":\"John\", \"lastName\":\"Doe\"},\n" +
" {\"firstName\":\"Anna\", \"lastName\":\"Smith\"},\n" +
" {\"firstName\":\"Peter\", \"lastName\":\"Jones\"}\n" +
"]}");
/*
{"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]}
*/
}
Enviar respuesta – Imagen JPG
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
Un servlet puede redirigir la respuesta, por lo general se usa para enviar al usuario a recursos externos. Por
ejemplo otro sitio.
Para esto se utiliza el método sendRedirect del objeto response.
Método Descripción
sendRedirect(String Path) Envía una respuesta de tipo redirect, enviando al cliente a la dirección URL proporcionada
como parámetro.
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Redirigir la respuesta relativa al directorio actual
response.sendRedirect("login.html");
// Redirigir la respuesta relativa al motor de servlets
response.sendRedirect("/pagar/efectivo");
// Redirigir la respuesta a otro servidor
response.sendRedirect("http://www.google.com");
}