Sistemas de
Información
Tecnologías Web. Interactividad y envío de
información Cliente → Servidor
Servlets
Agradecimientos: Jesus Villamor Lugo, Simon Pickin de IT/UCIIIM.
[email protected]
Concepto
¿Qué es un servlet?
Son componentes de una aplicación web que se ejecutan en el servidor
Permiten extender la funcionalidad del servidor (tanto de servidores HTTP
como de otro tipo de servidores como por ejemplo ftp)
Son una alternativa a los CGI
Cada petición se ejecuta en un hilo. Los Servlets quedan residentes en
memoria cuando la petición termina
Un servlet es un pequeño código Java que el servidor Web carga para
manejar peticiones del cliente
Estas clases java utilizan el API Servlet
Se cargan y ejecutan dentro de un servicio de red (ej. un Servidor Web)
Implementan determinados interfaces que le permiten:
Recibir una petición HTTP
Generar una respuesta
Servlets son a Servidores como Applets son a Navegadores
Con la diferencia de que los Servlets no suelen usar GUI
[email protected]
2
Servlets
Un poco de historia
JavaSoft lanza el Java Web Server
A mediados de 1997, conocido como Jeeves
Dos objetivos
Implementación de un Servidor de Internet basado en Java
Introducir los Servlets
Se provee el Java Servlet Development Kit (JSDK)
Permite ejecutar servlets en los servidores HTTP más extendidos
Apache, Netscape Enterprise Server, Microsoft IIS.
Ahora forma parte de la especificación J2EE
J2EE 1.3 (principios de 2002) incluye servlet 2.3
J2EE 1.4 (mediados de 2004) incluye servlet 2.4
[email protected]
3
Servlets
Documentación e implementaciones
Documentación
http://java.sun.com/products/servlet/docs.html
http://java.sun.com/products/servlet/2.3/javadoc/index.html
J2EE SDK
Implementación de J2EE provisto por SUN
Incluye el Sun Java System Application Server Platform
últimas versiones basadas en Apache Tomcat
Apache Jakarta Tomcat
versión 4: implementación software libre de servlet 2.3
versión 5: implementación software libre de servlet 2.4
[email protected]
4
Utilidad
¿Para qué sirve un servlet?
Extiende funcionalidad del servidor
Sus usos
Reemplazar a los “primitivos” CGIs
Ej. Procesamiento de formularios en la parte servidor
Colaboración entre personas
Ej. Conferencias en-línea
Debido a la concurrencia y a la sincronización de peticiones
Reenvío de peticiones a otros servidores y servlets
[email protected]
5
Servlets
¿Cómo funcionan?
Fichero .html
(con <FORM>)
<URL>
navegador
GET ó POST
Petición
Programa Servlet
Respuesta
visualizar
1.
2.
3.
4.
Se parte de un Fichero.html que
tenga un formulario (<FORM>)
accesible a través de Internet
•
El <FORM> deberá especificar las
diversas formas de paso de
parámetros
El cliente accederá al fichero html
a través de un Navegador,
rellenará el formulario y dará a la
tecla de aceptar (Submit).
Empaquetando la petición.
La petición de cliente es atendida
por un Programa Servlet
(escrito en Java) quien da la debida
respuesta tras procesarse la
petición.
El cliente Visualizará la
respuesta
Servidor
Cliente
[email protected]
6
Servlets
Ciclo de vida de un servlet
1.
Instanciación e inicialización del servlet. Si aún no existe ninguna
instancia del servlet (es la primera llamada), el contenedor web:
Primero carga la clase del servlet,
luego crea una instancia y la inicializa invocando su método init
2. Entonces, el servidor puede servir continuamente peticiones. Para
cada llamada:
El contenedor crea un nuevo thread (hilo)
Se invoca al método service de dicho thread.
Los servlets residen típicamente en servidores multithread pero el
programador es el responsable de sincronizar el acceso a los recursos
compartidos.
También se puede restringir el acceso a un único thread
3. El método service determina tipo de petición que ha llegado y llama al
método correspondiente doGet, doPost, etc.
4. Un servlet se desactiva cuando recibe una llamada al método
destroy o cuando su servidor se muere
[email protected]
7
Escenario básico
Navegador Web Servidor Web
new
HTTPServlet
HTTP Request
init
service
HTTPServletRequest
HTTPServletResponse
getParameter
setContentType
getOutputStream
println
close
ServletOutputStream
HTTP response
return
Cliente
[email protected]
Servidor
8
Aplicación. ¿Qué necesito?
Para desplegar servlet creado por otro
1. Crear página web (o mecanismo
2.
alternativo) que realice petición al servlet
Instalar motor de servlets que proporcione:
1. Contenedor donde instalar el servlet
2. Soporte en tiempo de ejecución (mecanismos
de arranque y parada del servidor, logs, etc.)
[email protected]
9
¿Cómo referenciar un Servlet
desde una página web?
Usando etiquetas HTML
Usando la etiqueta A:
<a href="direccion_del_servlet">Texto</a>
Usando la etiqueta IMG:
<img src=" direccion_del_servlet ">
Otras (javascript, css, etc.)
Usando un formulario (forma + habitual):
<form action=" direccion_del_servlet " > <!--
Elementos del formulario --> </form>
[email protected]
10
Despliegue de un servlet
Instalación y conf. de un motor de Servlets
Instalación (ejemplo Tomcat)
Configuración
Dar valor variables de entorno
CATALINA_HOME (dir de instalación de Tomcat)
JAVA_HOME (dir de instalación del JDK)
Añadir al path (variables anteriores/bin)
Añadir al classpath
${CATALINA_HOME}/common/lib/servlet.jar
Ubicación de las clases de nuestra aplicación
[email protected]
11
Despliegue de un servlet
Contenedor: ¿Dónde coloco los servlets?
$CATALINA_HOME
webapps
MiCarpetaRaiz
WEB-INF
classes
MiServlet_1.class
MiSservlet_2.class
.
.
.
lib
Fichero1.jar
Fichero2.jar
web.xml
Fichero.html
.
.
.
.
.
.
web.xml
(...)
<servlet>
</servlet>
(...)
<servlet-name>NombreDelServlet</servlet-name>
<description>
Servlet que devuelve un documento XHTML con
el mensaje "¡Hola Mundo!".
</description>
<servlet-class>MiServlet_1</servlet-class>
OtrosContenidosEstaticos
Fichero.war
http://localhost:8080/MiCarpetaRaíz/servlet/MiServlet_1
[email protected]
12
Despliegue de un servlet
Soporte en tiempo de ejecución
Motor de servlets (Apache-Tomcat)
Arranque:
Parada:
startup.sh
shutdown.sh
Funcionalidad
Soporte para servicios de red (evita al programador
preocuparse de detalles de comunicación entre el
contenedor y el servidor web)
Inicializa, invoca y gestiona ciclo de vida del servlet
Proporciona una implementación del API de servlets
de java
[email protected]
13
Aplicación ¿Qué necesito?
Para crear mi propio servlet
JDK (Entorno para compilación, ejecución
y depuración)
Java Servlet API. APIs específicas para el
desarrollo de servlets
Entorno de pruebas (consultar requisitos
de despliegue)
[email protected]
14
Aplicación. Desarrollo
Tareas de un servlet
Leer datos enviados por el usuario.
Procedentes de: formulario HTML, un applet o una aplicación cliente HTTP, etc.
Recuperar información del usuario incluida en petición HTTP
Ej: Nombre de la máquina cliente, tipo de navegador,cookies, etc.
Generar resultados
Para ello puede necesitar acceder a BD, o llamar otros programas locales o remotos
Formatear los resultados en un documento
Típicamente una página web
Poner parámetros de respuesta HTTP
Content-type, cookies, etc.
Devolver el documento al cliente
Documento HTML, zip, gif, etc.
1.
2.
3.
4.
5.
6.
[email protected]
15
Aplicación. Desarrollo
Esqueleto básico
Todo Servlet tiene que extender la clase HttpServlet y sobrescribir el
método doGet ó doPost, dependiendo de si los datos se envían con
GET o con POST
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
request,
response)
HttpServletResponse
public class MiServlet extends HttpServlet {
public void doGet (HttpServletRequest
throws ServletException, IOException {
// Se usa "request" para leer cabeceras HTTP entrantes (e.j. cookies)
// y datos de formularios HTML (e.j. Datos que el usuario proporciona en el “submit”)
// Se usa "response" para especificar la línea de respuesta HTTP y las cabeceras
// (e.j. Especificar el tipo de contenido, poner las cookies).
PrintWriter out = response.getWriter();
// Se usa "out" para enviar el contenido al navegador del cliente
}
}
[email protected]
16
Ejemplo 1 (Sin <FORM>)
El ejemplo más básico
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");
}
}
Recordatorios:
1.
Deje completamente definido en su
servidor http (Apache, MS IIS,...)
dónde se van a dejar sus
servlets (conviene que sea un sitio
estándar para todo el mundo).
Incluya en el CLASSPATH un enlace
a servlet.jar y al sitio donde deje sus
servlets.
Se invocará al Servlet de la forma
http://host/any-path/MiServlet
(siendo MiServlet el nombre de la
clase)
2.
3.
[email protected]
17
Ejemplo 2 (Sin <FORM>)
Una respuesta “text/html”
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MiPrimerHTMLServlet
Comentarios de: Tecnologías Web: servlets (0)
No hay comentarios