Download Session Tracking Persistencia de la Información
Document related concepts
no text concepts found
Transcript
Session Tracking 1 Persistencia de la Información Persistencia de la Información Típicamente hay 2 tipos de información que requieren ser almacenados en las aplicaciones web: Información sobre la sesión: Una sesión empieza cuando el usuario se conecta ó se identifica y continúa hasta que se desconecta o completa la transacción. I f Información sobre el usuario: ió b l i La información sobre el usuario necesita en general ser mantenida durante más tiempo que la información de una sesión. Esta información se debe almacenar en el ser idor mediante archi os ó información se debe almacenar en el servidor mediante archivos ó en una bases de datos. 2 Session Tracking HTTP es stateless: Cuando transmite una petición de página no tiene memoria de las peticiones anteriores provenientes del mismo cliente. las peticiones anteriores provenientes del mismo cliente. Session Tracking: Session Tracking: Dado que HTTP no aporta ayuda con respecto a la información de sesion. El servlet debe mantener esta información en cada una de las sesiones que mantenga con diferentes clientes. 3 El API “Session El API Session Tracking Tracking” El API de session tracking está implementado mediante cookies javax.servlet.http.HttpSession La información permanece almacenada en el servidor peticiones ((requests). q ) Se p pone automáticamente a entre p la disposición de la aplicación que está priocesando la petición. 4 Creación, escritura, lectura Creación, escritura, lectura Creación de una de una sesión: HttpSession session = request.getSession(); Regresa la sesión asociada con la petición actual. Si no existe la sesión ó se crea en este momento. Almacenamiento: session.setAttribute(name, value); Lectura de Información: Object obj = getAttribute(name); 5 Otros métodos de la Interfaz HttpSession removeAttribute getAttributeNames getId isNew getCreationTime C i Ti getLastAccessedTime getMaxInactiveInterval setMaxInactiveInterval invalidate 6 Ejemplo Acumulando una lista de datos l d l d d Tomado de: http://courses.coreservlets.com 7 Ejemplo Tomado de: http://courses.coreservlets.com 8 Ejemplo package sessionTracking; import java.io.*; import javax.servlet.*; import p jjavax.servlet.http.*; p ; import java.util.*; /** Servlet that displays a list of items being ordered. * A * Accumulates them in an ArrayList l t th i A Li t and counts d t * repeated items. */ @SuppressWarnings("unchecked") Tomado de: http://courses.coreservlets.com 9 Ejemplo public class ShowItems extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); System.out.println("Session lifetime="+session.getMaxInactiveInterval()+"seconds"); ArrayList<SimpleItem> previousItems = ArrayList<SimpleItem> previousItems (ArrayList<SimpleItem>)session.getAttribute("previousItems"); if (previousItems == null) { previousItems = new ArrayList<SimpleItem>(); = new ArrayList<SimpleItem>(); session.setAttribute("previousItems", previousItems); } Tomado de: http://courses.coreservlets.com 10 Ejemplo String itemName = request.getParameter("newItem"); if ((itemName != null) && (!itemName.trim().equals(""))) { SimpleItem item = findItem(itemName, previousItems); if (item !!= null) { null) { item.incrementItemCount(); } else { item = new SimpleItem(itemName); = new SimpleItem(itemName); previousItems.add(item); } } Tomado de: http://courses.coreservlets.com 11 Ejemplo response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Items Purchased"; String docType = "<!DOCTYPE HTML PUBLIC \"‐//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n"; out.println(docType +"<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1>" + title \ \ \ + "</H1>"); / if (previousItems.size() == 0) { out.println("<I>No items</I>"); } else { out.println("<UL>"); for(SimpleItem item: previousItems) { out.println(" <LI>" + item); l (" " ) } out.println("</UL>"); } out.println("</BODY></HTML>"); Tomado de: http://courses.coreservlets.com 12 } Ejemplo private SimpleItem findItem(String itemName, itemName ArrayList<SimpleItem> previousItems) { for(SimpleItem item: previousItems) { if (item.getItemName().equals(itemName)) { return(item); } } return(null); } } Tomado de: http://courses.coreservlets.com 13 Ejemplo package sessionTracking; import java.io.*; /** Class to represent the name and count of an item being purchased. */ public class SimpleItem implements Serializable { private String itemName; private int itemCount; public SimpleItem(String itemName) { this itemName = itemName; this.itemName itemName; itemCount = 1; } public bli String S i getItemName() { I () { return(itemName); } Tomado de: http://courses.coreservlets.com 14 Ejemplo public int getItemCount() { return(itemCount); } public void incrementItemCount() { incrementItemCount() { itemCount = itemCount + 1; } /** The toString method is called when you simply print an Object. */ public String toString() { return(itemName + + " ((" + itemCount + itemCount + + ")"); ) ); } } Tomado de: http://courses.coreservlets.com 15