Если вы хотите удалить объект после каждого ответа нет необходимости сессии
Если вы хотите сохранить объект во время сеанса пользователя, Он имеет несколько способов:
непосредственно добавить один атрибут сессии:
@RequestMapping(method = RequestMethod.GET)
public String testMestod(HttpServletRequest request){
ShoppingCart cart = (ShoppingCart)request.getSession().setAttribute("cart",value);
return "testJsp";
}
и вы можете получить его Фро контроллер, как это:
ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
Сделать контроллер сеанс области действия
@Controller
@Scope("session")
Объем объекты, например, у вас есть пользовательский объект, который хочет быть в сессии каждый время:
@Component
@Scope("session")
public class User
{
String user;
/* setter getter*/
}
затем введите класс в каждый контроллер, который вы хотите
@Autowired
private User user
который сохраняет класс на сессии.
прокси инъекции АОП: весной -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>
затем впрыснуть класс в каждом контроллере, который вы хотите
@Autowired
private User user
5.Pass HttpSession методу:
String index(HttpSession session) {
session.setAttribute("mySessionAttribute", "someValue");
return "index";
}
6.Сделать ModelAttribute в сессии По @SessionAttributes ("ShoppingCart"):
public String index (@ModelAttribute("ShoppingCart") ShoppingCart shoppingCart, SessionStatus sessionStatus) {
//Spring V4
//you can modify session status by sessionStatus.setComplete();
}
или вы можете добавить модель для всего класса контроллера Такой
@Controller
@SessionAttributes("ShoppingCart")
@RequestMapping("/req")
public class MYController {
@ModelAttribute("ShoppingCart")
public Visitor getShopCart (....) {
return new ShoppingCart(....); //get From DB Or Session
}
}
каждый из них имеет преимущества и недостатки:
@session может использовать больше памяти в облачных системах, она копирует сеанс ко всем узлам, а прямой метод (1 и 5) имеет беспорядочный подход, нечестно тестировать единицы.
Чтобы получить доступ к сессии Jsp
<%=session.getAttribute("ShoppingCart.prop")%>
в JSTL:
<c:out value="${sessionScope.ShoppingCart.prop}"/>
в Thymeleaf:
<p th:text="${session.ShoppingCart.prop}" th:unless="${session == null}"> . </p>
3. Если ваш контроллер одноточечный, вам необходимо определить proxyMode = ScopedProxyMode.TARGET_CLASS для инъецируемого компонента с областью сеанса. @Scope (value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) –
Сделать сеанс сеанса контроллера самым худшим вариантом здесь, хотя он выглядит простым и простым в использовании. Но если вы захотите увеличить время своего приложения в будущем, у вас возникнут проблемы, так как вам, вероятно, понадобится распределенное хранилище сеансов, такое как Redis (если вы не используете липкие сеансы, жертвуя доступностью для удобства). Таким образом, бобы с сессионным участком должны, как правило, быть немыми сериализуемыми POJO. Таким образом, вы готовы к масштабированию в случае возникновения необходимости. – chris