gpt4 book ai didi

spring-mvc - 如何在Spring-mvc中使用Session属性

转载 作者:行者123 更新时间:2023-12-03 04:48:17 33 4
gpt4 key购买 nike

你能帮我编写这段代码的 spring mvc 风格模拟吗?

 session.setAttribute("name","value");

如何将由 @ModelAttribute 注解注解的元素添加到 session 中,然后访问它?

最佳答案

如果您想在每次响应后删除对象,则不需要 session ,

如果您想在用户 session 期间保留对象,有一些方法:

  1. 直接向 session 添加一个属性:

    @RequestMapping(method = RequestMethod.GET)
    public String testMestod(HttpServletRequest request){
    ShoppingCart cart = (ShoppingCart)request.getSession().setAttribute("cart",value);
    return "testJsp";
    }

    你可以像这样从 Controller 获取它:

    ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
  2. 使您的 Controller session 具有范围

    @Controller
    @Scope("session")
  3. 范围对象,例如您有每次都应处于 session 中的用户对象:

    @Component
    @Scope("session")
    public class User
    {
    String user;
    /* setter getter*/
    }

    然后在您想要的每个 Controller 中注入(inject)类

       @Autowired
    private User user

    让类继续进行。

  4. AOP代理注入(inject):在 spring-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>

    然后在您想要的每个 Controller 中注入(inject)类

    @Autowired
    private User user

5.将HttpSession传递给方法:

 String index(HttpSession session) {
session.setAttribute("mySessionAttribute", "someValue");
return "index";
}

6.在 session 中通过@SessionAttributes("ShoppingCart")创建ModelAttribute:

  public String index (@ModelAttribute("ShoppingCart") ShoppingCart shoppingCart, SessionStatus sessionStatus) {
//Spring V4
//you can modify session status by sessionStatus.setComplete();
}

或者您可以将模型添加到整个 Controller 类,例如,

@Controller
@SessionAttributes("ShoppingCart")
@RequestMapping("/req")
public class MYController {

@ModelAttribute("ShoppingCart")
public Visitor getShopCart (....) {
return new ShoppingCart(....); //get From DB Or Session
}
}

每一种都有优点和缺点:

@session 在云系统中可能会使用更多的内存,它将 session 复制到所有节点,而直接方法(1 和 5)的方法比较困惑,不利于单元测试。

访问 session jsp

<%=session.getAttribute("ShoppingCart.prop")%>

在 JSTL 中:

<c:out value="${sessionScope.ShoppingCart.prop}"/>

在百里香叶中:

<p th:text="${session.ShoppingCart.prop}" th:unless="${session == null}"> . </p>

关于spring-mvc - 如何在Spring-mvc中使用Session属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791645/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com