springmvc使用ajax进行数据交互时,session失效问题(@ResponseBody与session能否同时使用?)

Posted 小楼夜听雨QAQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springmvc使用ajax进行数据交互时,session失效问题(@ResponseBody与session能否同时使用?)相关的知识,希望对你有一定的参考价值。

今天做博客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中加一个。

注:记录一下解决方案,原理日后探究,有错误还请大佬们指正,感谢。
 
 

 

以上是关于springmvc使用ajax进行数据交互时,session失效问题(@ResponseBody与session能否同时使用?)的主要内容,如果未能解决你的问题,请参考以下文章

使用springmvc和ajax进行前后端交互的简单实例

springmvc与ajax交互常见问题

@RequestBody ajax 415 400

SpringMVC与Ajax交互

Ajax和SpringMVC之间JSON交互

ssm(spring+springmvc+mybatis)发起ajax请求前后端交互数据问题与解决方案