Download JAVA: Servlets

Document related concepts
no text concepts found
Transcript
JAVA: Servlets
Diseño de servicios web
© 2001-2003 María de los Santos Pérez Hernández
([email protected])
Copyright (c) 2001-2003 María de los Santos PÉREZ
HERNÁNDEZ Permission is granted to copy, distribute and/or
modify this document under the terms of the GNU Free
Documentation License, Version 1.2 or any later version
published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no BackCover Texts. A copy of the license is included in the
section entitled "GNU Free Documentation License".
A copy of the GNU Free Documentation License can be found
in: http://www.gnu.org/licenses/licenses.html#FDL
© 2001-2003 María PÉREZ
([email protected])
2
Servlets

Programas que se ejecutan en los
servidores.
– Añaden funcionalidad a un servidor web, del mismo modo
que los applets añaden funcionalidad a los navegadores.
Similares a los scripts CGI, salvo que ofrecen
una independencia de la plataforma.
 A diferencia de mecanismos propietarios (tales como la

API de Netscape Server o módulos de Apache), son
independientes del servidor y de la plataforma.
© 2001-2003 María PÉREZ
([email protected])
3
Cuándo se suelen utilizar

La página web se basa en datos que
proporciona el usuario.
– Ejemplo: e-commerce sites.

Los datos cambian frecuentemente.
– Ejemplo: Partes meteorológicos.

La página web utiliza información de
BDs u otras fuentes.
– Ejemplo: Aplicaciones comerciales.
© 2001-2003 María PÉREZ
([email protected])
4
Applets
servidor
cliente
El usuario pide un applet en java
NAVEGADOR
WEB
Llega un applet en java
Arranca la máquina
Virtual de java y
Se ejecuta el applet
MÁQUINA
VIRTUAL JAVA
© 2001-2003 María PÉREZ
([email protected])
5
Servlets
Servidor
Cliente
Base de datos
© 2001-2003 María PÉREZ
([email protected])
6
Servlets. Requisitos


El servidor debe tener una máquina virtual
Java.
El servidor debe soportar la API de los
servlets Java.
– JavaServer Web Development Kit (JSWDK).
http://java.sun.com/products/servlet/

Servidores capaces de ejecutar servlets:
–
–
–
–
–
–
–
Java Web Server
Netscape Fast Track y Enterprise
O’Reilly WebSite Professional
Lotus Domino Go WebServer
Novel IntraNetWare
IBM Internet Connection Server
Otros
© 2001-2003 María PÉREZ
([email protected])
7
Ejecución de un servlet

Formas de iniciar la ejecución:
– Introducir la dirección URL del servlet en
un navegador web.
– Llamar al servlet desde una página web.
– Ejecutar un servlet llamándolo desde otro
servlet.
© 2001-2003 María PÉREZ
([email protected])
8
Desde un navegador web


http://nombre_maquina:puerto/ruta_serv
let/nombre_servlet
Las llamadas a servlets pueden
contener parámetros:
– http://www.datsi.fi.upm.es/~mperez/servlet
s/serv1?num1=3&num2=4
© 2001-2003 María PÉREZ
([email protected])
9
Desde una página web


Un servlet también puede ser llamado
desde el código de una página web, al
igual que se llamaría a cualquier CGI.
Ejemplo:
– <form action =
“http://www.datsi.fi.upm.es/~mperez/servlet
s/serv2” method=“post”>
© 2001-2003 María PÉREZ
([email protected])
10
Desde otro servlet


Se puede lanzar la ejecución de un
servlet desde otro.
Pasos:
– Conocer el nombre del servlet que
queremos llamar.
– Proporcionar acceso al objeto “Servlet” del
servlet llamado.
– Llamar al método público del servlet.
© 2001-2003 María PÉREZ
([email protected])
11
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(“ser
vletCalled”);
String data_get = servlet_get.method1(data);
...
}
}
© 2001-2003 María PÉREZ
([email protected])
12
Arquitectura de los servlets

Biblioteca ‘javax.servlet’
Servlets
HttpServlet
MiServlet
© 2001-2003 María PÉREZ
([email protected])
13
Interacción con los clientes

Objeto ‘ServletRequest’:
– Comunicación que fluye del cliente al
servidor.

Objeto ‘ServletResponse’:
– Encapsula la información enviada desde el
servidor al cliente.
© 2001-2003 María PÉREZ
([email protected])
14
Estructura de un Servlet
import java.io.*;
// Utiliza response para
import javax.servlet.*;
// especificar la respuesta
import javax.servlet.http.*;
// (tipo de contenido, establecer
public class SomeServlet extends
// cookies, ...)
HttpServlet {
// El servidor envía una página
PrintWriter out =
// web al cliente
response.getWriter();
public void doGet
(HttpServletRequest request,
// Utilizar out para enviar el
HttpServletResponse response)
// contenido al navegador
throws ServletException,
IOException
}
{
// Utilizar request para leer // Análogamente, sobreescribir
// doPost().
// datos procedentes del
// cliente (ej: cookies,
}
// otros datos)
© 2001-2003 María PÉREZ
([email protected])
15
Ejemplo Servlets: Hola Mundo
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HolaMundoSrvlt extends
HttpServlet {
// El servidor envía una página
web al cliente
public void doGet
(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,
IOException
{
PrintWriter out;
}
String titulo=“Hola Mundo”;
// Utiliza response para
// especificar la respuesta
response.setContentType
(“text/html”);
out = response.getWriter();
out.println(“<HTML><HEAD><TITLE>”);
out.println(titulo);
out.println(“</TITLE></HEAD><BODY>”);
out.println(“<H1>”+titulo+</H1>”);
out.println(“</BODY></HTML>”);
out.close();
}
© 2001-2003 María PÉREZ
([email protected])
16
Ejemplo Servlets: Hola Mundo
© 2001-2003 María PÉREZ
([email protected])
17
Obtención y envío de información

Obtención de datos
del cliente:
– getParameter()
• getParameterValues()
• getParameterNames()

Envío de datos al
cliente:
– getWriter
– getOutputStream
– getReader
– getInputStream()
© 2001-2003 María PÉREZ
([email protected])
18
Ejemplo: Lectura de parámetros
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ThreeParam extends HttpServlet {
public void doGet( HttpServletRequest
request,
HttpServletResponse response)
throws ServletException,
IOException {
PrintWriter out;
String title="Leyendo 3 parámetros";
out.println("</TITLE></HEAD><BODY>");
out.println("<H1 ALIGN=CENTER>"+ title
+"</H1>");
out.println("<UL>");
out.println("<LI>param1: "+
request.getParameter("param1"));
out.println("<LI>param2: "+
request.getParameter("param2"));
out.println("<LI>param3: "+
request.getParameter("param3"));
out.println("</UL>");
out.println("</BODY></HTML>");
out.close();
}
public void doPost(HttpServletRequest
response.setContentType
request,HttpServletResponse
("text/html");
response)
out = response.getWriter();
throws ServletException,IOException {
out.println("<HTML><HEAD><TITLE>");
doGet(request,response);
out.println(title);
}
}
© 2001-2003 María PÉREZ
([email protected])
19
Ejemplo: Lectura de parámetros
© 2001-2003 María PÉREZ
([email protected])
20
Ejemplo: Lectura de parámetros II
import
import
import
import
java.io.*;
javax.servlet.*;
javax.servlet.http.*;
java.util.*;
public class ShowParameters extends HttpServlet {
public void doGet( HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException
{
PrintWriter out;
String title="Leyendo todos los parámetros";
response.setContentType ("text/html");
out = response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title);
out.println("</TITLE></HEAD><BODY>");
© 2001-2003 María PÉREZ
([email protected])
21
Ejemplo: Lectura de parámetros II
out.println("<H1 ALIGN=CENTER>"+ title
else
+"</H1>");
out.print(valorParam);
out.println("<TABLE BORDER=1
} else {
ALIGN=CENTER>");
out.println("<UL>");
out.println("<TR><TH>Nombre de
for (int i=0;
parámetro<TH>Valores de parámetro");
i<valoresDeParam.length; i++) {
Enumeration nombresDeParam =
out.println("<LI>" +
request.getParameterNames();
valoresDeParam[i]);
while (nombresDeParam.hasMoreElements()){
}
String nombreParam = (String)
out.println("</UL>");
nombresDeParam.nextElement();
}
out.println("<TR><TD>" + nombreParam);
}
out.println("<TD>");
out.println("</TABLE>");
String[] valoresDeParam=
out.println("</BODY></HTML>");
request.getParameterValues(nombreParam);
out.close();
if (valoresDeParam.length == 1) {
}
String valorParam =
public void doPost(HttpServletRequest
valoresDeParam[0];
request,HttpServletResponse
if (valorParam.length()== 0)
response)
out.print("<I>No existe valor</I>");
throws ServletException,IOException {
doGet(request,response);
}
}
© 2001-2003 María PÉREZ
([email protected])
22
Ejemplo: Lectura de parámetros II
© 2001-2003 María PÉREZ
([email protected])
23
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">
Número Artículo:
<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>
© 2001-2003 María PÉREZ
([email protected])
24
Ejemplo: Uso de formulario
Dirección:
<TEXTAREA NAME="direccion" ROWS=3 COLS=40> </TEXTAREA><BR>
Tarjeta de crédito: <BR>
<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>
Número de tarjeta de crédito:
<INPUT TYPE="PASSWORD" NAME="numTarjeta"> <BR>
Repetición del número de tarjeta de crédito:
<INPUT TYPE="PASSWORD" NAME="numTarjeta"> <BR><BR>
<CENTER>
<INPUT TYPE="SUBMIT" VALUE="Enviar solicitud">
</CENTER>
</FORM>
</BODY>
</HTML>
© 2001-2003 María PÉREZ
25
([email protected])
Ejemplo: Uso de formulario
© 2001-2003 María PÉREZ
([email protected])
26
Ejemplo: Uso de formulario
© 2001-2003 María PÉREZ
([email protected])
27
Ciclo de vida de un servlet
Servidor
Servlet
Carga
init()
Cliente
Servlet
Servidor
Servidor
Manejo de
peticiones
service()
doGet()
doPost()
Cliente
Servlet
© 2001-2003 María PÉREZ
([email protected])
Descarga
destroy()
28
Almacenamiento del estado de un cliente

Estado del cliente:
– Situación en la que se encuentra un cliente
en sucesivas peticiones al servidor.

Mecanismos:
– Almacenamiento de sesiones en el
servidor
– “Cookies”
© 2001-2003 María PÉREZ
([email protected])
29
Servlets vs CGI

Eficiencia
– CGI inicia un nuevo proceso para cada petición HTTP.
(Solución: FastCGI)
– El servlet se ejecuta solamente la primera vez que es
llamado. Permanece en memoria una vez cargado y puede
compartir información entre varias llamadas de clientes. Uso
de threads para las distintas peticiones.



Portabilidad
Modularidad
El uso de parámetros es más sencillo en el
caso de los servlets
© 2001-2003 María PÉREZ
([email protected])
30