• 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中加一个。

    注:记录一下解决方案,原理日后探究,有错误还请大佬们指正,感谢。
     
     
  • 相关阅读:
    SVM – 线性分类器
    解决mybatis generator无法覆盖XML
    windows下IDEA的terminal配置bash命令
    mysqldump定时备份数据库
    linux清理日志脚本
    MySQL主从同步配置
    mysql binlog日志自动清理及手动删除
    linux搭建FTP服务器并整合Nginx
    mysql解除死锁状态
    git取消跟踪已版本控制的文件
  • 原文地址:https://www.cnblogs.com/phdeblog/p/10560812.html
Copyright © 2020-2023  润新知