今天做博客demo的时候遇到了这样的问题:当我用ajax进行资源请求时,需要顺便将账户信息存入session。但是后来发现有@Responsebody标签时,直接用HttpSession存数据时,根本没有效果。代码如下:
@ResponseBody @RequestMapping("/checkInfo") public Blogger dealWithLogin(@RequestBody Blogger blogger,HttpSession httpSession){ if(blogger.getBloggerMail() != null) { blogger = bloggerServices.checkInfo(blogger); if(!blogger.equals("")){ httpSession.setAttribute("blogger",blogger); } } return blogger; }
在jsp页面中取值取不到。那么是不是我的写法有问题呢(不考虑标签问题),我做了一个简单的测试
@Controller @RequestMapping("/test") public class TestController { @RequestMapping("/m1") public String m1(HttpSession httpSession){ httpSession.setAttribute("sessionTest","session ........"); return "test"; } }
跳转页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${sessionScope.sessionTest} </body> </html>
得到结果
发现可以得到结果,那么这个测试程序与我之前所写的程序有何区别呢?
当然是返回值类型不一样了,前者通过@ResponseBody标签指定返回的是json类型,而后者直接跳转页面。
那么是不是意味着,有@ResponseBody标签,就不能使用session了呢?
后来查阅发现,还是要使用spingmvc自带的组件,@SessionAttributes。代码如下:
package com.ph.controller;import javax.servlet.http.HttpSession; @SessionAttributes(value = {"blogger"}) @RequestMapping("/blogger") @Controller public class BloggerController { @Autowired private BloggerServices bloggerServices; @ResponseBody @RequestMapping("/checkInfo") public Blogger dealWithLogin(@RequestBody Blogger blogger, Model model,HttpSession httpSession){ if(blogger.getBloggerMail() != null) { blogger = bloggerServices.checkInfo(blogger); if(!blogger.equals("")){ model.addAttribute("blogger",blogger); } } return blogger; } }
public Blogger dealWithLogin(@RequestBody Blogger blogger, Model model,HttpSession httpSession)中的HttpSession httpSession务必要加上,不然会报错。
@SessionAttributes(value = {"blogger"}) 含义:model添加一个名为blogger的变量时,也会在session中加一个。 注:记录一下解决方案,原理日后探究,有错误还请大佬们指正,感谢。
原文地址:https://www.cnblogs.com/phdeblog/p/10560812.html
时间: 2024-11-06 01:19:53