gst*_*low 100 session servlets spring-mvc
你能帮我写一下这个代码的spring mvc风格模拟吗?
session.setAttribute("name","value");
Run Code Online (Sandbox Code Playgroud)
以及如何将一个注释@ModelAttribute注释的元素添加到会话中,然后获取对它的访问权限?
Ali*_*edy 181
如果要在每次响应后删除对象,则不需要会话,
如果您想在用户会话期间保留对象,有以下几种方法:
直接向会话添加一个属性:
@RequestMapping(method = RequestMethod.GET)
public String testMestod(HttpServletRequest request){
ShoppingCart cart = (ShoppingCart)request.getSession().setAttribute("cart",value);
return "testJsp";
}
Run Code Online (Sandbox Code Playgroud)
你可以从控制器那里得到它:
ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
Run Code Online (Sandbox Code Playgroud)使控制器会话作用域
@Controller
@Scope("session")
Run Code Online (Sandbox Code Playgroud)范围对象,例如,您每次都应该在会话中使用用户对象:
@Component
@Scope("session")
public class User
{
String user;
/* setter getter*/
}
Run Code Online (Sandbox Code Playgroud)
然后在每个你想要的控制器中注入类
@Autowired
private User user
Run Code Online (Sandbox Code Playgroud)
这使课堂上课.
AOP代理注入:在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>
Run Code Online (Sandbox Code Playgroud)
然后在每个你想要的控制器中注入类
@Autowired
private User user
Run Code Online (Sandbox Code Playgroud)5.Pass HttpSession方法:
String index(HttpSession session) {
session.setAttribute("mySessionAttribute", "someValue");
return "index";
}
Run Code Online (Sandbox Code Playgroud)
6.通过@SessionAttributes("ShoppingCart")在会话中创建ModelAttribute:
public String index (@ModelAttribute("ShoppingCart") ShoppingCart shoppingCart, SessionStatus sessionStatus) {
//Spring V4
//you can modify session status by sessionStatus.setComplete();
}
Run Code Online (Sandbox Code Playgroud)
或者您可以将模型添加到整个控制器类,如,
@Controller
@SessionAttributes("ShoppingCart")
@RequestMapping("/req")
public class MYController {
@ModelAttribute("ShoppingCart")
public Visitor getShopCart (....) {
return new ShoppingCart(....); //get From DB Or Session
}
}
Run Code Online (Sandbox Code Playgroud)
每个人都有优势和劣势:
@session可能会在云系统中使用更多内存,它会将会话复制到所有节点,而直接方法(1和5)则采用凌乱的方法,单元测试并不好.
访问会话jsp
<%=session.getAttribute("ShoppingCart.prop")%>
Run Code Online (Sandbox Code Playgroud)
在Jstl:
<c:out value="${sessionScope.ShoppingCart.prop}"/>
Run Code Online (Sandbox Code Playgroud)
在Thymeleaf:
<p th:text="${session.ShoppingCart.prop}" th:unless="${session == null}"> . </p>
Run Code Online (Sandbox Code Playgroud)
Hei*_*ter 41
使用 @SessionAttributes
请参阅文档:使用@SessionAttributes在请求之间的HTTP会话中存储模型属性
" 了解Spring MVC模型和会话属性 "还提供了对Spring MVC会话的非常好的概述,并解释了如何/何时将@ModelAttributes转移到会话中(如果控制器已@SessionAttributes注释).
该文章还解释了最好@SessionAttributes在模型上使用而不是直接在HttpSession上设置属性,因为这有助于Spring MVC与视图无关.
Ram*_*ama 26
SessionAttribute注释是最简单直接的,而不是从请求对象和设置属性获取会话.
任何对象都可以添加到控制器中的模型中,如果其名称与@SessionAttributes注释中的参数匹配,它将存储在会话中.
在下面,例如,personObj将在会话中提供.
@Controller
@SessionAttributes("personObj")
public class PersonController {
@RequestMapping(value="/person-form")
public ModelAndView personPage() {
return new ModelAndView("person-page", "person-entity", new Person());
}
@RequestMapping(value="/process-person")
public ModelAndView processPerson(@ModelAttribute Person person) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("person-result-page");
modelAndView.addObject("pers", person);
modelAndView.addObject("personObj", person);
return modelAndView;
}
}
Run Code Online (Sandbox Code Playgroud)
aks*_*ppy 19
以下带注释的代码将"值"设置为"名称"
@RequestMapping("/testing")
@Controller
public class TestController {
@RequestMapping(method = RequestMethod.GET)
public String testMestod(HttpServletRequest request){
request.getSession().setAttribute("name", "value");
return "testJsp";
}
}
Run Code Online (Sandbox Code Playgroud)
在JSP中使用相同的访问权限
${sessionScope.name}.
For the @ModelAttribute see this link
这样不是最简单和最短吗?我知道并刚刚对其进行了测试 - 在这里工作得很好:
@GetMapping
public String hello(HttpSession session) {
session.setAttribute("name","value");
return "hello";
}
Run Code Online (Sandbox Code Playgroud)
ps 我来这里是为了寻找“如何在 Spring-mvc 中使用会话属性”的答案,但是读了这么多,却没有看到我在代码中编写的最明显的部分。我没有看到它,所以我认为它错了,但不,它不是。因此,让我们通过主要问题的最简单解决方案来分享这些知识。
| 归档时间: |
|
| 查看次数: |
331844 次 |
| 最近记录: |