Está en la página 1de 12

Curso Programacin Web II

Servlets
Robert E. Arisaca M. 1
r.arisaca.unsa@gmail.com
1

Escuela Profesional de Ingeniera de Sistemas


Universidad Nacional de San Agustn

Sesin 02
Abril, 2015

Agenda

Qu es un Servlet?
Protocolo HTTP
Tareas encomendadas a un Servlet
Cundo y por qu usar Servlets
Servlet vs. CGI
Ventajas de los Servlets frente a los CGI
Estructura bsica de un HttpServlet
Servlet simple que genera texto plano
Servlet simple que genera un HTML

Qu es un Servlet?

Programas en Java que se ejecutan en un servidor


HTTP (servidor Web)
Actan como capa intermedia entre:
Peticin proveniente de un Navegador Web u otro
cliente HTTP
Bases de Datos o Aplicaciones en el servidor
HTTP
Servidor Web

BD

Servlet

BD
externa

Aplicacin

Protocolo HTTP

Hypertext Transfer Protocol

Mtodos Request

Corresponde a los niveles 5,6 y 7 del modelo OSI o al nivel 5 (Application


layer) del modelo TCP/IP
Es un protocolo de comunicacin creado para la publicacin y peticin de
pginas hipertexto en la Web
Es un protocolo de peticin-respuesta (request response) entre el cliente y
el servidor
GET: el mtodo ms habitual, su objetivo es solicitar un recurso del servidor
POST: envo de informacin al servidor para su proceso

Es un protocolo sin estado (stateless)

Requiere la gestin de la sesin por las aplicaciones

Tareas encomendadas a un Servlet

Leer los datos enviados por un usuario

Buscar cualquier otra informacin sobre la peticin que venga


incluida en esta

Incluir la informacin en una pgina HTML

Establecer los parmetros de la respuesta HTTP

Puede requerir consultas a Base de Datos, invocar a otras aplicaciones,


computar directamente la respuesta, etc.

Dar formato a los resultados en un documento

Detalles de las capacidades del navegador, cookies, nombre del host del
cliente, etc.

Generar los resultados

Usualmente de formularios en pginas Web


Pueden venir de applets de Java o programas cliente HTTP.

Decirle al navegador el tipo de documento que se va a devolver, establecer


las cookies, etc.

Enviar el documento al cliente

Cundo y por qu usar Servlets

Muchas peticiones desde navegador se satisfacen


retornando documentos HTML estticos, es decir, que
estn en archivos.
En ciertos casos, es necesario generar las pginas HTML
para cada peticin:
Pgina Web basada en datos enviados por el cliente
Motores de bsqueda, confirmacin de pedidos
Pgina Web derivada de datos que cambian con
frecuencia
Informe del tiempo o noticias de ltima hora
Pgina Web que usa informacin de bases de datos
corporativas u otras fuentes de la parte del servidor
Comercio electrnico: precios y disponibilidades

Servlet vs. CGI


Servidor Web basado en CGI

Servidor
Web

Peticin al CGI-1

Proceso Hijo del CGI-1

Peticin al CGI-2

Proceso Hijo del CGI-2

Peticin al CGI-1

Proceso Hijo del CGI-1

Servidor Web basado en Java Servlet

Servidor Web

Peticin al Servlet-1

JVM
Servlet-1

Peticin al Servlet-2
Peticin al Servlet-1

Thread

Servlet-2

Ventajas de los Servlets frente a CGI

Eficiencia
CGI corto: el proceso de arranque de cada proceso puede dominar el
tiempo de ejecucin
N peticiones simultneas: el cdigo del CGI se carga en memoria N
veces
Al terminar el proceso, el CGI se cierra: difcil persistencia de datos
(conexiones a BD, cach...)
Conveniencia
Los Servlets tienen una infraestructura muy amplia para la tratar
automticamente datos de formularios HTML, gestionar sesiones y
otras utilidades de alto nivel.
Potencia
Los Servlets pueden comunicar directamente con el navegador Web
Pueden mantener datos entre peticiones, simplificando el seguimiento
de sesiones y operaciones de cach
Varios Servlets pueden compartir datos

Ventajas de los Servlets frente a CGI

Portabilidad

Los Servlets estn escritos en Java y siguen una API estndar.


Pueden funcionar sin ningn cambio en diferentes servidores

Seguridad

CGI adolecen de vulnerabilidades porque:

Se ejecutan en el shell del SO


Pueden sufrir overflows por el lenguaje (C, C++, ...)

Los Servlets no sufren estos problemas

Economa

Aadir soporte para Servlet a un servidor Web ya disponible tiene


muy poco coste extra
Existen ciertos servidores web y servidores de servlet gratuitos para
trficos pequeos

Estructura de un HttpServlet
import java.io.*;
//Se importan los paquetes con las clases para Servlets y HttpServlets
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletTemplate extends HttpServlet{
//El mtodo doGet responde a peticiones mediante el mtodo GET
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// El objeto request se usa para leer los HTTP headers que llegan
// (p.e. Cookies) y los datos de formularios HTML enviados por el usuario
// El objeto response se usa para especificar HTTP status codes y
// HTTP headers de la respuesta (p.e. El tipo de contenido, cookies, etc.)
PrintWriter out = response.getWriter();
// El objeto out se usa para enviar contenido al navegador
}
//El mtodo doPost responde a peticiones mediante el mtodo POST
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

Servlet simple que genera texto plano


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}

Servlet simple que genera un HTML


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SimpleHTML extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Le decimos al navegador que lo que vamos a devolver es un HTML
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Construimos una pgina HTML legal
out.println(<HTML>");
out.println(<HEAD><TITLE>Servlet simple que genera un HTML</TITLE></HEAD>");
out.println(<BODY>");
out.println(<H2>Servlet que genera un HTML</H2>");
out.println(<P>Este Servlet devuelve el cgigo de una pgina HTML que el");
out.println( navegador interpreta y muestra como tal.</P>");
out.println(</BODY>");
out.println(</HTML>");
out.flush();
out.close();
}
}