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