Wenn Sie nach jeder Antwort ein Objekt löschen möchten, benötigen Sie keine Sitzung.
Wenn Sie das Objekt während der Benutzersitzung behalten möchten, gibt es verschiedene Möglichkeiten:
Fügen Sie der Sitzung direkt ein Attribut hinzu:
@RequestMapping(method = RequestMethod.GET)
public String testMestod(HttpServletRequest request){
ShoppingCart cart = (ShoppingCart)request.getSession().setAttribute("cart",value);
return "testJsp";
}
und Sie können es von Controller wie folgt erhalten:
ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
Machen Sie Ihre Controller-Sitzung umfangreich
@Controller
@Scope("session")
Umfang der Objekte, z. B. haben Sie ein Benutzerobjekt, das sich jedes Mal in der Sitzung befinden sollte:
@Component
@Scope("session")
public class User
{
String user;
/* setter getter*/
}
Fügen Sie dann Klasse in jeden Controller ein, den Sie möchten
@Autowired
private User user
das hält den Unterricht in der Sitzung.
Die AOP-Proxy-Injektion: im Frühjahr -xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<bean id="user" class="com.User" scope="session">
<aop:scoped-proxy/>
</bean>
</beans>
Fügen Sie dann Klasse in jeden Controller ein, den Sie möchten
@Autowired
private User user
5.Pass HttpSession to method:
String index(HttpSession session) {
session.setAttribute("mySessionAttribute", "someValue");
return "index";
}
6.Make ModelAttribute in Sitzung von @SessionAttributes ("ShoppingCart"):
public String index (@ModelAttribute("ShoppingCart") ShoppingCart shoppingCart, SessionStatus sessionStatus) {
//Spring V4
//you can modify session status by sessionStatus.setComplete();
}
oder Sie können Modell zur gesamten Controller-Klasse hinzufügen, wie z.
@Controller
@SessionAttributes("ShoppingCart")
@RequestMapping("/req")
public class MYController {
@ModelAttribute("ShoppingCart")
public Visitor getShopCart (....) {
return new ShoppingCart(....); //get From DB Or Session
}
}
Jeder hat Vor- und Nachteile:
@session verwendet möglicherweise mehr Speicher in Cloud-Systemen, kopiert die Sitzung auf alle Knoten, und die direkte Methode (1 und 5) hat einen chaotischen Ansatz. Ein Unit-Test ist nicht sinnvoll.
So greifen Sie auf die Sitzung jsp zu
<%=session.getAttribute("ShoppingCart.prop")%>
in Jstl:
<c:out value="${sessionScope.ShoppingCart.prop}"/>
in Thymeleaf:
<p th:text="${session.ShoppingCart.prop}" th:unless="${session == null}"> . </p>