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

注:記錄一下解決方案,原理日后探究,有錯誤還請大佬們指正,感謝。
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM