Download SERVLETS Páginas web estáticas

Document related concepts
no text concepts found
Transcript
SERVLETS
Dr. Raúl Perez
Páginas web estáticas
Como se despliega una página web en un browser
Normalmente la página se crea usando HTML y se almacena
como un archivo en el servidor de web. El usuario escribe el URL
del archivo en el browser. El browser se comunica con el servidor
de web y solicita el archivo
archivo. El servidor localiza el archivo y se lo
envía al browser. El browser despliega el archivo.
La información estática se almacena en archivos HTML. Estos
archivos
hi
pueden
d ser actualizados
t li d pero en un momento
t d
dado,
d
cada petición del mismo archivo regresa exactamente el mismo
contenido. El contenido no cambia, no importa quien solicite el
archivo.
Arquitectura estática
HTTP requestt
Web
Browser
Web
Server
HTTP response
espo se
HTML
HTML
HTML
Sistema de archivos
Páginas web dinámicas
No toda la información es de naturaleza estática. La mayoría de las
veces las páginas HTML deben ser generadas dinámicamente
veces,
dinámicamente.
Las páginas web dinámicas son generadas en el servidor de web.
El servidor de web ejecuta ciertos programas para procesar las
peticiones de los usuarios y produce una respuesta dinámica
(customizada).
Entre las tecnologías utilizadas para generar páginas dinámicas,
se pueden nombrar: Servlets, JSP, PHP, ASP, CGI
Arquitectura
Servlet Container
HTTP request
Web
Browser
HTTP request
Web
Server
HTTP response
Servlet
Servlet
HTTP response
Base
de datos
Otros
programas
Servlets
z
z
Los servlets son tecnología basada en Java para
generación de páginas dinámicas de manera similar a los
CGI’s.
Estos programas se ejecutan en un servidor Web y
f
fungen
como una capa intermedia
i t
di entre
t una petición
ti ió
proveniente de un navegador Web u otro cliente HTTP, y
las bases de datos o aplicaciones del servidor HTTP.
Finalidad de los servlets
z
z
z
z
z
Leer datos enviados por el usuario.
Buscar cualquier otra información respecto a la petición
incrustada en la petición HTTP.
Establecer los parámetros HTTP de respuesta
adecuados.
adecuados
Generar resultados en forma dinámica al comunicarse
con una base de datos, ejecutar una llamada RMI o
CORBA o invocar una aplicación.
aplicación
Regresar el documento al cliente, como HTML, en
formato binario (imágenes GIF) o incluso en un formato
comprimido como gzip.
gzip
Ventajas sobre el CGI tradicional
z
z
z
z
Cada petición HTTP es administrada mediante un
subproceso de Java y no mediante un proceso
pesado del sistema operativo.
El conocimiento ya existente de Java lo hace más
adecuado.
d
d
Comunicación directa con el servidor Web.
Están escritos en el lenguaje de programación
Java y siguen una API estándar JSDK
(javax.servlet / javax.servlet.http).
Motor de servlets
z
Se requiere un motor de servlets asociado a
un servidor
id d
de web
b
–
–
z
Puede ser un servidor que incluya el soporte para
servlets
Puede ser una extensión de un servidor de web
Ejemplo
–
–
Tomcat
http://jakarta.apache.org/tomcat/
p j
p
g
API de los Servlets
z
El JSDK cuenta con dos paquetes que son una extensión
estándar:
–
–
z
javax.servlet: tiene las clases que soportan servlets
genéricos e independientes de algún protocolo.
javax.servlet.http: extiende estas clases agregando
funcionalidad específica para HTTP.
Para crear un servlet se implementa la interfaz
javax.servlet.Servlet y puede ser a través de dos clases:
–
javax.servlet.GenericServlet
–
javax.servlet.http.HttpServlet.
Clases Servlet y HTTPServlet
Servlet
void init (ServletConfig config)
void service(ServletRequest request, ServletResponse response)
Void destroy()
HTTPServletServlet
void doGet(HttpServletRequest request, HttpServletResponse response)
void doPost(HttpServletRequest request, HttpServletResponse response)
void doPut(HttpServletRequest request
request, HttpServletResponse response)
...
API de los Servlets
z
z
El resto de las clases son de soporte.
HttpServletRequest y HttpServletResponse son para
accesar las peticiones y respuestas respectivamente.
La clase HttpSession provee la funcionalidad para llevar
el registro de una sesión y la clase Cookie para facilitar
el proceso de escribir y procesar cookies.
El ciclo de vida de un servlet
Creation
Init
Service
Destroy
Ciclo vital de los Servlets
public void init (ServletConfig config) throws
ServletException
z
Éste método se ejecuta cuando el servlet se carga por
primera vez y no vuelve a ejecutarse en cada petición del
usuario. Para leer los parámetros de carga inicial se
utiliza getInitParameter, con el que puede buscar
parámetros de carga inicial asociados con el servlet. (en
el caso del servidor Tomcat ver el archivo web.xml).
Service()
public void service (ServletRequest request,
ServletResponse response) throws ServletException,
IOException
z
z
z
Cuando llega una petición, el servidor invoca el método
service() del servlet.
Este método acepta dos parámetros: un objeto petición y
un objeto respuesta.
Cuando se trata de un servlet genérico, el método
service() debe sobreescribirse,
sobreescribirse como puede verse a
continuación:
Manejo de petición de un servlet
genérico
Servidor
petición
respuesta
GenericServlet
service()
Manejo de petición de un servlet
http
z
En el caso de un servlet http, dicho método no debe
sobrescribirse, debido a que éste es el encargado de
invocar los métodos doGet() o doPost(), dependiendo del
tipo de petición. Y son estos dos últimos los que deben
sobrescribirse.
z
Un servlet http también puede sobrescribir los métodos
doPut() y doDelete(), pero normalmente no sobrescribe
los métodos doTrace() y doOptions() porque su
implementación es suficiente. Esto puede observarse a
continuación:
Manejo de petición de un servlet
http
Servidor
Petición GET
respuesta
Petición POST
respuesta
HttpServlet
doGet()
service()
doPost()
Ciclo vital de los Servlets
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException
public void doPost(HttpServletRequest request,
request
HttpServletResponse response) throws
ServletException, IOException
z
Manejan las peticiones GET y POST. Se sobre-escribe
para programar su funcionalidad.
Ciclo vital de los Servlets
doPut, doTrace, doDelete, etc.
z Manejan las peticiones HTTP poco comunes de PUT,
PUT
TRACE, etc.
public void destroy()
z Se ejecuta sólo cuando el servidor elimina una instancia
del servlet.
servlet No se ejecuta luego de cada petición
petición.
Los Métodos GET y POST
z
Los 2 tipos de peticiones mas comunes en HTTP (también
llamados métodos),
), son GET y
yPOST.
z
Si la petición se invoca mediante una forma se puede
especificar cualquiera de los 2 métodos.
z
Si la invocación se hace escribiendo directamente el URL se
utiliza el método GET. En este caso, el URL se conoce
como ”query string”.
z
El URL “query string” incluye el url del servlet, los nombres
de los parámetros, y sus valores respectivos.
Invocando mediante formas
z
Una forma especifica explicitamente cual de los 2 métodos
utilizar.
z
Si se utiliza el método GET, Los datos de la forma se anexan
al URL “query string”.
z
Si se utiliza el método POST, los datos de la forma se
empacan junto con el resto de la petición. El servidor obtiene
y
el cuerpo
p del mensaje
j HTTP
los datos leyendo
Estructura básica de un Servlet
import java.io.*;
import
p jjavax.servlet.*;
import javax.servlet.http.*;
p
public
class HolaMundo extends HttpServlet
p
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,
p
, IOException
p
{
PrintWriter out = response.getWriter();
out.println("Hola
p
(
mundo");
);
}
}
Manejo de las peticiones del
Cliente
z
z
z
Una de las motivaciones para generar páginas Web de
forma dinámica es que el resultado esté basado en los
datos proporcionados por el usuario.
Con los servlets, dicha operación es automática,
utilizando el método getParameter() de
HttpServletRequest.
Enseguida se muestra un servlet que lee el nombre del
usuario
usua
o y lo
o incluye
c uye e
en la
a respuesta.
espues a
Ejemplo, forma HTML
<HTML>
<HEAD>
<TITLE>Introductions</TITLE>
</HEAD>
<BODY>
<FORM METHOD=GET ACTION="http://server/servlet/HelloName">
If you don't mind me asking, what is your name?
<INPUT
INPUT TYPE=TEXT
TYPE TEXT NAME
NAME="name"><P>
name
P
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
Ejemplo, forma HTML (Cont)
Ejemplo, código del servlet
import java.io.*;
import javax.servlet.
javax servlet *;;
import javax.servlet.http.*;
public class HelloName extends HttpServlet {
public void doGet(HttpServletRequest req,
req
HttpServletResponse res)
throws ServletException, IOException {
// Set the Content-Type header
res.setContentType("text/html");
Ejemplo, código del servlet-2
PrintWriter out = res.getWriter();
String name = req.getParameter(
req getParameter("name");
name );
out.println("<HTML>");
out.println("<HEAD><TITLE>Hello,
out.println(
HEAD TITLE Hello, " + name +
"</TITLE></HEAD>");
out.println("<BODY>");
p
(
)
out.println("Hello, " + name);
out.println("</BODY></HTML>");
}
Ejemplo, código del servlet-3
public void doPost(HttpServletRequest req,
HttpServletResponse res)
throws ServletException
ServletException, IOException {
doGet(req, res);
}
}
Resultado del Programa