Ud 11

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 67

11

ANÁLISIS Y PROGRAMACIÓN EN JAVA

Desarrollo de aplicaciones
web con servlet
ÍNDICE
11 11.1 11.2 11.3 11.4 11.5 11.6

Características y Generación Recuperación Redireccionamien Atributos de Cookies


ventajas de un de páginas de datos to y transferencia petición, sesión
servlet. Creación con servlets enviados en de peticiones y aplicación
de servlets HTTP una petición
11.7 11.8

Opciones de Acceso a
configuración datos desde
del archivo un servlet
web.xml
11.1 Características y
ventajas de un
servlet. Creación
de servlets HTTP

C O M E N Z A R
Características y ventajas de un servlet. Creación de servlets HTTP

Servlets
1 2 3

Un servlet es un Con ellos podemos construir Utilizar un servlet es


programa Java que se páginas dinámicas, basadas en sencillo y eficiente, ya que
ejecuta en un servidor diferentes fuentes variables: datos en cada petición no es
Web y construye o sirve proporcionados por el usuario, necesario un proceso
páginas web. fuentes de información variable o entero sino simplemente
programas que extraigan arrancar un hilo.
información de bases de datos.

4
Los servlets nos permiten realizar funciones como procesar,
sincronizar y coordinar múltiples peticiones de clientes,
reenviar peticiones a otros servlets o a otros servidores, etc.
Características y ventajas de un servlet. Creación de servlets HTTP

Arquitectura de servlets

Servidor web Librerías Documentación


Un servidor web capaz de dar Debemos disponer de las librerías Aunque no es necesario, es
soporte a servlets / JSP. Algunos (clases) necesarias para trabajar recomendable tener en cuenta la
ejemplos de estos servidores con servlets / JSP. En el momento documentación sobre la API de
que podemos tener como de desarrollar la aplicación servlets / JSP.
referencia son: debemos incluirlas en el classpath
para que las compilen los ficheros
Apache (solo los servlets, los JSP no es
Resin
Tomcat necesario compilarlos).
Java Web Las librerías suelen venir en
JRun ficheros JAR.
Server
Ejemplo: common/lib en Tomcat,
BEA API de servlets), y jsp-api.jar, para
WebLogic JSP.
Características y ventajas de un servlet. Creación de servlets HTTP

Toda la infraestructura que necesitamos para trabajar con servlets


se encuentra dentro del paquete javax.servlet.

La interfaz Servlet es el elemento central y define los métodos


para cualquier servlet.

La clase GenericServlet es una clase abstracta que implementa


dicha interfaz para un servlet genérico, independiente del
protocolo.

Para definir un servlet que se utilice vía web utilizamos la clase


HttpServlet, localizada dentro del subpaquete javax.servlet.http.
Esta clase hereda de GenericServlet, y también es una clase
abstracta, de la que heredaremos para construir los servlets para
nuestras aplicaciones web.
Características y ventajas de un servlet. Creación de servlets HTTP

Cuando un servlet acepta una petición de un cliente,


se reciben dos objetos:

Un objeto de tipo ServletRequest que


contiene los datos de la petición del
usuario (toda la información entrante).

Un objeto de tipo ServletResponse que


contiene (o contendrá) la respuesta del
servlet ante la petición (toda la información
saliente).
11.2 Generación de
páginas con
servlets
C O M E N Z A R
Generación de páginas con servlets

Estructura básica de un servlet


import javax.servlet.*;
import javax.servlet.http.*;
La plantilla común para implementar un
servlet es: public class ClaseServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// ... codigo para una peticion GET
}

public void doPost(HttpServletRequest request,


HttpServletResponse response)
throws ServletException, IOException

{
// ... codigo para una peticion POST
}
}
Generación de páginas con servlets

import javax.servlet.*;
import javax.servlet.http.*;
La plantilla común para implementar un
servlet es: public class ClaseServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// ... codigo para una peticion GET
}

public void doPost(HttpServletRequest request,


HttpServletResponse response)
El servlet hereda de la clase HttpServlet. throws ServletException, IOException
Tendremos que sobreescribir los métodos
doGet(), doPost() o ambos, colocando el {
// ... codigo para una peticion POST
código que queremos que se ejecute al
}
recibir una petición GET o POST. Lo mejor
}
es que definamos ambos para distinguir las
peticiones.
LECTURA

Configuración de servlets en
aplicaciones web
TIEMPO ESTIMADO
10 min
TIEMPO ESTIMADO DE LECTURA
10 min

https://drive.google.com/file/d/1NmHwi-paaKu1sOFytWJSvtBrWS5ub2mJ/preview
Generación de páginas con servlets

Procesamiento de peticiones GET y POST

Para procesar peticiones GET utilizaremos el método doGet().

Para realizar el procesamiento de petición, vamos a


sobreescribir este método en el servlet:

public void doGet(HttpServletRequest request,


HttpServletResponse response)
throws ServletException, IOException
{
// ... codigo para una peticion GET
}
Generación de páginas con servlets

Con los métodos del objeto HttpServletRequest podremos:

Acceder a elementos de la petición, como valores de parámetros:


String nombreUsuario =
request.getParameter("nombre");

Acceder a los parámetros en la cadena de la petición y procesarlos


como queramos:
String query = request.getQueryString();
...

Obtener un canal de entrada (Reader o InputStream) con que


leer los datos de la petición:
BufferedReader r = request.getReader();
...
Generación de páginas con servlets

Con los métodos del objeto HttpServletResponse podremos:

Establecer valores de la cabecera:


response.setContentType("text/html");

Obtener el canal de salida por el que enviar la respuesta:


PrintWriter out = response.getWriter();
out.println ("Enviando al cliente");

Redirigir a otra página:


response.sendRedirect("http://localhost:8080/pag.
html");
Generación de páginas con servlets

Utilizaremos el método doPost()para


procesar peticiones POST. Debemos
sobreescribir este método para definir
nuestro propio procesamiento de la petición:
public void doPost(HttpServletRequest
request,
HttpServletResponse
response)
throws ServletException, IOException
{
// ... codigo para una peticion POST
}
11.3 Recuperación de
datos enviados en
una petición
C O M E N Z A R
Recuperación de datos enviados en una petición

Cuando queramos obtener información


SOBRE LA PETICIÓN DE LOS CLIENTES UTILIZAREMOS LOS OBJETOS ServletRequest.

El subtipo HttpServletRequest se utiliza en las peticiones HTTP y


proporciona acceso a los datos de las cabeceras HTTP, cookies,
parámetros pasados por el usuario, etc.
Recuperación de datos enviados en una petición

Entre los métodos de esta clase destacan:

getParameterNames(), devuelve los nombres de los parámetros. Con


getParameter(“nombre”) se obtiene el valor del parámetro “nombre”.
Si un parámetro tiene varios valores (por ejemplo, si tenemos un array de cuadros
de texto con el mismo nombre en un formulario), se pueden obtener todos
separados con getParameterValues().
Los nombres de los parámetros normalmente sí distinguen mayúsculas de
minúsculas, deberemos tener cuidado al indicarlos.
Recuperación de datos enviados en una petición

Para obtener una lista con los nombres de los parámetros enviados por el cliente.

Enumeration getParameterNames()

Para obtener un valor del parámetro de nombre nombre.

String getParameter (String nombre)

Si tenemos un array de cuadros de texto con el mismo nombre en un formulario, se


pueden obtener todos separados con:
String[] getParameterValues (String nombre)

Si queremos obtener la cadena de una petición GET, utilizaremos el método:

String getQueryString()
Recuperación de datos enviados en una petición

Para obtener datos de peticiones POST, PUT o DELETE, utilizaremos:


• Si son peticiones donde esperemos recibir texto:

BufferedReader getReader()

• Si esperamos recibir datos binarios:


ServletInputStream getInputStream()

Para obtener información sobre la línea de petición utilizamos:


• Si queremos obtener el comando HTTP solicitado:

String getMethod()

• Cuando queramos obtener la parte de la URL de petición que está


detrás del host y el puerto, pero antes de los datos del formulario:

String getRequestURI()

• Si queremos obtener el protocolo empleado:


String getProtocol()
11.4 Redireccionamiento y
transferencia de
peticiones
C O M E N Z A R
Redireccionamiento y transferencia de peticiones

En este caso, para enviar el resultado de procesar una


petición a un cliente. Vamos a utilizar los objetos
ServletResponse.

El subtipo HttpServletResponse se utiliza en las peticiones


HTTP. Proporciona acceso al canal de salida por donde
enviar la respuesta al cliente.
Redireccionamiento y transferencia de peticiones

Los métodos que destacan son:

Para obtener un Writer para enviar texto al cliente.


Writer getWriter()

Si queremos enviar datos binarios,


ServletOutputStream getOutputStream()

Para realizar una redirección a partir de la response (HttpServletResponse):


response.sendRedirect(java.lang.String location)
11.5 Atributos de
petición, sesión
y aplicación
C O M E N Z A R
Atributos de petición, sesión y aplicación

Session en Servlets
1 2 3
Para la gestión de Una sesión contiene Cuando un usuario entra a un sitio
sesiones utilizaremos el información específica web por primera vez, se obtiene
objeto HttpSession. de un usuario en HttpSession a través de

particular. request.getSession(), y se otorga


una identificación única para ese
4 usuario que servirá para identificar
su sesión. Esta identificación única
Si el usuario no visita el sitio web en el tiempo se puede almacenar en una cookie
especificado (el tiempo de espera es de 30 por o en un parámetro de solicitud.
minutos por defecto si no se especifica el valor
diferente de configuración), el contenedor de servlet
destruye la sesión y la siguiente solicitud ya no se
atiende desde esa sesión sino que el contenedor de
servlet creará una nueva.
Atributos de petición, sesión y aplicación

Vamos a ver cómo se crea un objeto HttpSession.

protected void doPost(HttpServletRequest req,


HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession();
}
Atributos de petición, sesión y aplicación

Para almacenar la información del usuario en el objeto de la sesión se


utiliza el método setAttribute() después, cuando sea necesario, esta
información se puede obtener de la sesión.

Vamos a ver un ejemplo donde se almacena el nombre


de usuario, el ID de correo electrónico y el nombre de
usuario en sesión con el nombre de atributo uName,
uemailId y uAge respectivamente.
Atributos de petición, sesión y aplicación

Ejemplo Ejemplo

session.setAttribute("uName", Obtenemos los valores de los atributos


"ChaitanyaSingh"); usando nombres de atributos.
session.setAttribute("uemailId",
"[email protected]");
String userName = (String)
session.setAttribute("uAge", "30"); session.getAttribute("uName");
String userEmailId = (String)
Si queremos obtener el valor de la session.getAttribute("uemailId");
sesión, debemos usar el método String userAge = (String)
getAttribute() de la interfaz session.getAttribute("uAge");
HttpSession.
Atributos de petición, sesión y aplicación

Métodos de HttpSession
public void setAttribute(String name, Object value): Este método vincula el objeto con un nombre y almacena el
par nombre/valor como un atributo del objeto HttpSession. Si ya existe un atributo, este método reemplaza los
atributos existentes.

public Object getAttribute(String name): Devuelve el objeto String especificado en el parámetro, desde el objeto
de sesión. Si no se encuentra ningún objeto para el atributo especificado, el método getAttribute() devuelve un
valor nulo.

public Enumeration getAttributeNames(): Devuelve una enumeración que contiene el nombre de todos los objetos
que están vinculados como atributos al objeto de la sesión.

public void removeAttribute(String name): Este método elimina el atributo dado de la sesión.

setMaxInactiveInterval(int interval): Establece el tiempo de inactividad de la sesión en segundos. Este es el tiempo


en segundos que especifica cuánto tiempo permanece activa una sesión desde la última solicitud recibida del cliente.
LECTURA

Ejemplos de Session
TIEMPO ESTIMADO
20 min
TIEMPO ESTIMADO DE LECTURA
10 min

https://drive.google.com/file/d/1TxlviSLC0fiDZ7z52dDE3HJ1KmVMYNQ3/preview
Atributos de petición, sesión y aplicación

Application attributes
El atributo de sesión se utiliza para crear la sesión mediante el contenedor web cuando un
usuario visita la aplicación web.
Por ejemplo:

HttpSession session=request.getSession();
Session.setAttribute(“cars”,CarsObject);
Atributos de petición, sesión y aplicación

Application attributes
in Servlet
Cualquier servlet dentro de la misma aplicación puede
Application
tener acceso a los atributos de contexto.
Context Data Base
LoginServlet Attributes
1
Por ejemplo:

dbUrl
dbUserName
getServletContext().setAttribute(“dbUrl”,”jdbc: dbUserPswd
mysql://localhost:3306/login”);
getServletContext().getAttribute(“dbUrl”); Registration
Servlet1
Atributos de petición, sesión y aplicación

Métodos usados en los Atributos

● public void setAttribute(String name, Object object):


Se utiliza para establecer el objeto dado en el ámbito de la
aplicación.
● public Object getAttribute(String name): Se utiliza para
devolver el atributo del nombre especificado.
● public Enumeration getInitParameterNames(): Se utiliza
para devolver los nombres de los parámetros de
inicialización del contexto como una Enumeración de
objetos String.
● public void removeAttributes(String name): Se utiliza
para eliminar el atributo con el nombre dado del contexto
del servlet.
11.6 Cookies
C O M E N Z A R
Cookies

Una cookie es un objeto de tipo nombre = valor donde se asigna un


valor determinado a una variable del nombre indicado.

El servidor web almacena y recuerda este objeto durante un periodo


de tiempo, de este modo se tiene una lista de cookies que almacena
información relevante para cada usuario.
Cookies

El uso de cookies,
además de otros, es para:

Identificar a un usuario durante una o varias sesiones.

Personalizar un sitio web según las preferencias de cada usuario.


Cookies

Los servlets que se ejecutan en un mismo servidor


comparten las cookies.
Cuando trabajemos con cookies hay que tener en
cuenta que el servidor web no dependa de ellas, ya que
es común que los usuarios las deshabiliten para evitar
problemas de privacidad y seguridad.

¿Cómo trabajaremos con cookies desde servlets?


Cookies

Enviar una cookie

1 Creamos la cookie
Las cookies se manejan con la clase Cookie:
public Cookie (String nombre, String valor)

crea una cookie de nombre nombre, y le da el valor valor.


Cookies

Enviar una cookie

1 Creamos la cookie

2 Establecemos los atributos de la cookie


Podemos establecer los atributos que queramos, con los métodos de
la clase Cookie. Por ejemplo:
Si queremos asignar una cadena descriptiva sobre la cookie:
public void setComment(String comentario)

O si queremos indicar cuántos segundos de vida tiene.


public void setMaxAge(int edad)

Si es un valor negativo, al cerrar el navegador la cookie se borrará. Si el


valor es 0 se borra al momento, y si es positivo tardará los segundos
que se indiquen.
Cookies

Enviar una cookie

1 Creamos la cookie

2 Establecemos los atributos de la cookie

3 Enviar la cookie
Las cookies se añaden a la cabecera de la respuesta, y se envían
así al cliente, mediante el método de HttpServletResponse:
public void addCookie (Cookie cookie)
Cookies

Ejemplo de envío de cookie

public class MiServlet extends HttpServlet


{
public void doGet (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
Cookie miCookie = new Cookie ("nombre", "Pepe");
miCookie.setMaxAge(120);
response.addCookie(miCookie);
PrintWriter out = response.getWriter();
...
}
}
Cookies

Obtener una cookie

1 Obtener todas las cookies

Se obtienen todas las cookies con el método getCookies() de


la clase HttpServletRequest:
public Cookie[] getCookies()

Con esto se tiene un array con todas las cookies actuales


para el usuario.
En el caso de que no haya cookies el método devolverá null.
Cookies

Obtener una cookie

1 Obtener todas las cookies

2 Obtener el valor de una cookie


Para obtener el valor de una cookie se recorre el array de
cookies buscando la que concuerde con el nombre que
queramos. Podemos utilizar estos métodos de Cookie:

• Para obtener el nombre de la cookie.


public String getName()

• Para obtener el valor.


public String getValue()
Cookies

Ejemplo

public void doGet (HttpServletRequest request,


HttpServletResponse response)
throws ServletException, IOException
{
Cookie[] cookies = request.getCookies();
String nombre;
for (int i = 0; i < cookies.length; i++)
if (cookies[i].getName().equals("nombre"))
nombre = cookies[i].getValue();
}
Cookies

Tipos de cookies

SESSION COOKIES

Las cookies de sesión no tienen tiempo


de caducidad. Vive en la memoria del
navegador. Cuando se cierra el
navegador web, esta cookie se
destruye.

PERSISTENT COOKIES

A diferencia de las cookies de sesión,


tienen un tiempo de caducidad, se
almacenan en el disco duro del usuario
y se destruyen en función del tiempo de
caducidad.
Cookies

Cómo enviar cookies al cliente del diálogo HTTP

1 Crear un objeto de cookie


Cookie c = new
Cookie("userName","Chaitanya");

2 Establecer el tiempo máximo


Para esto utilizaremos el método setMaxAge (),
c.setMaxAge(1800);

3 Colocar la cookie en el encabezado de respuesta HTTP


Podemos enviar la cookie al navegador a través del
método response.addCookie().
response.addCookie(c);
LECTURA

Ejemplo de Cookies en servlet java


TIEMPO ESTIMADO
20 min
TIEMPO ESTIMADO DE LECTURA
10 min

https://drive.google.com/file/d/1dCtvdQqEyUWCCc4RKbvRCMnchIrJ4VwT/preview
Cookies

Métodos de la clase cookie


public void setComment(String purpose): Este método se utiliza para
configurar comentarios en la cookie.

public String getComment(): Devuelve el comentario que describe el


propósito de esta cookie, o nulo si la cookie no tiene comentarios.

public void setMaxAge(int expiry): Establece la antigüedad máxima de


la cookie en segundos.

public int getMaxAge(): Obtiene el tiempo máximo en segundos de esta


Cookie. De forma predeterminada, se devuelve -1, lo que indica que la
cookie persistirá hasta que se apague el navegador.

public String getName(): Devuelve el nombre de la cookie. El nombre no


se puede cambiar después de la creación.

public void setValue(String newValue): Asigna un nuevo valor a esta


Cookie.public String getValue(): Obtiene el valor actual de esta Cookie.
11.7 Opciones de
configuración
del archivo
web.xml
C O M E N Z A R
Opciones de configuración del archivo web.xml

Para que un servlet de Java sea accesible desde un


navegador, debe decirle al contenedor de servlets qué
servlets implementar y qué URL asignar a los servlets.

Esto se hace en el archivo web.xml de la aplicación


web Java. Ya hemos visto anteriormente diferentes
ejemplos de configuración del web.xml, en este
epígrafe resaltaremos algunos para reforzarlos.
Opciones de configuración del archivo web.xml

Configuración y mapeo de un servlet


La manera de configurar un servlet en el archivo web.xml sería:
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<servlet>
<servlet-name>controlServlet</servlet-name>
<servlet-class>com.jenkov.butterfly.ControlServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>controlServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
Opciones de configuración del archivo web.xml

Primero configuramos el servlet usando el elemento <servlet>

A continuación asignaremos el servlet a una URL o patrón de URL. Esto se


hace en el elemento <servlet-mapping>. En el ejemplo anterior, todas las
URL que terminan en .html se envían al servlet.

Otras posibles asignaciones de URL de servlet son:


/myServlet
/myServlet.do
/myServlet*

Podemos asignar un servlet a una única URL específica o a un patrón


de URL utilizando un comodín (*).
Opciones de configuración del archivo web.xml

Parámetros de inicio de servlet


Podemos pasar parámetros a un servlet desde el archivo web.xml. Solo ese servlet
puede acceder a los parámetros de inicio de un servlet.
Ejemplo:

<servlet>
<servlet-name>controlServlet</servlet-name>
<servlet-
class>com.jenkov.butterfly.ControlServlet</servlet-
class>

<init-param>
<param-name>myParam</param-name>
<param-value>paramValue</param-value>
</init-param>
</servlet>
Opciones de configuración del archivo web.xml

Así es como lee los parámetros de inicio desde el interior de su servlet,


en el método init() de servlets:

public class SimpleServlet extends GenericServlet {

protected String myParam = null;

public void init(ServletConfig servletConfig) throws


ServletException{
this.myParam = servletConfig.getInitParameter("myParam");
}

public void service(ServletRequest request, ServletResponse


response)
throws ServletException, IOException {

response.getWriter().write("<html><body>myParam = " +
this.myParam + "</body></html>");
}
}
Opciones de configuración del archivo web.xml

Se llama a un método init() de


servlets cuando el contenedor de
servlet carga el servlet por primera
vez. Nadie puede acceder al servlet
hasta que el servlet se haya cargado
y el método init() se haya llamado
correctamente.
Opciones de configuración del archivo web.xml

Carga de servlet en el inicio

El elemento <servlet> tiene un subelemento llamado <load-on-startup>


que se usa usar para controlar cuándo debe cargar el servlet el
contenedor. Si no especifica un elemento <load-on-startup>, el
contenedor de servlet normalmente cargará su servlet cuando llegue la
primera solicitud.

Al configurar un elemento <load-on-startup>, podemos decirle al


contenedor de servlet que cargue el servlet tan pronto como se
inicie el contenedor de servlet.
Opciones de configuración del archivo web.xml

Ejemplo de configuración de <load-on-startup>:

<servlet>
<servlet-name>controlServlet</servlet-name>
<servlet-
class>com.jenkov.webui.ControlServlet</servlet-class>
<init-param><param-
name>container.script.static</param-name>
<param-value>/WEB-
INF/container.script</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
El número dentro del elemento <load-on-
</servlet> startup>1</load-on-startup> le dice al contenedor de
servlets en qué secuencia se deben cargar los
servlets. Los números más bajos se cargan primero.
Si el valor es negativo o no se especifica, el
contenedor de servlet puede cargar el servlet en
cualquier momento.
Opciones de configuración del archivo web.xml

Parámetros de contexto
También podemos establecer algunos parámetros de contexto que se
pueden leer desde todos los servlets de la aplicación.

Ejemplo

<context-param>
<param-name>myParam</param-name>
<param-value>the value</param-value>
</context-param>
Así es como accede al parámetro desde dentro de una
subclase HttpServlet:

String myContextParam =
request.getSession()
.getServletContext()
.getInitParameter("myParam");
11.8 Acceso a datos
desde un servlet
C O M E N Z A R
Acceso a datos desde un servlet

Una de las tareas más importantes y más


frecuentemente realizadas por los servlets es la
conexión a bases de datos mediante JDBC.

Partiendo de una base de datos vamos a ver con un


ejemplo del acceso a datos desde un servlet.

Recurso
LECTURA

Ejemplo de acceso a datos

TIEMPO ESTIMADO
10 min
TIEMPO ESTIMADO DE LECTURA
10 min

https://drive.google.com/file/d/12MErOxqv57Oj-3v25vFp9TfX-WDsT-IW/preview
hemos
terminado
¡EXCELENTE TRABAJO!

También podría gustarte