Comment utiliser HTTPSession pour implémenter des enregistrements d'accès QQ dans Java, cet article révèle les réponses à vous. Le contenu spécifique est le suivant
1. Écrivez la classe de données de l'espace QQ (qqs.java)
classe publique qqs {private static LinkedHashMap <Integer, string> qqs = new LinkedHashMap <Integer, String> (); statique {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 LinkedHashMap <Integer, String> getQQs () {return qqs; }}2. Écrivez une page de données de données et de navigation réelles (ListServlet.java)
public void doGet (demande httpservletRequest, réponse httpservletResponse) lève Servlexception, ioException {// get session objet httpSession session = request.getSession (); // Définir la réponse des données chinoises.SetcharAtterencoding ("UTF-8"); Response.SetContentType ("Text / HTML; charSet = UTF-8"); // Obtenir un flux de sortie printwriter out = réponse.getWriter (); // Obtenez des données QQS LinkedHashMap <Integer, String> qqs = qqs.getqqs (); Set <map.entry <integer, string >> set = qqs.entryset (); Iterator <map.entry <integer, string >> it = set.iterator (); // Structure de la page de sortie out.println ("<html> <éadfy> <itle> QQ Liste </title> <style> a {margin-droite: 20px;} </ style> </ 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/>"); // Loulez l'hyperlien de l'espace qq while (it.hasnext ()) {map.entry <Integer, string> entry = it.next (); Entier num = entry.getKey (); String name = entry.getValue (); out.println ("<a href = /" / day08 / store? num = "+ num +" / ">" + name + "</a>"); } // Les informations d'enregistrement de la sortie de sortie Out.println ("<hr /> <br/>"); out.println ("<h3> qq de navigation historique </h3>"); out.println ("<hr /> <br/>"); // Obtenir l'accès à l'enregistrement des données Historique de la chaîne = (string) session.getAttribute ("History"); if (history == null) {out.println ("<font color = /" red / "> désolé, il n'y a pas d'enregistrement d'accès actuellement ... </font>"); } else {// Loop via les données d'enregistrement accessibles par la chaîne utilisateur [] nums = history.split (","); for (String num: nums) {String name = qqs.getqqs (). get (Integer.ParseInt (num)); out.println (nom + ","); }} // Fermez la structure de la page Out.println ("</docy> </html>"); }3. Écrivez une page qui stocke la navigation sur l'espace QQ (StoreqqServlet.java)
public void doGet (demande httpservletRequest, réponse httpservletResponse) lève ServletException, ioException {// obtenir l'objet de session httpSession session = request.getSession (false); // Obtenez le paramètre de demande String num = request.getParameter ("num"); // obtient les données dans la session String History = (String) session.getAttribute ("History"); // Déterminez les données if (History == null) {// première visite Session.SetAttribute ("History", Num); // History = 10001} else {// Visitez plusieurs session.SetAttribute ("History", History + "," + Num); // Définit le nombre de nums et l'ordre de chaîne d'affichage [] qqs = history.split (","); // Convertir un tableau en une collection qui convient à l'opération List <string> list = arrays.aslist (qqs); // convertit la liste en liendlist pour faciliter le fonctionnement des données LinkedList <string> linked_list = new LinkedList <string> (); liked_list.addall (liste); // Déterminez le nombre de qqs qui apparaissent if (qqs.length <3) {if (linked_list.contains (num)) {// history = 10002,1003 // if linked_list.remove (num); Linked_list.addFirst (num); } else {// History = 1004,10002,1003 // if liked_list.addfirst (num); }} else {//> = 3 if (linked_list.contains (num)) {// history = 10002,10003,10004 10004 // if linked_list.remove (num); Linked_list.addFirst (num); } else {// History = 10005, 10002,10003 // n'inclut pas Linked_list.Removelast (); Linked_list.addFirst (num); }} // Les enregistrements d'accès avec les bons moments et l'ordre sont liés_list stringBuffer sb = new StringBuffer (); for (String new_num: linked_list) {sb.append (new_num + ","); } String new_history = sb.toString (); session.setAttribute ("History", new_history); } // rediriger vers la page de la liste QQ Response.SenDredirect ("/ day08 / list"); }Le code ci-dessus stocke l'historique de navigation de l'utilisateur dans l'objet de session, mais l'objet est dans la mémoire du serveur et a une limite de temps valide. Si le moment vient, la session sera détruite.
Le temps par défaut est une demi-heure (30 minutes).
4. Configurer l'heure valide de la session
Dans le web.xml de chaque site Web, vous pouvez configurer l'heure valide de l'objet de session créé par le site Web. Notez que l'unité est quelques minutes lors de la configuration.
Thread.slesp (unités millisecondes), cookie.setmaxage (deuxième unités), session (unités minimes)
<Session-Config> <Session-Timeout> 2 </ Session-Timeout> L'unité est des minutes </ session-Config>
5 Désactiver les cookies
Les cookies peuvent utiliser le client pour stocker les données de session.
HTTPSESSIE peut utiliser des cookies pour stocker des informations sur session.
En fait, dans les paramètres du navigateur, vous pouvez rejeter les informations sur les cookies renvoyées par le site Web.
À l'heure actuelle, l'accès aux cas ci-dessus entraînera une exception de pointeur nul. Si vous devez corriger le site Web, vous devez utiliser la technologie Urlrawriting.
Urbriteur
Analyser les causes des problèmes ci-dessus:
Le serveur a créé un objet de session, mais comme le navigateur interdit la réception des cookies, le serveur ne peut pas envoyer la valeur ID de la session créée au navigateur sous la forme de l'en-tête de réponse Set-Cookie pour le stockage, de sorte que l'ID de session ne sera pas relâché pendant la deuxième visite, donc la session ne peut être trouvée.
Méthodes courantes
String EncodereDirectUrl (URL de chaîne) Ajouter des informations sessionID au chemin de redirection spécifié Encodeurl (URL de chaîne) Ajouter des informations SessionId à l'adresse URL normale
Principes de mise en œuvre:
"Recode toutes les adresses URL de la page en utilisant la méthode ci-dessus"
1 Modifiez le programme ci-dessus
1 listservlet.java
String path = "/ day08 / store? Num =" + num; path = réponse.encodeurl (path); out.println ("<a href = '" + path + "'>" + name + "</a>");2. StoreqqServlet.java
String path = "/ day08 / list"; path = réponse.EncodereDirectUrl (path); réponse.SendRedirect (path);
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.