lunes, 27 de septiembre de 2010

Componentes WEB IMPORTANTE!

Seguimos con el desarrollo de componentes web

Clases y objetos necesarios


Podemos crear un Servlet haciendo uso del paquete javax.servlet.
Interface HttpServletRequest

Follow link for its detailed definition http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServletRequest.html
Interface HttpServletResponse

Follow link for its detailed specification http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServletResponse.html

Ejemplo:


import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

PrintWriter out = response.getWriter();

out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
"Transitional//EN\">\n" +
"<html>\n" +
"<head><title>Hello WWW</title></head>\n" +
"<body>\n" +
"<h1>Hello WWW</h1>\n" +
"</body></html>");
}
}


Compartir Informacion en Sevlets

Los componentes web de una aplicación (en este caso j2ee), como la mayoría de los objetos, trabajan o utilizan otros objetos para completar sus tareas

En el caso de una aplicación web los ámbitos, scopes o ciclos de vida representan el estado actual de:
  1. la aplicación (y/o el conjunto de los usuarios)
  2. el usuario
  3. la petición del usuario
  4. la página actual

Estos scopes se "objetualizan" en 4 objetos que se utilizan como contenedores de datos o atributos, los cuales están disponibles y "accesibles" para el resto de componentes de la aplicación web.

Scope Object Classaccesible desde...

Web context
javax.servlet.ServletContextComponentes web dentro de un contexto/aplicación
sessionjavax.servlet.http.HttpSessionComponentes web que manejan la petición y que pertenecen a la sesión del usuario)
requestSubtype of javax.servlet.ServletRequestComponentes web que manejan la petición
pagejavax.servlet.jsp.PageContextLa página JSP que crea el objeto


Los atributos de estos contenedores con scope, se acceden via metodos del tipo [get/set]Atributo del objeto correspondiente.
En el uso los utilizamos de la misma manera que una colección de tipo Map en la cual sus elementos están identificados por una clave

Como se ha mencionado anteriormente:
  • utilizamos el objeto servletContext como contenedor de datos/atributos que nos interesa que estén vivos y/o disponibles durante toda la aplicación, y por lo tanto podrán accederse desde todas las invocaciones/peticiones de todos los usuarios
  • utilizamos el objeto session como contenedor de datos/atributos que nos interesa que estén vivos y/o disponibles durante toda la sesión del usuario, y por lo tanto podrán accederse desde todas las peticiones del mismo usuario
  • utilizamos el objeto request como contenedor de datos/atributos que nos interesa que estén vivos y/o disponibles durante la petición del usuario, y por lo tanto podrán accederse desde todas las partes del código de la misma petición del mismo usuario

Ejemplos de uso de los objetos con scope como contenedor de atributos o datos:

Ejemplo con request repo


package es.cea.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class EjemploScopeRequest extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//aqui utilizamos el request para almacenar 2 atributos

request.setAttribute("nombre", "Juan Antonio Ruz");

request.setAttribute("mail", "juanantonioruz@gmail.com");

Object attribute = request.getAttribute("nombre");

String nombreAlmacenado=(String) attribute;

Object attribute2 = request.getAttribute("mail");

String mailAlmacenado=(String) attribute2;

PrintWriter writer = response.getWriter();

writer.print("<html><body>"+nombreAlmacenado+" <br>"+mailAlmacenado+"</body></html>");

writer.close();
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}
}

Ejemplo con session repo


package es.cea.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


public class EjemploScopeSession extends HttpServlet {

private static final long serialVersionUID = 1L;


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

HttpSession session = request.getSession();

session.setAttribute("nombre", "Juan Antonio Ruz");

session.setAttribute("mail", "juanantonioruz@gmail.com");

Object attribute = session.getAttribute("nombre");

String nombreAlmacenado=(String) attribute;

Object attribute2 = session.getAttribute("mail");

String mailAlmacenado=(String) attribute2;

PrintWriter writer = response.getWriter();

writer.print("<html><body>"+nombreAlmacenado+" <br>"+mailAlmacenado+"</body></html>");

writer.close();
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}
}

Ejemplo con servletContext o aplicacion repo


package es.cea.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class EjemploScopeServletContext extends HttpServlet {

private static final long serialVersionUID = 1L;


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

ServletContext servletContext = request.getSession().getServletContext();

servletContext.setAttribute("nombre", "Juan Antonio Ruz");

servletContext.setAttribute("mail", "juanantonioruz@gmail.com");

Object attribute = servletContext.getAttribute("nombre");

String nombreAlmacenado=(String) attribute;

Object attribute2 = servletContext.getAttribute("mail");

String mailAlmacenado=(String) attribute2;

PrintWriter writer = response.getWriter();

writer.print("<html><body>"+nombreAlmacenado+" <br>"+mailAlmacenado+"</body></html>");

writer.close();
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}
}

ESTOS EJEMPLOS ESTAN EN "holaMundoServlet.es.cea.ejemploScope"



Ejercicio de contador de visitas utilizando el servletContext para compartir información entre usuarios


...URL-->/home (Numero de visitas hasta el momento X)
...URL-->/noticias (X++; Noticias de ultima hora)
Todos los usuarios que accedan a ./home veran el numero de visitas

En "holaMundoServlet.es.cea.servlets.HomeServlet"
"holaMundoServlet.es.cea.servlets.NoticiasServlet"

Ejercicio de contador de peticiones utilizando el session para compartir información entre peticiones del mismo usuario

No hay comentarios:

Publicar un comentario