SpringMVC中session保存数据、清除数据、获取数据的两种方式
1 HTTPSession
1.1 保存数据
1.1.1 核心代码
@RequestMapping("save1")
public String s1(HttpSession session){
session.setAttribute("users1", "admin1111");
System.out.println("wr32r13");
return "session";
}
1.1.2 完整代码
a 前台
<%--
Created by IntelliJ IDEA.
User: SSS翱翔万里
Date: 2022/11/14
Time: 15:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="/session/save1">保存session1</a>
<a href="/session/clear1">清除session1</a><br>
HttpSession存储的值:${users1} <br>
</body>
</html>
b 后台
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Controller
@RequestMapping("session")
@SessionAttributes({"users2"})
public class SessionController {
//session请求(常用)
@RequestMapping("save1")
public String s1(HttpSession session){
/*session里面的值需要重启一下才行吗*/
session.setAttribute("users1", "admin1111");
System.out.println("wr32r13");
return "session";
}
//清除方法
@RequestMapping("clear1")
public String c1(HttpSession session){
session.invalidate();
return "session";
}
}
1.1.2 代码分析
这个HttpSession的使用方法和之前servlet学习阶段的方法是一致的
只要在一个会话范围内,所有页面都是可以获取改数据的
视图解析器中跳转界面的形式就是转发,因为地址栏不变
1.1.3 运行截图展示
a 运行前
b 运行后
1.2 清除数据
1.2.1 核心代码
@RequestMapping("clear1")
public String c1(HttpSession session){
session.invalidate();
return "session";
}
1.2.2 完整代码
a 前台
<%--
Created by IntelliJ IDEA.
User: SSS翱翔万里
Date: 2022/11/14
Time: 15:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>java
<head>
<title>Title</title>
</head>
<body>
<a href="/session/save1">保存session1</a>
<a href="/session/clear1">清除session1</a><br>
HttpSession存储的值:${users1} <br>
</body>
</html>
b 后台
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Controller
@RequestMapping("session")
@SessionAttributes({"users2"})
public class SessionController {
//session请求(常用)
@RequestMapping("save1")
public String s1(HttpSession session){
/*session里面的值需要重启一下才行吗*/
session.setAttribute("users1", "admin1111");
System.out.println("wr32r13");
return "session";
}
//清除方法
@RequestMapping("clear1")
public String c1(HttpSession session){
session.invalidate();
return "session";
}
}
1.2.2 代码分析
session.invalidate()是清除该session对象所有保存好的信息
1.2.3 运行截图展示
a 运行前
b 运行后
1.3 获取数据
1.3.1 核心代码
@RequestMapping("get1")
public String get(HttpSession session){
System.out.println("进入了获取数据的方法");
String users1 = (String) session.getAttribute("users1");
System.out.println(users1);
return "session";
}
1.3.2 完整代码
a 前台
<%--
Created by IntelliJ IDEA.
User: SSS翱翔万里
Date: 2022/11/14
Time: 15:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="/session/save1">保存session1</a>
<a href="/session/clear1">清除session1</a><br>
HttpSession存储的值:${users1} <br>
</body>
</html>
b 后台
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Controller
@RequestMapping("session")
@SessionAttributes({"users2"})
public class SessionController {
//session请求(常用)
@RequestMapping("save1")
public String s1(HttpSession session){
/*session里面的值需要重启一下才行吗*/
session.setAttribute("users1", "admin1111");
System.out.println("wr32r13");
return "session";
}
//清除方法
@RequestMapping("clear1")
public String c1(HttpSession session){
session.invalidate();
return "session";
}
@RequestMapping("get1")
public String get(HttpSession session){
System.out.println("进入了获取数据的方法");
String users1 = (String) session.getAttribute("users1");
System.out.println(users1);
return "session";
}
}
1.3.3 代码分析
这个HttpSession的使用方法和之前servlet学习阶段的方法是一致的
可以通过getAttribute方法获取数据,因为默认返回的是Object类型,因此需要指定类型需要进行强转
1.3.4 运行截图展示
a 访问前
b 访问后
c 控制台输出信息
2.@SessionAttributes注解的方式
2.0 准备工作
@SessionAttributes({"users2"})
//在类上写上该注解,但是需要在@Component这类主键的下面
2.1 保存数据
2.1.1 核心代码
@RequestMapping("save2")
public String s2(Model m){
/*保存的规范 key和注解里面一样*/
m.addAttribute("users2","zhangsan");
return "session";
}
2.1.2 完整代码
a 前台
<%--
Created by IntelliJ IDEA.
User: SSS翱翔万里
Date: 2022/11/14
Time: 15:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="/session/save2">保存session2</a>
<a href="/session/clear2">清除session2</a><br>
session注解${users2}
</body>
</html>
b 后台
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Controller
@RequestMapping("session")
@SessionAttributes({"users2"})
public class SessionController {
@RequestMapping("save2")
public String s2(Model m){
/*保存的规范 key和注解里面一样*/
m.addAttribute("users2","zhangsan");
return "session";
}
@RequestMapping("clear2")
public String c2(SessionStatus ss){
ss.setComplete();
/*redirect:/session.jsp重定向的方式*/
return "redirect:/session.jsp";
}
}
2.1.3 代码分析
a 要想Model保存的数据同时,也赋值一份到特定的session域中,就必须要加上@SessionAttributes注解
b Model里面保存数据的key值需要和注解里面的值一模一样
2.1.4 运行截图展示
a 点击保存session2之前
b 击保存session2之后
2.2 清除数据
2.2.1 核心代码
@RequestMapping("clear2")
public String c2(SessionStatus ss){
ss.setComplete();
return "redirect:/session.jsp";
}
2.2.2 完整代码
a 前台
<%--
Created by IntelliJ IDEA.
User: SSS翱翔万里
Date: 2022/11/14
Time: 15:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="/session/save2">保存session2</a>
<a href="/session/clear2">清除session2</a><br>
session注解${users2}
</body>
</html>
b 后台
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Controller
@RequestMapping("session")
@SessionAttributes({"users2"})
public class SessionController {
@RequestMapping("save2")
public String s2(Model m){
/*保存的规范 key和注解里面一样*/
m.addAttribute("users2","zhangsan");
return "session";
}
@RequestMapping("clear2")
public String c2(SessionStatus ss){
ss.setComplete();
/*redirect:/session.jsp重定向的方式*/
return "redirect:/session.jsp";
}
}
2.2.2 代码分析
ss.setComplete()会清除sessionAttribute方式上保存的session域中的数据
需要注意的是,需要重定向该页面,该数据才能在页面上不展示
2.2.3 运行截图展示
a 运行前
b 运行后
2.3 获取数据
2.3.1 核心代码
@RequestMapping("get2")
public String get(@SessionAttribute(value = "users1",required = false) String u1){
System.out.println("users1:"+u1);
return "session";
}
2.3.2 完整代码
a 前台
<%--
Created by IntelliJ IDEA.
User: SSS翱翔万里
Date: 2022/11/14
Time: 15:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="/session/save2">保存session2</a>
<a href="/session/clear2">清除session2</a><br>
session注解${users2}
</body>
</html>
b 后台
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Controller
@RequestMapping("session")
@SessionAttributes({"users2"})
public class SessionController {
@RequestMapping("save2")
public String s2(Model m){
/*保存的规范 key和注解里面一样*/
m.addAttribute("users2","zhangsan");
return "session";
}
@RequestMapping("clear2")
public String c2(SessionStatus ss){
ss.setComplete();
return "redirect:/session.jsp";
}
@RequestMapping("get2")
public String get(@SessionAttribute(value = "users2",required = false) String u1){
System.out.println("users1:"+u1);
return "session";
}
}
2.3.3 代码分析
通过@SessionAttributes保存的session域中的值,一般是通过@SessionAttribute注解的方式进行获取值