Sei sulla pagina 1di 48

JAVA: Servlets

Diseo de aplicaciones

web
Servlets
Programas que se ejecutan en los servidores.
Aaden funcionalidad a un servidor web, del
mismo modo que los applets aaden funcionalidad
a los navegadores.
Similares a los scripts CGI, salvo que ofrecen
una independencia de la plataforma.
Cundo se suelen utilizar
La pgina web se basa en datos que proporciona
el usuario.
Ejemplo: e-commerce sites.
Los datos cambian frecuentemente.

Ejemplo: Partes meteorolgicos.


La pgina web utiliza informacin de BDs u otras
fuentes.
Ejemplo: Aplicaciones comerciales.
Applets
servidor
cliente
El usuario pide un applet en java

NAVEGADOR
WEB Llega un applet en java

Arranca la mquina
Virtual de java y
Se ejecuta el applet

MQUINA
VIRTUAL JAVA
Servlets
Servlets. Requisitos
El servidor debe tener una mquina virtual Java.
El servidor debe soportar la API de los servlets Java.

Servidores capaces de ejecutar servlets:


Apache Tomcat
Java Web Server
OReilly WebSite Professional
Lotus Domino Go WebServer
Novel IntraNetWare
IBM Internet Connection Server
Otros
Instalando un servidor Web
Jakarta Tomcat
http://java.sun.com/webservices/
downloads/webservicespack.html
JSWDK 1.0
http://java.sun.com/products/servlet/2.1
Java Servlet API
Extensin al JDK estndar
Extensiones del JDK extensiones son
empaquetados bajo javax Paquetes:
javax.servlet
javax.servlet.http
Da soporte al protocolo HTTP y a la generacin de
HTML
Ejecucin de un servlet
Formas de iniciar la ejecucin:
Introducir la direccin URL del servlet en un
navegador web.
Llamar al servlet desde una pgina web.
Ejecutar un servlet llamndolo desde otro
servlet.
Desde un navegador web
http://nombre_maquina:puerto/ruta_serv
let/nombre_servlet
Las llamadas a servlets pueden contener
parmetros:
http://www.datsi.fi.upm.es/~mperez/servlet
s/serv1?num1=3&num2=4
Desde una pgina web

Un servlet tambin puede ser llamado desde


el cdigo de una pgina web, al igual que se
llamara a cualquier CGI.
Ejemplo:
<form action =
http://www.datsi.fi.upm.es/~mperez/servlet
s/serv2 method=post>
Desde otro servlet
Se puede lanzar la ejecucin de un servlet
desde otro.
Pasos:
Conocer el nombre del servlet que queremos
llamar.
Proporcionar acceso al objeto Servlet del
servlet llamado.
Llamar al mtodo pblico del servlet.
Desde otro servlet
public class servletCalling extends HttpServlet {
public void doGet (HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException
{
...
Servlet servlet_get = (Servlet)
getServletConfig().getServletContext().getServlet(servl
etCalled);
String data_get = servlet_get.method1(data);
...
}
}

Arquitectura de los servlets


Biblioteca javax.servlet
Servlet

HttpServlet

MiServlet
Ciclo de vida de un servlet
Carga
init()
Servidor Servlet
Cliente
doGet()
Servlet Manejo de service() doPost()
peticiones
Servidor Cliente
Descarga
destroy()
Servidor Servlet
Inicializacin de un servlet
public void init (ServletConfig config)
Finaliza antes de la invocacin de cualquier
mtodo sobre el servlet
Slo se invoca una vez, a menos que el servidor
recargue el servlet
ServletConfig: argumentos de inicializacin para
el servlet
Ej.:
abrir ficheros o establecer conexiones a los
servidores
Servicio
public void service (ServletRequest req,
ServletResponse res )
Lee la peticin y produce el mensaje de
respuesta
Objeto ServletRequest:
Comunicacin que fluye del cliente al servidor
Objeto ServletResponse:
Encapsula la informacin enviada desde el
servidor al cliente
HTTP Servlets
Mtodo HTTP GET
Ejemplo:
GET /servlet/MyServlet?nombre=Juan& institucion=FI
HTTP/1.1
Connection: Keep-Alive User-Agent:
Mozilla/4.0 ( compatible; MSIE 4.01;
Windows NT)
Host: www.datsi.fi.upm.es
Accept: image/gif, image/x-xbitmap, image/jpeg,
image/pjpeg

Limitacin:
Cuntos datos son pasados como parte del
URL Uso de HTTP POST
Mtodo HTTP POST
Permite al cliente enviar datos al servidor
Pasar ms informacin que en una
peticin HTTP GET

Ejemplo:
POST /servlet/MyServlet HTTP/1.1 User-
Agent: Mozilla/4.0 ( compatible; MSIE
4.01; Windows NT)
Host: www.datsi.fi.upm.es
Accept: image/gif, image/x-xbitmap, image/jpeg,
image/pjpeg, */
Content-type: application/x-www-form-urlencoded
Content-length: 39 nombre=Juan&institucion=FI
doGet() y doPost()
Sobreescribir mtodos doGet() y doPost()
public void doGet (
HttpServletRequest request,
HttpServletResponse response);
public void doPost (
HttpServletRequest request,
HttpServletResponse response);
Destruccin del servlet
public void destroy()
Liberar los recursos (cerrar ficheros abiertos o
cerrar conexiones con bases de datos). Puede
ser un mtodo vaco.
El servidor espera a llamar al mtodo destroy()
hasta que todos los servicios se hayan
completado o haya pasado una cantidad de
tiempo determinada
Estructura de un Servlet
import java.io.*; // (tipo de contenido, establecer
import javax.servlet.*; // cookies, ...)
import javax.servlet.http.*;
public class SomeServlet extends HttpServlet {
PrintWriter out = response.getWriter();
// El servidor enva una pgina
// web al cliente
public void doGet (HttpServletRequest // Utilizar out para enviar el
request, // contenido al navegador
HttpServletResponse response) throws
ServletException,
IOException }
{ // Anlogamente, sobreescribir
// Utilizar request para leer // doPost().
// datos procedentes del

// cliente (ej: cookies, }


// otros datos)
// Utiliza response para
// especificar la respuesta
{

Ejemplo Servlets: PrintWriter out;


String titulo=Hola Mundo;
// Utiliza response para //
Hola Mundo especificar la respuesta

import java.io.*;
response.setContentType (text/html);
import javax.servlet.*;
out = response.getWriter();
import javax.servlet.http.*; out.println(<HTML><HEAD><TITLE>);
public class HolaMundoSrvlt extends out.println(titulo);
HttpServlet { out.println(</TITLE></HEAD><BODY>);
// El servidor enva una pgina web al out.println(<H1>+titulo+</H1>);
cliente public void doGet out.println(</BODY></HTML>);
(HttpServletRequest request, out.close();
HttpServletResponse response) throws
ServletException, }
IOException
}
Ejemplo Servlets: Hola Mundo
Obtencin y envo de informacin
Obtencin de datos del getInputStream()
cliente: Envo de datos al
getParameter() cliente:
getParameterValues( getWriter
)
getOutputStream
getParameterNames(
) getReader

Ejemplo: Lectura de parmetros


import java.io.*; out.println("</TITLE></HEAD><BODY>");
out.println("<H1 ALIGN=CENTER>"+ title
import javax.servlet.*; +"</H1>"); out.println("<UL>");
out.println("<LI>param1: "+
import javax.servlet.http.*; request.getParameter("param1"));
out.println("<LI>param2: "+
request.getParameter("param2"));
public class ThreeParam extends HttpServlet { public out.println("<LI>param3: "+
void doGet( HttpServletRequest request, request.getParameter("param3"));
HttpServletResponse response) throws out.println("</UL>");
ServletException, IOException { out.println("</BODY></HTML>");
out.close();
PrintWriter out; }
String title="Leyendo 3 parmetros";
public void doPost(HttpServletRequest
response.setContentType request,HttpServletResponse response)
("text/html"); throws ServletException,IOException {
out = response.getWriter(); doGet(request,response);
out.println("<HTML><HEAD><TITLE>"); }
out.println(title); }
Ejemplo: Lectura de parmetros
Ejemplo: Lectura de parmetros II
import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;
import java.util.*;

public class ShowParameters extends HttpServlet {


public void doGet( HttpServletRequest request,
HttpServletResponse response) throws
ServletException,IOException
{
PrintWriter out;
String title="Leyendo todos los parmetros";
response.setContentType ("text/html"); out =
response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title);
out.println("</TITLE></HEAD><BODY>");
Ejemplo: Lectura de parmetros II
out.println("<H1 ALIGN=CENTER>"+ title else
out.print(valorParam);
+"</H1>"); } else {
out.println("<TABLE BORDER=1 ALIGN=CENTER>"); out.println("<UL>");
out.println("<TR><TH>Nombre de parmetro<TH>Valores for (int i=0;
i<valoresDeParam.length; i++) {
de parmetro"); out.println("<LI>" +
Enumeration nombresDeParam = valoresDeParam[i]);
request.getParameterNames(); }
out.println("</UL>");
while (nombresDeParam.hasMoreElements()){ } }
String nombreParam = (String) out.println("</TABLE>");
nombresDeParam.nextElement(); out.println("<TR><TD>" out.println("</BODY></HTML>");
out.close();
+ nombreParam); }
out.println("<TD>"); public void doPost(HttpServletRequest
request,HttpServletResponse response) throws
String[] valoresDeParam= ServletException,IOException {
request.getParameterValues(nombreParam); doGet(request,response);
if (valoresDeParam.length == 1) { String }
}
valorParam = valoresDeParam[0]; if
(valorParam.length()== 0)
out.print("<I>No existe valor</I>");
Ejemplo: Lectura de parmetros II
Ejemplo: Uso de formulario
<HTML>
<HEAD>
<TITLE> Un ejemplo de formulario que utiliza POST </TITLE>
</HEAD>

<H1 ALIGN=CENTER> Un ejemplo de formulario que utiliza POST </H1>

<FORM ACTION="../servlet/ShowParameters" METHOD="POST">


Nmero Artculo:
<INPUT TYPE="TEXT" NAME="numItem"> <BR>
Cantidad:
<INPUT TYPE="TEXT" NAME="cantidad"> <BR>
Precio Unidad:
<INPUT TYPE="TEXT" NAME="precio" VALUE="$"> <BR>
<HR>
Nombre:
<INPUT TYPE="TEXT" NAME="nombre"> <BR>
Apellidos:
<INPUT TYPE="TEXT" NAME="apellidos"> <BR>
Direccin:
<TEXTAREA NAME="direccion" ROWS=3 COLS=40> </TEXTAREA><BR>
Tarjeta de crdito: <BR>
Ejemplo: Uso de formulario
<INPUT TYPE="RADIO" NAME="tipoTarjeta" VALUE="Visa">Visa<BR>
<INPUT TYPE="RADIO" NAME="tipoTarjeta" VALUE="Master Card">Master Card<BR>
<INPUT TYPE="RADIO" NAME="tipoTarjeta" VALUE="Amex">American Express<BR> <INPUT
TYPE="RADIO" NAME="tipoTarjeta" VALUE="Discover">Discover<BR>
Nmero de tarjeta de crdito:
<INPUT TYPE="PASSWORD" NAME="numTarjeta"> <BR>
Repeticin del nmero de tarjeta de crdito:
<INPUT TYPE="PASSWORD" NAME="numTarjeta"> <BR><BR>
<CENTER>
<INPUT TYPE="SUBMIT" VALUE="Enviar solicitud"> </CENTER>
</FORM>
</BODY>
</HTML>
Ejemplo: Uso de formulario
Ejemplo: Uso de formulario
Almacenamiento del estado de un
cliente
Estado del cliente:
Situacin en la que se encuentra un cliente en
sucesivas peticiones al servidor
Ejemplo tpico de aplicacin: carrito de la compra
(almacenamiento de productos por parte del cliente).
Mecanismos:
Cookies
Seguimiento de sesiones (session tracking)
Uso de cookies
Cookie miCookie = new Cookie("Ciudad", "Madrid");
Mtodos sobre cookies:
setValue()/getValue(): Valores de una cookie
setComment()/getComment(): Comentario de una cookie
setMaxAge()/getMaxAge(): Tiempo de caducidad de una cookie
getName(): Nombre de una cookie

Lascookies se envan en la cabecera de la


respuesta al cliente
addCookie(), sobre el objeto de la clase HttpServletResponse
Establecimiento de una cookie
public void doPost (HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException { PrintWriter
out;
...
Cookie miCookie = new Cookie("Ciudad","Madrid");
miCookie.setComment("Cookie para establecer la
ciudad de origen");
miCookie.setMaxAge(3600);
response.addCookie(miCookie); out =
response.getWriter();
...
}

Recuperacin de una cookie


getCookies(): devuelve un array de objetos de tipo Cookie
public void doPost (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { String valorCookie;
boolean encontrado = false;
int i = 0; Cookie[]
misCookies; Cookie miCookie;
misCookies = request.getCookies(); while (!encontrado &&
i<misCookies.length) { miCookie =
misCookies[i]; encontrado =
miCookie.getName().equals("Ciudad"); if
(encontrado) valorCookie =
miCookie.getValue(); i++; }... }
Acceso a bases de datos
JDBC, interfaz de acceso a un sistema de
gestin de bases de datos o RDBMS
Paquete java.sql: contiene un gran nmero de
clases e interfaces tiles para la programacin del
acceso a bases de datos mediante JDBC Clases
ms utiles:
Driver
Connection
Statement
ResultSet
Servlets vs CGI
Eficiencia
CGI inicia un nuevo proceso para cada peticin HTTP. (Solucin: FastCGI)
El servlet se ejecuta solamente la primera vez que es llamado. Permanece en memoria
una vez cargado y puede compartir informacin entre varias llamadas de clientes. Uso
de threads para las distintas peticiones.

Portabilidad

Modularidad

El uso de parmetros es ms sencillo en el caso de los servlets


Servlets y JSP
JSP (Java Server Pages)
Pginas dinmicas aadiendo funcionalidad al cdigo HTML
Similar a ASP o PHP, aunque puede utilizar diferentes
plataformas como servidores
Extensin de la tecnologa de servlets
1. Cliente realiza una peticin de una pgina JSP al servidor web
2. ste enva la solicitud al motor de JSP
3. Compila la pgina JSP, convirtindola en un servlet
4. Ejecuta el servlet
5. Devuelve los resultados al cliente en formato HTML.

Potrebbero piacerti anche