今天做博客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能否同时使用?)的更多相关文章

  1. ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据的传递

    前言 最近公司项目进行架构调整,由原来的三层架构改进升级到微服务架构(准确的说是服务化,还没完全做到微的程度,颗粒度没那么细),遵循RESTFull规范,使前后端完全分离,实现大前端思想.由于是初次尝 ...

  2. ASP.Net中关于WebAPI与Ajax进行跨域数据交互时Cookies数据的传递

    本文主要介绍了ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据传递的相关知识.具有很好的参考价值.下面跟着小编一起来看下吧 前言 最近公司项目进行架构调整,由原来的三层架构改 ...

  3. SpringMVC之Ajax与Controller交互

    前面学习了拦截器,通过拦截器我们可以拦截请求,做进一步处理之后再往下进行,这里我们使用Ajax的时候会有一个问题就是会把js.css这些静态资源文件也进行了拦截,这样在jsp中就无法引入的静态资源文件 ...

  4. springMVC学习(11)-json数据交互和RESTful支持

    一.json数据交互: json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. springMVC进行json交 ...

  5. SprimgMVC学习笔记(八)—— SpringMVC与前台json数据交互

    一.两种交互形式 可以看出,前台传过来的方式有两种,一种是传json格式的数据过来,另一种就是在url的末尾传普通的key/value串过来,针对这两种方式,在Controller类中会有不同的解析, ...

  6. $Django ajax简介 ajax简单数据交互,上传文件(form-data格式数据),Json数据格式交互

    一.ajax  1 什么是ajax:异步的JavaScript和xml,跟后台交互,都用json  2 ajax干啥用的?前后端做数据交互:  3 之前学的跟后台做交互的方式:   -第一种:在浏览器 ...

  7. AJAX进行数据交互的过程

    AJAX全称为"Asynchronous JavaScript and XML"(异步JavaScript和XML). 是指一种创建交互式网页应用的网页开发技术. 通过在后台与服务 ...

  8. laytpl模板——怎么使用ajax与数据交互

    第一次在项目中用laytpl模板,下面是一些使用过程中的探索,希望对小伙伴们有所帮助. 注:第一次使用这个模板的小伙伴建议先去看看官网 laytpl <script type="tex ...

  9. Vue--- Vue(Pubsub + Ajax) 数据交互

    案例知识点 兄弟组件儿的通信     使用了Pubsub    订阅与发布 ajax数据请求    获取前   获取中   获取后   获取为空    获取异常 获取成功后显示数据给到  原先定义号的 ...

随机推荐

  1. javascript花式理解闭包

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  2. 【[HNOI2016]序列】

    莫队好题啊 莫队来做这个题的难点就是考虑如何在\(O(1)\)时间内由\([l,r]\)转移到\([l,r+1]\) 显然加入\(r+1\)这个数之后会和之前所有的位置都产生一个区间,就是要去快速求出 ...

  3. 超简单,centos7安装docker

    1.在centos7上直接yum安装docker [root@localhost ~]# yum install docker 2.启动docker [root@localhost ~]#servic ...

  4. 多线程之Lock

    Java并发编程:Lock 在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.l ...

  5. 《关于ES6的学习》

    var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当前作用域的最顶部,这种行为叫做变量提升(Hoisting) 也就是说,如 ...

  6. [NOI2001]炮兵阵地 【状压DP】

    #\(\color{red}{\mathcal{Description}}\) \(Link\) 司令部的将军们打算在\(N \times M\)的网格地图上部署他们的炮兵部队.一个\(N \time ...

  7. P1470 最长前缀 Longest Prefix

    题目描述 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣. 如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 ...

  8. 初学node.js-MongoDB安装和环境服务配置(4)

    一.mongoDB安装: (1)官网下载,我的是windows64位系统,目前最新版mongodb-win32-x86_64-2008plus-ssl-4.0.9-signed.msi 安装步骤不说了 ...

  9. layedit富文本编辑器获取纯文字内容和全部内容

  10. Linux 和 ubuntu安装redis

    Linux 下安装reids 下载地址:http://redis.io/download,下载最新稳定版本. 本教程使用的最新文档版本为 2.8.17,下载并安装: $ wget http://dow ...