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 tareasEn el caso de una aplicación web los ámbitos, scopes o ciclos de vida representan el estado actual de:
- la aplicación (y/o el conjunto de los usuarios)
- el usuario
- la petición del usuario
- 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 | Class | accesible desde... |
Web context | javax.servlet.ServletContext | Componentes web dentro de un contexto/aplicación |
session | javax.servlet.http.HttpSession | Componentes web que manejan la petición y que pertenecen a la sesión del usuario) |
request | Subtype of javax.servlet.ServletRequest | Componentes web que manejan la petición |
page | javax.servlet.jsp.PageContext | La 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