You are on page 1of 69

Unidad 3

Desarrollo de Servlets
y JSP
Enrique Lpez Durn
Departamento de Sistemas y Computacin

Contenido
3.1 Introduccin a JSP y Servlets
3.2. Comandos, Acciones y directivas de JSP
3.3. Arquitectura del API y ciclo de vida de Servlets
3.4 Atencin de peticiones por ProcessRequest y redireccin a
otros recursos
3.5.Manejo de excepciones
3.6.Manejo y seguimiento de sesiones
3.7 Procesamiento de formularios

Page 2

3.1.Introduccin a JSP y Servlets


Definicin de servlet
Segn la tecnologia: "Un Servlet es una clase en lenguaje Java
usada para ampliar la funcionalidad de los servidores web a los
que se accede via modelo de programacin request-response."
Segn la arquitectura: un Servlet es un componente Web que se
ejecuta dentro de un contenedor web y genera contenido
dinmico.
Segn la programacin: Los Servlets son pequeas clases Java
independientes de la plataforma compiladas en bytecode que
pueden ser cargadas dinmicamente y ejecutadas dentro de un
servidor web.
Versiones de la especificacin de servlet

Page 3

3.1.Introduccin a JSP y Servlets


Definicin de servlet
Segn la tecnologia: "Un Servlet es una clase en lenguaje Java
usada para ampliar la funcionalidad de los servidores web a los
que se accede via modelo de programacin request-response."
Segn la arquitectura: un Servlet es un componente Web que se
ejecuta dentro de un contenedor web y genera contenido
dinmico.
Segn la programacin: Los Servlets son pequeas clases Java
independientes de la plataforma compiladas en bytecode que
pueden ser cargadas dinmicamente y ejecutadas dentro de un
servidor web.
Versiones de la especificacin de servlet

Page 4

3.1.Introduccin a JSP y Servlets


Las ventajas ms destacables del uso de Servlets son las siguientes:
Es integrable con pginas JSP y se pueden usar filtros.
Instancia permanentemente cargada en memoria por cada Servlet. Cada
peticin se ejecuta en un hilo, no en un proceso.
Con los Servlets, hay n threads pero slo una copia de la clase Servlet.
Los Servlet tambin tienen ms alternativas que los programas CGI para
optimizaciones como mantener abiertas las conexiones de las bases de
datos.
Los Servlets estn escritos en Java y siguen un API bien estandarizado.
Puede ser utilizados sobre cualquier SO. y en la mayora de servidores
Web.
Por ser Java ofrece: mquina virtual, chequeo de tipos, gestin de
memoria, excepciones, seguridad, etc.
Actan como capa intermedia entre la peticin que proviene del
navegador Web u otro cliente HTTP y Bases de Datos o Aplicaciones en
el servidor HTTP.
Page 5

3.1.Introduccin a JSP y Servlets

Get /Hello.jsp

Contenedor
JSP/Servlets
Traductor

JVM
Respuesta.html

Hello.jsp

Servlet

Page 6

3.1.Introduccin a a JSP y Servlets

1 GET /hello.jsp

2 Leer hello.jsp

3 Compilar JSP a Servlet.

4 Cargar/Compilar el JSP(Servlet).

5 Inicializar/Ejecutar el JSP(Servlet).

Limpiar el JSP(Servlet).

6 Responder con hello.html

Page 7

3.1.Introduccin a JSP y Servlets


Arquitectura de un JSP

Page 8

3.1.Introduccin a JSP y Servlets

Hello.jsp
HelloServlet.java

Respuesta.html

Page 9

3.2.Comandos, Acciones y
Directivas de JSP
En un JSP adems de los Tags <% y %> existen otras variaciones
que son las siguientes.
<%= Expresin Java %>
<%! Declaracin Java %>
<%-- Comentario Java --%>

Page 10

3.2.Comandos, Acciones y
Directivas de JSP
Los elementos
empleados en JSP's
son denominados
Acciones, son
ampliamente utilizados
en conjuncin de Java
Beanspermiteencapsulardiversos valores en una Clase Java y que su contenido sea manipulable fcilmente en JSP's/Servlets.
Un Java Bean permite
encapsular diversos
valores en una Clase
Java y que su
contenido sea
manipulable fcilmente
en JSP's/Servlets.
Page 11

3.2.Comandos, Acciones y
Directivas de JSP
Mecanismo de acceso a un Java Bean usando acciones de JSP,
incluyendo persistencia en B.D

Page 12

3.2.Comandos, Acciones y
Directivas de JSP
Las sintaxis de las acciones de JSP son::

Accin
Descripcin:
<jsp:useBean atributos > Utilizado para importar Java Beans a un
JSP..

Atributos:
class : Define la Clase del Java Bean (Nombre de la Clase )
type : Tipo de Java Bean (type) [Casi nunca utilizado]
id : Indica el nombre con que ser referenciado el Java Bean dentro
del JSP (nombre)
scope : Ubicacin del Java Bean (page|request|session|application)
[Generalmente session]

Page 13

3.2.Comandos, Acciones y
Directivas de JSP
Las sintaxis de las acciones de JSP son::

Accin

<jsp:setProperty
atributos>

Descripcin:

Empleado para colocar valores a un Java


Bean en un JSP.

Atributos:

property : Propiedad del Java Bean (propiedad)


name : Nombre del Java Bean (El id de <jsp:useBean>)
value : Valor para ser asignado a la propiedad del Java Bean
(valor)

Page 14

3.2.Comandos, Acciones y
Directivas de JSP
Las sintaxis de las acciones de JSP son::

Accin

<jsp:getProperty
atributos>

Descripcin:

Empleado para extraer valores de un Java


Bean a un JSP.

Atributos:

property : Propiedad del Java Bean (propiedad)


name : Nombre del Java Bean (El id de <jsp:useBean>)

Page 15

3.2.Comandos, Acciones y
Directivas de JSP
Las sintaxis de las acciones de JSP son::

Accin

<jsp:include atributos>

Descripcin:

Empleado para colocar archivos estticos


dentro de JSP's, estos generalmente son
encabezados o pies de pagina escritos en
HTML.

Atributos:

page : Archivo a incluirse en el JSP (Nombre del Archivo)


flush : Indica si debe ser vaciado el Buffer del JSP (true|false)
[Casi nunca especificado]

Page 16

3.2.Comandos, Acciones y
Directivas de JSP
Las sintaxis de las acciones de JSP son::

Accin

<jsp:forward atributos>

Descripcin:

Empleado para redireccionar el control de


un JSP a determinada pgina.

Atributos:

page : Pgina a donde realizar el forward (Redireccin)(URL


de pgina )
flush : Indica si debe ser vaciado el Buffer del JSP (true|false)
[Casi nunca especificado]

Page 17

3.2.Comandos, Acciones y
Directivas de JSP
Las "Directivas" en un JSP son aquellos colocados al inicio de la
pgina y representan actividades de inicializacin, entre ellos se
encuentran:

Directiva
Descripcin:
<%@ page opciones %> Utilizado para importar clases Java que sern
utilizadas por el JSP, parmetros de error,
coordinacin de "Threads" y otros elementos.

Opciones de uso frecuente:


contentType : Tipo de MIME para el contenido del JSP
pageEncoding: Charset del JSP
ejemplo: <%@page contentType="text/html" pageEncoding="UTF-8"%>
errorPage : Pgina a utilizarse en caso de Error (URL Pgina)
extends : Para heredar ("inherit") el comportamiento de una Clase en el JSP
import : Clases a utilizarse dentro del JSP.
ejemplo: <%@page import="java.util.Calendar ;" %>
Page 18

3.2.Comandos, Acciones y
Directivas de JSP
Directiva
<%@ include opciones %>

Descripcin:
para colocar archivos estticos dentro de JSP's,
estos generalmente son encabezados o pies de
pagina escritos en HTML.

Opciones de uso frecuente:


file : Archivo a incluirse en el JSP (Nombre del Archivo)
Ejemplo: <%@ include file=header.jsp %>

Directiva
<%@ taglib opciones %>

Descripcin:

Utilizado para incluir libreras de Tags hechos a


medida en JSP's

Opciones de uso frecuente:


uri : Empleado para indicar la ubicacin de las libreras hechas a medida (URI de
Libreras )
prefix : Prefijo para Tags hechos a medida (Prefijo)
Ejemplo:
Page 19

3.2.Comandos, Acciones y
Directivas de JSP
Objetos en JSP
Debido a que un JSP ofrece una abstraccin por arriba de un
Servlet, y ste ltimo es un Objeto (Clase) Java, tambin se tienen
acceso a diversos Objetos dentro de un JSP sin la necesidad de
realizar declaraciones complejas

Page 20

3.3 Arquitectura del API y ciclo de vida de


Servlets

Page 21

3.3 Arquitectura del API y ciclo de vida de


Servlets
Clases y objetos de la API de Servlets

Page 22

3.3 Arquitectura del API y ciclo de vida de


Servlets
Clases y objetos de la API de Servlets

Page 23

3.3 Arquitectura del API y ciclo de vida de


Servlets
Clases y objetos de la API de Servlets

Page 24

3.3 Arquitectura del API y ciclo de vida de


Servlets
Pasos

Page 25

3.3 Arquitectura del API y ciclo de vida de


Servlets
Cada servlet tiene el mismo ciclo de vida:
1.-Un servidor carga e inicializa el servlet.
2.-El servlet maneja cero o ms peticiones de cliente.
3.-El servidor elimina el servlet.
Inicializar un Servlet
Cuando un servidor carga un servlet, ejecuta el mtodo init del servlet. La inicializacin se completa
antes de manejar peticiones de clientes y antes de que el servlet sea destruido.
Aunque muchos servlets se ejecutan en servidores multi-thread, los servlets no tienen problemas
de concurrencia durante su inicializacin. El servidor llama slo una vez al mtodo init al crear la
instancia del servlet, y no lo llamar de nuevo a menos que vuelva a recargar el servlet. El servidor
no puede recargar un servlet sin primero haber destruido el servlet llamando al mtodo destroy.
Interactuar con Clientes
Despus de la inicializacin, el servlet puede manejar peticiones de clientes. Estas respuestas son
manejadas por la misma instancia del servlet por lo que hay que tener cuidado con acceso a
variables compartidas por posibles problemas de sincronizacin entre requerimientos concurrentes.
Destruir un Servlet
Los servlets se ejecutan hasta que el servidor los destruye, por cierre el servidor o bien a peticin
del administrador del sistema. Cuando un servidor destruye un servlet, ejecuta el mtodo destroy
del propio servlet. Este mtodo slo se ejecuta una vez y puede ser llamado cuando an queden
respuestas en proceso por lo que hay que tener la atencin de esperarlas.. El servidor no ejecutar
de nuevo el servlet, hasta haberlo cargado e inicializado de nuevo.
Page 26

3.3 Arquitectura del API y ciclo de vida de


Servlets
Esquema 2

Page 27

3.4 Atencin de peticiones por


ProcessRequest y redireccin a otros recursos
Mensajes HTTP

Page 28

3.4 Atencin de peticiones por


ProcessRequest y redireccin a otros recursos
Mensajes GET

Page 29

3.4 Atencin de peticiones por


ProcessRequest y redireccin a otros recursos
Mensajes GET: Parmetros

Page 30

3.4 Atencin de peticiones por


ProcessRequest y redireccin a otros recursos
Mensajes POST: Parmetros

Page 31

3.4 Atencin de peticiones por


ProcessRequest y redireccin a otros recursos
Recepcion de Parmetros

Page 32

3.4 Atencin de peticiones por


ProcessRequest y redireccin a otros recursos
ProcessRequest

Page 33

3.4 Atencin de peticiones por


ProcessRequest y redireccin a otros recursos
RequestDispatcher/forward y response.sendRedirect
if (i.getNombreusuario().equals(un)&&
i.getPassword().equals(pwd)){
request.setAttribute("investigador", i);
RequestDispatcher rd=request.getRequestDispatcher("mostrardatos.jsp");

rd.forward(request,response);
}else
response.sendRedirect("index.jsp");

Page 34

3.5.Manejo de excepciones
JSP posee un mecanismo apropiado para el manejo de errores
que ocurren a tiempo de ejecucin.
El atributo errorPage de la directiva page se usa para indicar que
la pgina recibe las excepciones lanzadas por algn scriptlet.
Adems, el atributo errorPage de la misma directiva indica la
pgina JSP a la cual se redirigir el objeto implcito exception (de
tipo Throwable) que describe el problema.

Page 35

3.5.Manejo de excepciones
Ejemplo de manejo de excepciones
Para manejar errores a tiempo de ejecucin, se puede usar una
pgina que indique la naturaleza del error.
Dicha pgina debe incluir entre sus directivas la siguiente:
<%@page isErrorPage=false errorPage=Error.jsp%>
la pgina redirige a su vez el objeto exception a la pgina
Error.jsp .
La pgina Error.jsp debe contener a su vez, la directiva:
<%@page isErrorPage=true %>
Esta indicacin permite acceder al objeto exception en la pgina
Error.jsp

Page 36

3.5.Manejo de excepciones
Division.jsp

Page 37

3.5.Manejo de excepciones
ErrDiv.jsp

Page 38

3.5.Manejo de excepciones
Probar division.jsp sin error
http://localhost:8080/DAE_ej_clase2/division.jsp?op1=12&op2=6
http://localhost:8080/DAE_ej_clase2/division.jsp?op1=12&op2=0

Page 39

3.5.Manejo de excepciones
Probar division.jsp con error
Sin parmetros http://localhost:8080/DAE_ej_clase2/division.jsp
Utilizar una letra en lugar de nmeros en los operandos
http://localhost:8080/DAE_ej_clase2/division.jsp?op1=10&op2=A

Page 40

3.6.Manejo y seguimiento de Sesiones


Por omisin todas las pginas JSP participan en una sesin HTTP.
El objeto session (de tipo HttpSession) est disponible para
almacenar objetos que persistan a lo largo de la vida de la aplicacin.
El atributo session de la directiva page se usa para permitir o
negar el acceso al objeto session en la pgina; por omisin, el objeto
session es accesible.
La directiva <%page session=false%> indica que en la pgina no
se usarn sesiones.
Una sesin se identifica por un nombre nico de sesin y se
almacena en el browser del cliente en forma de cookie; si el browser
no maneja cookies, la sesin se mantiene por reescritura del URL.
La sesin mantiene referencias a todos los objetos almacenados
pero tan pronto como la sesin es invalidada o el plazo de los objetos
expira, los objetos se marcan para su recoleccin como basura.
Page 41

3.6.Manejo y seguimiento de
Sesiones
No se pueden guardar tipos simples en una sesin, pero se puede
guardar cualquier tipo de objeto identificado por una cadena nica de
caracteres.
El siguiente scriptlet hace al objeto Book pblicamente disponible para
todas las pginas y servlets JSP que compartan la misma sesin:
<% Book book = new Book();
session.putValue(book,book);
%>
El objeto book puede recuperarse realizando una coercin para convertirlo
al tipo apropiado:
<% Book book = (Book)session.getValue(book); %>
No hay lmite en el nmero de objetos que se pueden manejar en una
sesin, aunque un gran nmero de ellos reducir el rendimiento del
sistema.
Generalmente, la duracin de una sesin est limitada a 30 minutos,
aunque la duracin puede ampliarse regularmente usando el mtodo
setMaxIntactiveInterval(int secs).
Page 42

3.6.Manejo y seguimiento de
Sesiones

Ejemplo de sesion.jsp

Page 43

3.6.Manejo y seguimiento de
Sesiones
sesion1.jsp

Page 44

3.6.Manejo y seguimiento de
Sesiones
sesion2.jsp

Page 45

3.6.Manejo y seguimiento de
Sesiones
Sesion3.jsp

Page 46

3.6.Manejo y seguimiento de
Sesiones
Corrida de una sesincon invalidacin

Page 47

3.6.Manejo y seguimiento de
Sesiones

La aplicacin tiene la estructura:


Index.jsp, presenta informacin de bienvenida y tiene el un formulario para capturar username
y password del usuario. La accin asociada es invocar un servlet para autenticar al usuario.
El servlet verifica que el usuario este registrado. Siendo cierto, incia el objeto sesin y redirige a
principal.jsp. En caso contrario regresa a index.jsp
Principal.jsp, aplica un algoritmo de verificacin en el objeto sesin considerando el id de
sesin y el nombre del usuario. Si se comprueba la persistencia de la sesin, entonces
DESPLIEGA un menu. En caso contrario regresa a index.jsp.
El menu de principal.jsp, puede redirigir a:
Entrada.jsp, para capturar nuevos usuarios
Mostrar.jsp, para desplegar la informacin de usuarios
Individual.jsp, para busqueda individual y permitir actualizacin o eliminacion de los
registros de un usuario
Terminar.jsp, Permite al usuario cerrar la sesin o regresar a ella.
Entrada.jsp, mostrar.jsp, individual.jsp y dems archivos jsp invicados desde estas pginas,
requieren de aplicar el algoritmo de verificacin de sesin
Terminar.jsp al igual que index.jsp no requeren de aplicar el algoritmo de verificacin de sesin.
Existen varios servlets encargados del procesamiento de los formularios de Entrada, mostrar e
individual.
Page 48

3.6.Manejo y seguimiento de
Sesiones
INICIO DE SESION. Manejada en Servlet donde se autentifica al
usuario.

Page 49

3.6.Manejo y seguimiento de
Sesiones
FIN DE SESION. Manejada en Servlet cuando se elige terminarla.

Page 50

3.6.Manejo y seguimiento de
Sesiones
Algoritmo de verificacin de sesin en pginas JSP con sesin iniciada:

SetHeader:
agrega atributos y su valor al
encabezadoHTTP

Cache-Control es un META-TAG de HTML, que


indica que la informacin almacenada en cach
no debe ser utilizada y en su lugar las solicitudes
debern enviarse al servidor de origen

Despus de la fecha y la hora,


el documento debe considerarse
Caducado. 0 significa ahora

Algortimo

Page 51

3.7 Procesamiento de formularios


Tecnologas implicadas:
JavaServer Faces (JSF) 2.0
Java Persistence API (JPA) 2.0
Enterprise JavaBeans (EJB) 3.1
Ser necesario tener instalado el siguiente software:
NetBeans IDE 8.0, o superior.
Java Development Kit (JDK) 7, o superior.
GlassFish Application Server v4, o superior.
MySQL 5.x o superior
Page 52

3.7 Procesamiento de formularios


Esta tecnologa es un Framework del lado del servidor que permite
construir aplicaciones Java basadas en Web.
Partes de una aplicacin JavaServer Faces
Una aplicacin tpica de JavaServer Faces comprende lo siguiente:
Un conjunto de pginas web en la que se distribuyen los componentes.
Un conjunto de etiquetas (tags) para agregar componentes a las pginas.
Un conjunto de beans administrados (ManagedBeans), que son
administrados por el contenedor usando objetos. Estos beans
administrados son los que estn detrs de una pgina proporcionando
propiedades y funciones a la interfaz de usuario.
Un archivo descriptor web (web.xml)
Adicionalmente, archivos de configuracin de recursos (faces-config.xml)
Adems, objetos personalizados: validadores, convertidores, oidores
(listeners) para mejorar la aplicacin.
Y etiquetas adicionales personalizadas
Page 53

3.7 Procesamiento de formularios


Arquitectura

Page 54

3.7 Procesamiento de formularios


Creacion de una aplicacin JSF en Netbeans
crear un nuevo proyecto desde File > New Project. Seleccionamos la
categora web y en proyecto: "Web Application".

Presionar boton next


Escribiremos el nombre jsf-01-primera-aplicacion.

Page 55

3.7 Procesamiento de formularios


Seleccionamos el servidor GlassFish 4.0 y seleccionamos Java EE 7
Web.

Click en next
En las opciones de "Framework", activamos la opcin "JavaServer
Faces" y nos aseguramos de que utilice en "Server Library" la opcin
JSF 2.2.
Page 56

3.7 Procesamiento de formularios


Despus de dar click en finish, aparece

Page 57

3.7 Procesamiento de formularios


2. Creando recurso de texto
usar un recurso donde estn todos los mensajes a mostrar. Estos
archivos de recursos son bsicamente archivos .properties.
crear este archivo en File > New File (Ctrl + N) y seleccionamos en
categora "Others" y el tipo de archivo "Properties file"
nombre de archivo, "mensajes"
y la ruta donde se ubicar.

Page 58

3.7 Procesamiento de formularios


2. Creando recurso de texto
.

Ahora, escribamos un texto que usaremos en la aplicacin. Ser el


ttulo de la aplicacin. Luego, pondremos otro texto ms, pero este se
separar por puntos.

Page 59

3.7 Procesamiento de formularios


Rregresar a index.html y escribir lo siguiente despus del tag
<head>

Ahora, para hacer referencia a ese recurso de mensajes lo


guardaremos en la variable "msg".
Sigamos con escribir dentro de <head> </head> escribir:

Page 60

3.7 Procesamiento de formularios


Y ahora, agreguemos cmo ttulo, el otro texto. Pero notemos que
la clave de este texto tiene puntos "app.formulario"
Para usarlo, escribiremos la clave encerrndolo entre corchetes:

Page 61

3.7 Procesamiento de formularios


3 Controlador de JSF
El controlador de JSF est basado en un Bean. Se recomienda
usar un @Name. Se recomienda usar un Bean por cada vista, ya
que sern las controladores de las pginas.
Crearemos un nuevo archivo (Ctrl+N) y seleccionamos en la
categora "JavaServer Faces" el tipo "JSF ManagedBean"

Page 62

3.7 Procesamiento de formularios


Ahora, colocaremos el nombre de nuestra clase, el paquete, y
otras propiedades que tendr el ManagedBean.
Class Name: ContactoFormBean
Package: com.apuntesdejava.jsf.controladores
Name: contactoFormBean (se ha autogenerado)
Scope: request

Page 63

3.7 Procesamiento de formularios


La clase generada, es una clase comn y corriente, solo con dos
notaciones adicionales @Named y @RequestScoped.

Page 64

3.7 Procesamiento de formularios


ManagedBean es la clase que permitir controlar el formulario
para registrar los nombres de nuestro directorio de contactos.
Crear una propiedad en esta clase. Hay varias maneras: una es
escribiendo todas las declaraciones; otra, escribir la propiedad y
usar la herramienta de encapsulamiento; o, haciendo clic derecho
en el cdigo fuente y seleccionar "insert code"
Y escribimos
Obtenemos

Page 65

3.7 Procesamiento de formularios


Adems, crear un mtodo nuevo para devolver un saludo:

Crear la clase ResourcesUtil y tendr un mtodo:

Page 66

3.7 Procesamiento de formularios


Completar el formulario en index.xhtml

mensajes.properties:

Salida:

Page 67

3.7 Procesamiento de formularios


4 Mejorar la interfaz de usuario:
Primero, vamos a poner el botn ms abajo. Pero no usemos
<br/> sino vamos a ponerlo dentro de una malla. Envolvemos la
etiqueta, el input y el botn en un panelGrid, que tenga dos
columnas:

Page 68

3.7 Procesamiento de formularios


Se requiere que el mensaje "Hola null" no aparezca, hasta que la
propiedad "nombre" tenga un valor. En JSF, agregar el atributo
"rendered" a ese tag. Este atributo - que existe en todos los
componentes de JSF - recibe un valor boolean. Si es "true" (por
omisin) mostrar el componente en la interfaz de usuario. Si es
"false", no.

Page 69