JAVA: Servlets
Diseño de aplicaciones
web
[email protected]
Servlets
n 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.
n Similares a los scripts CGI, salvo que
ofrecen una independencia de la
plataforma.
[email protected]
2
Cuándo se suelen utilizar
n La página web se basa en datos que
proporciona el usuario.
– Ejemplo: e-commerce sites.
n Los datos cambian frecuentemente.
– Ejemplo: Partes meteorológicos.
n La página web utiliza información de BDs
u otras fuentes.
– Ejemplo: Aplicaciones comerciales.
[email protected]
3
Applets
cliente
servidor
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
[email protected]
4
Servlets
Cliente
Servidor
Base de datos
[email protected]
5
Servlets. Requisitos
n El servidor debe tener una máquina virtual Java.
n El servidor debe soportar la API de los servlets Java.
n Servidores capaces de ejecutar servlets:
– Apache Tomcat
– Java Web Server
– O’Reilly WebSite Professional
– Lotus Domino Go WebServer
– Novel IntraNetWare
– IBM Internet Connection Server
– Otros
[email protected]
6
Instalando un servidor Web
n Jakarta Tomcat
– http://java.sun.com/webservices/
downloads/webservicespack.html
n JSWDK 1.0
– http://java.sun.com/products/servlet/2.1
[email protected]
7
Java Servlet API
n Extensión al JDK estándar
– Extensiones del JDK extensiones son
empaquetados bajo javax
n Paquetes:
– javax.servlet
– javax.servlet.http
• Da soporte al protocolo HTTP y a la generación
de HTML
[email protected]
8
Ejecución de un servlet
n 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.
[email protected]
9
Desde un navegador web
n http://nombre_maquina:puerto/ruta_serv
let/nombre_servlet
n Las llamadas a servlets pueden
contener parámetros:
– http://www.datsi.fi.upm.es/~mperez/servlet
s/serv1?num1=3&num2=4
[email protected]
10
Desde una página web
n 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.
n Ejemplo:
– <form action =
“http://www.datsi.fi.upm.es/~mperez/servlet
s/serv2” method=“post”>
[email protected]
11
Desde otro servlet
n Se puede lanzar la ejecución de un
servlet desde otro.
n 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.
[email protected]
12
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);
...
}
}
[email protected]
13
Arquitectura de los servlets
n Biblioteca ‘javax.servlet’
Servlet
HttpServlet
MiServlet
[email protected]
14
Ciclo de vida de un servlet
Servidor
Servlet
Servlet
Servidor
Manejo de
peticiones
Servidor
Servlet
Carga
init()
Cliente
service()
Cliente
Descarga
destroy()
doGet()
doPost()
[email protected]
15
Inicialización de un servlet
n public void init (ServletConfig config)
n Finaliza antes de la invocación de cualquier
método sobre el servlet
n Sólo se invoca una vez, a menos que el servidor
recargue el servlet
n ServletConfig: argumentos de inicialización para
el servlet
n Ej.: abrir ficheros o establecer conexiones a los
servidores
[email protected]
16
Servicio
n public void service (ServletRequest req,
ServletResponse res )
n Lee la petición y produce el mensaje de
respuesta
n Objeto ‘ServletRequest’:
– Comunicación que fluye del cliente al servidor
n Objeto ‘ServletResponse’:
– Encapsula la información enviada desde el servidor
al cliente
[email protected]
17
HTTP Servlets
[email protected]
18
Método HTTP GET
n 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
n Limitación: Cuántos datos son pasados como parte
del URL
Uso de HTTP POST
[email protected]
19
Método HTTP POST
n Permite al cliente enviar datos al servidor
– Pasar más información que en una petición HTTP GET
n 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
[email protected]
20
doGet() y doPost()
n Sobreescribir métodos doGet() y doPost()
– public void doGet (
HttpServletRequest request,
HttpServletResponse response);
– public void doPost (
HttpServletRequest request,
HttpServletResponse response);
[email protected]
21
Destrucción del servlet
n public void destroy()
n Liberar los recursos (cerrar ficheros abiertos o
cerrar conexiones con bases de datos). Puede
ser un método vacío.
n El servidor espera a llamar al método destroy()
hasta que todos los servicios se hayan
completado o haya pasado una cantidad de
tiempo determinada
[email protected]
22
Estructura de un Servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SomeServlet extends HttpServlet {
(HttpServletRequest
// El servidor envía una página
// web al cliente
public void doGet
request,
HttpServletResponse response)
throws ServletException,
IOException
{
// Utilizar request para leer
// datos procedentes del
// cliente (ej: cookies,
// otros datos)
// Utiliza response para
// especificar la respuesta
// (tipo de contenido, establecer
// cookies, ...)
PrintWriter out = response.getWriter();
// Utilizar out para enviar el
// contenido al navegador
}
// Análogamente, sobreescribir
// doPost().
}
[email protected]
23
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();
[email protected]
24
Ejemplo Servlets: Hola Mundo
[email protected]
25
Obtención y envío de información
n Obtención de datos
del cliente:
– getParameter()
• getParameterValues()
• getParameterNames()
– getReader
– getInputStream()
n Envío de datos al
cliente:
– getWriter
– getOutputStream
[email protected]
26
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";
response.setContentType
("text/html");
out = response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title);
}
}
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
request,HttpServletResponse response)
throws ServletException,IOException {
doGet(request,response);
[email protected]
27
Ejemplo: Lectura de parámetros
[email protected]
28
Ejemplo: Lectura de parámetros 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 parámetros";
response.setContentType ("text/html");
out = response.getWriter();
out.println("<HTML><HEAD><TITLE>");
out.println(title);
out.println("</TITLE></HEAD><BODY>");
[email protected]
29
Ejemplo: Lectura de parámetros II
out.println("<H1 ALIGN=CENTER>"+ title
+"</H1>");
out.println("<TABLE BORDER=1 ALIGN=CENTER>");
out.println("<TR><TH>Nombre de
parámetro<TH>Valores de parámetro");
Enumeration nombresDeParam =
request.getParameterNames();
while (nombresDeParam.hasMoreElements()){
String nombreParam = (String)
nombresDeParam.nextElement();
out.println("<TD>");
request.getParameterValues(nombreParam);
out.println("<TR><TD>" + nombreParam);
String[] valoresDeParam=
if (valoresDeParam.length == 1) {
String valorParam =
valoresDeParam[0];
if (valorParam.length()== 0)
out.print("<I>No existe valor</I>");
else
out.print(valorParam);
} else {
out.println("<UL>");
for (int i=0;
i<valoresDeParam.length; i++) {
out.println("<LI>" +
valoresDeParam[i]);
}
out.println("</UL>");
}
}
out.println("</TABLE>");
out.println("</BODY></HTML>");
out.close();
}
public void doPost(HttpServletRequest
request,HttpServletResponse re
Comentarios de: JAVA: Servlets - Diseño de aplicaciones web (0)
No hay comentarios