Cómo usar httpsession para implementar registros de acceso QQ en Java, este artículo le revela las respuestas. El contenido específico es el siguiente
1. Escriba la clase de datos espaciales QQ (QQS.Java)
public class Qqs {private static linkedhashmap <integer, string> qqs = new LinkedHashMap <Integer, String> (); estática {qqs.put (10001, "Zhang San"); qqs.put (10002, "li si"); qqs.put (10003, "Wang Wu"); qqs.put (10004, "zhao liu"); qqs.put (10005, "Tian Qi"); qqs.put (10006, "Jiao Ba"); qqs.put (10007, "hou jiu"); qqs.put (10008, "liu shi"); qqs.put (10009, "xiao er"); } public static static linkedhashmap <integer, string> getqqs () {return qqs; }}2. Escribe una página de datos de datos y historial de navegación reales (ListServlet.java)
public void doget (HTTPServletRequest Solicitud, respuesta httpservletResponse) lanza ServLetException, ioException {// Get Session Object httpsession session = request.getSession (); // establecer la respuesta de datos chino. SetcharacterEncoding ("UTF-8"); respuesta.setContentType ("text/html; charset = utf-8"); // Obtener la transmisión de salida PrintWriter out = Response.getWriter (); // Obtener datos QQS LinkedHashmap <Integer, String> Qqs = Qqs.getqqs (); Set <map.entry <integer, string >> set = qqs.entryset (); Iterator <map.entry <integer, string >> it = set.iterator (); // Estructura de la página de salida out.println ("<html> <adeble> <title> QQ List </title> <style> a {margin-right: 20px;} </syle> </head> <body>"); out.println ("<hr/> <br/>"); out.println ("<h3> QQ List </h3>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); // bucle el hipervínculo del espacio qq while (it.hasnext ()) {map.entry <integer, string> entry = it.next (); Entero num = entry.getKey (); Name de cadena = entry.getValue (); out.println ("<a href =/"/day08/store? num = "+num+"/">"+nombre+"</a>"); } // Salida de información registrada de registro out.println ("<hr/> <br/>"); out.println ("<H3> QQ Historia de navegación </h3>"); out.println ("<hr/> <br/>"); // Get Access Record Data String History = (String) Session.getAttribute ("Historial"); if (History == null) {out.println ("<font color =/" rojo/"> Lo siento, no hay un registro de acceso en la actualidad ... </font>"); } else {// bucle a través de los datos de registro accedidos por la cadena del usuario [] nums = History.split (","); for (string num: nums) {String name = qqs.getqqs (). get (integer.parseInt (num)); out.println (nombre+","); }} // Cierre la estructura de la página. }3. Escriba una página que almacene navegar el espacio QQ (storeqqservlet.java)
public void doget (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {// Obtener el objeto de sesión httpsession session = request.getSession (falso); // Obtenga la cadena de parámetro de solicitud num = request.getParameter ("num"); // Obtener los datos en la sesion String History = (String) Session.getAttribute ("Historial"); // Determinar los datos if (History == NULL) {// Primera visita Session.SetAttribute ("Historial", num); // History = 10001} else {// Visite múltiples session.setAttribute ("History", History+","+num); // Establecer el número de NUMS y el orden de la cadena de visualización [] qqs = History.split (","); // convertir una matriz en una colección que sea conveniente para la lista de operaciones <String> list = arrays.aslist (QQS); // Convertir la lista en LinkedList para facilitar la operación de datos LinkedList <String> Linked_List = new LinkedList <String> (); linked_list.addall (lista); // Determine el número de qqs que aparecen si (qqs.length <3) {if (linked_list.contains (num)) {// historial = 10002,1003 // if linked_list.remove (num); linked_list.addfirst (num); } else {// History = 1004,10002,1003 // Si Linked_List.addfirst (num); }} else {//> = 3 if (linked_list.contains (num)) {// historial = 10002,10003,10004 10004 // if linked_list.remove (num); linked_list.addfirst (num); } else {// History = 10005, 10002,10003 // no incluye linked_list.removelast (); linked_list.addfirst (num); }} // Los registros de acceso con buenos tiempos y el orden son Linked_List StringBuffer sb = new StringBuffer (); for (string new_num: linked_list) {sb.append (new_num+","); } String new_history = sb.ToString (); session.SetAttribute ("Historia", new_history); } // redirigir a la página de la página QQ. }El código anterior almacena el historial de navegación del usuario en el objeto de sesión, pero el objeto está en la memoria del servidor y tiene un límite de tiempo válido. Si llega el momento, la sesión será destruida.
El tiempo predeterminado es media hora (30 minutos).
4. Configure el tiempo válido de la sesión
En la web.xml de cada sitio web, puede configurar el tiempo válido del objeto de sesión creado por el sitio web. Tenga en cuenta que la unidad es de minutos al configurar.
Thread.slessp (unidades de milisegundos), cookie.setmaxage (segunda unidades), sesión (unidades de minuto)
<Session-Config> <SecioOut> 2 </Session TimeOut> Unidad es minutos </session-Config>
5 Desactivar cookies
Las cookies pueden usar el cliente para almacenar datos de sesión.
La httpsession puede usar cookies para almacenar información de SessionID.
De hecho, en la configuración del navegador, puede rechazar la información de las cookies enviada por el sitio web.
En este momento, acceder a los casos anteriores provocará que ocurra una excepción de puntero nulo. Si necesita arreglar el sitio web, debe usar la tecnología de escritura de urlre.
Urlrewriting
Analizar las causas de los problemas anteriores:
El servidor ha creado un objeto de sesión, pero dado que el navegador prohíbe la recepción de cookies, el servidor no puede enviar el valor de identificación de la sesión creada al navegador en forma del encabezado de respuesta de cocción establecida para el almacenamiento, por lo que la ID de sesión no se aflojará durante la segunda visita, por lo que no se puede encontrar la sesión.
Métodos comunes
String coderDirectURL (URL de cadena) Agregar información de SessionID a la ruta de redirección especificada String CodeRURL (URL de cadena) Agregar información de SessionID a la dirección de URL normal
Principios de implementación:
"Recode todas las direcciones de URL en la página utilizando el método anterior"
1 Modificar el programa anterior
1 listservlet.java
String ruta = "/day08/store? Num ="+num; ruta = respuesta.EncodeUrl (ruta); out.println ("<a href = '"+ruta+"'>"+nombre+"</a>");2. Storeqqservlet.java
String ruta = "/día08/list"; ruta = respuesta.encoderedirecturl (ruta); respuesta.sendedirect (ruta);
Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.