Heim >Java >javaLernprogramm >Beschreiben Sie kurz die Sitzungsnutzung und detaillierte Aufzeichnungen in Java
Der folgende Editor bietet Ihnen eine kurze Diskussion der Sitzungsnutzung und detaillierte Aufzeichnungen in SpringMVC. Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Herausgeber und werfen wir einen Blick darauf.
Vorwort
Ich bin neu bei SpringMVC und muss mich damit anmelden zu dem System, das ich für die Firma erstellt habe.
Ich habe viele Informationen im Internet gefunden und grob zwei Möglichkeiten zum Speichern von Sitzungen erwähnt:
1. HttpSession, die bei JavaWeb üblich ist Projekte
2. SpringMVC-spezifische @SessionAttributes
Ich persönlich lege mehr Wert auf die Verwendung von @SessionAttributes. Schließlich verwende ich jetzt SpringMVC. Aber als ich die Artikel im Internet las, erklärten sie im Grunde nur die grundlegende Verwendung und es gab im Grunde keine detaillierten Verwendungen und Details. Ich dachte, das sei nicht genug, also habe ich selbst einige Tests durchgeführt, dann den Code kompiliert und einen erstellt Demo. Nehmen Sie es auf und teilen Sie es. Wenn Sie Mängel haben, können Sie diese gerne besprechen.
Okay, genug des Unsinns, jetzt beginnt die eigentliche Show!
Schlussfolgerung
Nun, um einigen Kunden, die den Code nicht gerne lesen, die Mühe zu ersparen, die Schlussfolgerung zu lesen, habe ich Ich werde hier zunächst meine Schlussfolgerungen zusammenfassen. Lassen Sie uns zunächst die Schlussfolgerungen nach dem Test auflisten.
1. Sie können Daten automatisch über die einzigartige ModelMap und das Modell von SpringMVC im Controller speichern, oder Sie können Sitzungsdaten über herkömmliche HttpSession und andere Parameter speichern
2. Die Annotation @SessionAttributes muss zum Speichern von Sitzungsdaten verwendet werden. Diese Annotation verfügt über zwei Parameterdeklarationsmethoden (Wert und Typ), und die Annotationsdeklaration muss in die Klasse geschrieben werden, nicht in die Methode
3. Die gespeicherten Sitzungsdaten müssen der Parameterliste in der Annotation @SessionAttributes entsprechen.
4 Löschen Sie die in der Sitzung gespeicherten Parameter. Beachten Sie, dass alle Daten gelöscht werden und die durch angegebenen Sitzungsdaten nicht einzeln gelöscht werden können. Gleichzeitig folgen die wirksamen Berechtigungen beim Löschen den oben genannten Regeln 2 und 3 (diese Regel kann verwendet werden, um den Effekt des Löschens bestimmter Sitzungsdaten künstlich zu erzielen)
5 Daten in der Sitzung über ModelMap usw. Es gibt auch die oben genannten Parameterberechtigungsbeschränkungen
6. Wenn Sie ModelMap oder Model zum Speichern von Sitzungsdaten verwenden, muss ModelMap als Methode übergeben werden Parameter, und der neu definierte in der Methode ist ungültig. Gleichzeitig funktioniert die ModelMap, solange sie als Parameter übergeben wird, auch dann, wenn sie von anderen Methoden aufgerufen wird
7. Bei Verwendung der @ResponseBody-Annotation (normalerweise Bei Verwendung mit Ajax kann die Sitzung nicht gespeichert werden. Daten
8. Die @SessionAttributes-Annotation kann 2 Parameterlisten mit Wert und Typ verwenden
9. Die herkömmliche Methode zur Verwendung von HttpSession weist nicht die oben genannten Anmerkungen und Berechtigungen sowie andere Einschränkungen auf. Es gibt unten einen einfachen Test, aber keine detaillierte Erklärung
Es gibt einige allgemeine Kenntnisse Punkte unten
10. Der Betrieb von Sitzungsdaten kann kategorieübergreifend sein und hat nichts mit dem Paket oder URL-Pfad zu tun
11. Wenn mit demselben Sitzungswert gearbeitet wird, überschreibt der nachfolgende Wert den vorherigen Wert
Testcode und einfache Anweisungen
Entwicklungstools: Spring Tool Suite . Spring hat ein IDE-Entwicklungstool basierend aufEclipse speziell für SpringMVC entwickelt. Es fühlt sich gut an, nachdem ich es kürzlich verwendet habe.
Machen wir zunächst einen Screenshot der Projektstruktur
<!-- 使用@ResponseBody注解所需的2个包 --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency>Das Folgende ist der Haupttestcode
package test.dmh.session; import java.util.Enumeration; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.bind.support.SessionStatus; /** * @SessionAttributes 只声明了参数test1 */ @Controller @SessionAttributes(value={"test1"}) public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); @RequestMapping(value = "/show1") public String show(ModelMap modelMap, HttpSession session) { logger.info("show session"); for (Object key : modelMap.keySet()) { Object value = modelMap.get(key); System.out.println(key + " = " + value); } System.out.println("***********************************"); Enumeration<String> e = session.getAttributeNames(); while (e.hasMoreElements()) { String s = e.nextElement(); System.out.println(s + " == " + session.getAttribute(s)); } System.out.println("***********************************"); return "home"; } @RequestMapping("/set1") public String setSession(ModelMap modelMap) { logger.info("set session 1"); modelMap.addAttribute("test1", "value 1"); //设置一个在@SessionAttributes中声明过的参数 modelMap.addAttribute("test2", "value 2"); //设置一个未在@SessionAttributes中声明过的参数 return "home"; } @RequestMapping("/setM") public String setSessionM(Model model) { logger.info("set session 1"); model.addAttribute("test1", "value 1"); //设置一个在@SessionAttributes中声明过的参数 model.addAttribute("test2", "value 2"); //设置一个未在@SessionAttributes中声明过的参数 return "home"; } @RequestMapping("/clear1") public String clear(SessionStatus status) { logger.info("clear session 1"); status.setComplete(); return "home"; } }
package test.dmh.session.controller; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; /** * 没有使用@SessionAttributes注解 */ @Controller public class IndexController { private static final Logger logger = LoggerFactory.getLogger(IndexController.class); @RequestMapping("/set2") public String setSession(ModelMap modelMap, HttpSession session) { logger.info("set session 2 : without @SessionAttributes"); modelMap.addAttribute("test3", "value 3"); session.setAttribute("test4", "value 4"); return "home"; } }
package test.dmh.session.controller; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.bind.support.SessionStatus; @Controller @SessionAttributes(value={"test5", "index"}) public class IndexController2 { private static final Logger logger = LoggerFactory.getLogger(IndexController2.class); @RequestMapping("/set3") public String setSession(ModelMap modelMap, HttpSession session) { logger.info("set session 3"); modelMap.addAttribute("test5", "value 5"); session.setAttribute("test6", "value 6"); ModelMap map = new ModelMap(); map.addAttribute("test7", "value 7"); this.setValueToSession(modelMap, session, "Hello World"); return "home"; } @ResponseBody @RequestMapping(value="/login") public Map<String, Object> login(ModelMap modelMap, HttpSession session) { logger.info("login"); Map<String, Object> map = new HashMap<String, Object>(); map.put("success", true); map.put("info", "登录成功!"); modelMap.addAttribute("testAjax", "test ajax value"); session.setAttribute("httpTestAjax", "http test ajax Value"); setValueToSession(modelMap, session, "This is Ajax"); return map; } private void setValueToSession(ModelMap modelMap, HttpSession session, String value) { logger.info("set session private"); modelMap.addAttribute("index", value); session.setAttribute("httpIndex", value); } @RequestMapping("/clear2") public String clear(SessionStatus status) { logger.info("clear session 2"); status.setComplete(); return "home"; } @RequestMapping(value = "/show2") public String show(ModelMap modelMap, HttpSession session) { logger.info("show session"); for (Object key : modelMap.keySet()) { Object value = modelMap.get(key); System.out.println(key + " = " + value); } System.out.println("***********************************"); Enumeration<String> e = session.getAttributeNames(); while (e.hasMoreElements()) { String s = e.nextElement(); System.out.println(s + " == " + session.getAttribute(s)); } System.out.println("***********************************"); return "home"; } }Wenn dies ein mit STS erstelltes Projekt wie ich ist, hat die Standard-JSP-Datei die Konfiguration, muss gelöscht oder
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4 <html> <head> <title>Home</title> </head> <body> <h1> Hello world! </h1> <p> The test1 is ${sessionScope.test1}. </p> <p> The test2 is ${sessionScope.test2}. </p> <p> The test3 is ${sessionScope.test3}. </p> <p> The test4 is ${sessionScope.test4}. </p> <p> The test5 is ${sessionScope.test5}. </p> <p> The test6 is ${sessionScope.test6}. </p> <p> The test7 is ${sessionScope.test7}. </p> <p> The index is ${sessionScope.index}. </p> <p> The httpIndex is ${sessionScope.httpIndex}. </p> <br> <input type="button" value="test" onclick="test();"> <script src="resources/js/jquery.min.js"></script> <script type="text/javascript"> function test() { $.ajax({ type : "POST", url : "login", dataType : "json", success : function(data) { console.log(data); window.open("/session/test", "_self"); }, error : function() { alert("出错了!"); } }); } </script> </body> </html>Es gibt auch einen Testcode speziell für die @SessionAttributes-Parameterkonfiguration
package test.dmh.session.controller; import java.util.Enumeration; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.bind.support.SessionStatus; @Controller @SessionAttributes(value={"index1", "index2"}, types={String.class, Integer.class}) public class IndexController3 { private static final Logger logger = LoggerFactory.getLogger(IndexController3.class); @RequestMapping("/setIndex") public String setSession(ModelMap modelMap) { logger.info("set session index"); modelMap.addAttribute("index1", "aaa"); modelMap.addAttribute("index2", "bbb"); modelMap.addAttribute("index2", "ccc"); modelMap.addAttribute("DDD"); modelMap.addAttribute("FFF"); modelMap.addAttribute(22); return "home"; } @RequestMapping(value = "/showIndex") public String show(ModelMap modelMap, HttpSession session) { logger.info("show session"); for (Object key : modelMap.keySet()) { Object value = modelMap.get(key); System.out.println(key + " = " + value); } System.out.println("***********************************"); Enumeration<String> e = session.getAttributeNames(); while (e.hasMoreElements()) { String s = e.nextElement(); System.out.println(s + " == " + session.getAttribute(s)); } System.out.println("***********************************"); return "home"; } @RequestMapping("/clearIndex") public String clear(SessionStatus status) { logger.info("clear session index"); status.setComplete(); return "home"; } }
Eine kurze Beschreibung des Testprozesses:
Da es viele Parameter gibt, bin ich zu faul, mir Namen auszudenken, also haben die serialisierten Tests 1, 2 und 3 bestanden. Geben Sie beim Testen die URL im Browser ein: localhost:8080/session/show1Ändern Sie dann das Suffix show1 in etwas anderes, z. B. set1, set2 und clear1, clear2 usw. , insbesondere Bitte beachten Sie die @RequestMapping-Konfiguration in meinem Code.Jedes Mal, wenn Sie set1 und set2 eingeben, müssen Sie show1 und show2 eingeben, um den Inhalt der Sitzung über die Konsole anzuzeigen. Natürlich können Sie die Anzeigeinformationen auch direkt im Browser anzeigen.
Hier werde ich über die wichtigsten Schlussfolgerungen sprechen:
1. Um ModelMap zum automatischen Speichern von Daten in der Sitzung zu verwenden, müssen Sie die Annotation @SessionAttributes konfigurieren
2. Die Annotation @SessionAttributes kann nur für eine Klasse deklariert werden. Nach der Deklaration können die Methoden in der Klasse nur mit den in @SessionAttributes konfigurierten Parametern arbeiten, einschließlich Speichern , Klar und lesen.
Abschließend werden einige Schlussfolgerungen zur Parameterkonfiguration in @SessionAttributes gezogen:
1. Konfigurationsparameter stellen Wert und Typ bereit, die im Array Typ. (Wenn nur ein Parameter vorhanden ist, ist es nicht erforderlich, ihn in Array-Form zu schreiben, z. B. @SessionAttributes(value="test1",types=Integer.class))
2. Verwenden von Werten zum Konfigurieren von Parametern ähnelt dem Schlüssel-Wert-Paar im Kartenschlüssel3 Nach der Konfiguration der Parameter des praktischen Typs ist der im Hintergrund gespeicherte Schlüsseltyp meiner Meinung nach nur beim Speichern von nützlich benutzerdefinierte Klasse[Verwandte Empfehlungen]1.Kostenloses Java-Video-Tutorial
2.Java-Video-Tutorial zur Implementierung von Miniaturansichten mit gleichen Proportionen für Bilder
3.Das obige ist der detaillierte Inhalt vonBeschreiben Sie kurz die Sitzungsnutzung und detaillierte Aufzeichnungen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!