So verwenden Sie HTTPSession, um QQ -Zugriffsunterlagen in Java zu implementieren. Dieser Artikel enthält die Antworten an Sie. Der spezifische Inhalt ist wie folgt
1. Schreiben Sie QQ Space Data Class (QQs.java)
public class qqs {private static linkedHashMap <Integer, String> qqs = new LinkedHashMap <Integer, String> (); static {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. Schreiben Sie eine Seite mit realen QQ -Daten und Browserverlauf (Listservlet.java)
public void dodget (httpServletRequest request, httpServletResponse -Antwort) löst ServletException aus, ioException {// Session -Objekt httpSession Session = Request.GetSession (); // chinesische Datenreaktion festlegen. Antwort.SetContentType ("text/html; charSet = utf-8"); // Ausgabestream PressWriter Out = Antwort.getWriter (); // QQS -Daten linkedHashMap <Integer, String> qqs = qqs.getQqs () erhalten; Set <map.Entry <Integer, String >> set = qqs.EntrySet (); Iterator <map.Entry <Integer, String >> it = set.Iderator (); // Ausgabeseitenstruktur out.println ("<html> <kopf> <titels> qq list </title> <style> a {margin-right: 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/>"); // den Hyperlink des QQ -Raums ausschalten (it.hasNext ()) {map.entry <Integer, String> Eintrag = it.Next (); Integer num = Eintrag.getKey (); String name = Eintrag.getValue (); out.println ("<a href =/"/day08/store? num = "+num+"/">"+name+"</a>"); } // Ausgabe stögerten Datensatzinformationen out.println ("<hr/> <br/>"); out.println ("<h3> qq Browsing History </h3>"); out.println ("<hr/> <br/>"); // Zugriffsdatenstring -String -Historie = (String) session.getAttribute ("History"); if (history == null) {out.println ("<font color =/" rot/"> sorry, derzeit gibt es keinen Zugriffsdatensatz ... </font>"); } else {// Schleifen Sie die Datensatzdaten durch, auf die der Benutzer string [] nums = history.split (",") zugegriffen wird; für (String num: nums) {String name = qqs.getQqs (). get (Integer.ParseInt (num)); out.println (name+","); }} // Schließen Sie die Seitenstruktur out.println ("</body> </html>"); }3. Schreiben Sie eine Seite, auf der ein Surfen in QQ Space (storeqqqservlet.java) gespeichert ist.
public void dodget (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {// das Sitzungsobjekt httpSession Session = Request.getSession (false); // Die Anforderungsparameter string num = request.getParameter ("num") abrufen; // Die Daten in der Sitzung String History = (String) Session.getAttribute ("History") erhalten; // die Daten bestimmen if (history == null) {// Erste Besuch von Sitzung.SetAttribute ("History", num); // history = 10001} else {// besuchen Sie mehrere Sitzungen. // Setzen Sie die Anzahl der NUMs und die Reihenfolge der Anzeige string [] qqs = history.Split (","); // Ein Array in eine Sammlung umwandeln, die für die Betriebsliste <string> list = arrays.aslist (qqs) bequem ist; // Liste in LinkedList konvertieren, um den Betrieb von Daten LinkedList <string> linked_list = new LinkedList <string> () zu erleichtern; linked_list.addall (Liste); // Bestimmen Sie die Anzahl der QQs, die in (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 linked_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 // enthält nicht linked_list.removelast (); linked_list.addfirst (num); }} // Zugriff auf Datensätze mit guten Zeiten und Reihenfolge sind verknüpft_list StringBuffer sb = new StringBuffer (); für (string new_num: linked_list) {sb.append (new_num+","); } String new_history = sb.toString (); Session.SetAttribute ("Geschichte", new_history); } // Umleiten von QQ List Page Antwort.Sendredirect ("/day08/list"); }Der obige Code speichert den Browserverlauf des Benutzers im Sitzungsobjekt, das Objekt befindet sich jedoch im Serverspeicher und verfügt über eine gültige Zeitlimit. Wenn die Zeit kommt, wird die Sitzung zerstört.
Die Standardzeit beträgt eine halbe Stunde (30 Minuten).
4. Konfigurieren Sie die gültige Zeit der Sitzung
Im web.xml jeder Website können Sie die gültige Zeit des von der Website erstellten Sitzungsobjekts konfigurieren. Beachten Sie, dass das Gerät bei der Konfiguration Minuten dauert.
Thread.slessP (Millisekundeneinheiten), Cookie.setMaxage (zweite Einheiten), Sitzung (Minute -Einheiten)
<Sesion-Config> <Session-Timeout> 2 </Session-Timeout> Einheit ist Minuten </Session-Config>
5 Kekse deaktivieren
Cookies können den Client verwenden, um Sitzungsdaten zu speichern.
HTTPSession kann Cookies verwenden, um SessionID -Informationen zu speichern.
In den Browsereinstellungen können Sie Cookie -Informationen, die von der Website zurückgesendet wurden, ablehnen.
Zu diesem Zeitpunkt wird der Zugriff auf die oben genannten Fälle zu einer Ausnahme von Nullzeiger führen. Wenn Sie die Website reparieren müssen, müssen Sie Urlrewriting -Technologie verwenden.
Urlrewriteting
Analysieren Sie die Ursachen der oben genannten Probleme:
Der Server hat ein Sitzungsobjekt erstellt, aber da der Browser die Rezeption von Cookies verbietet, kann der Server den ID-Wert der erstellten Sitzung in Form des Set-Cookie-Antwort-Headers für die Speicherung nicht an den Browser senden, sodass die Sitzungs-ID während des zweiten Besuchs nicht nachgelassen wird, sodass die Sitzung nicht gefunden werden kann.
Gemeinsame Methoden
String coderedirectUrl (String -URL) SessionID -Informationen zum angegebenen Umleitungspfad -String -Encodeurl (String -URL) SessionID -Informationen zur normalen URL -Adresse hinzufügen
Umsetzungsprinzipien:
"Alle URL -Adressen in der Seite mit der obigen Methode neu erholen"
1 Ändern Sie das obige Programm
1 listServlet.java
String path = "/day08/store? Num ="+num; path = response.encodeurl (Pfad); out.println ("<a href = '"+path+"'>"+name+"</a>");2. Storeqqqservlet.java
String path = "/day08/list"; path = response.coderedirecturl (Pfad); Antwort.Sendredirect (Pfad);
Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.