文章目录
- [获取 Cookie](#获取 Cookie)
-
- [传统获取 Cookie](#传统获取 Cookie)
- [简洁获取 Cookie(注解)](#简洁获取 Cookie(注解))
- [获取 Session](#获取 Session)
-
- [Session 存储和获取](#Session 存储和获取)
- [简洁获取 Session (1)](#简洁获取 Session (1))
- [简洁获取 Session (2)](#简洁获取 Session (2))
获取 Cookie
传统获取 Cookie
这是没有 Spring 的时候,用 Servlet 来获取(获取所有的 Cookie)
-
Spring MVC是基于Servlet API构建的原始Web框架,也是在Servlet的基础上实现的@RequestMapping("/getcookie")
public String getCookie(HttpServletRequest request,
HttpServletResponse response) {
//String name = request.getParameter("name");
Cookie cookies[] = request.getCookies();
if (cookies != null) {
//将 Cookie 转成了数据流,然后进行循环
Arrays.stream(cookies).forEach(ck -> System.out.println
(ck.getName() + ":" + ck.getValue()));
}
return "获取Cookie成功";
}
-
HttpServletRequest代表HTTP的请求,HTTP请求里面有什么,这个对象里面就有什么 -
HttpServletResponse代表HTTP的响应,HTTP响应里面有什么,这个对象里面就有什么这两个对象属于
Spring的内置对象,需要就加上,不用就不用写
Cookie 是一个数组,所以进行循环打印
进入网页后,Cookie 可以直接进行修改(F12)。然后在里面添加信息,name=bite,value=666,随后保存 
之后刷新,可在服务端看到 Cookie 信息 
Spring MVC是基于Servlet API构建的原始Web框架,也是在Servlet的基础上实现的HttpServletRequest,HttpServletResponse是Servlet提供的两个类,是Spring MVC方法的内置对象,需要时直接在方法中添加声明即可HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息HttpServletResponse对象代表服务器的响应。HTTP响应的信息都在这个对象中,比如向客户端发送的数据,响应头,状态码等。通过这个对象提供的方法,可以获得服务器响应的所以内容Spring MVC在这两个对象的基础上进行封装,给我们提供更加简单的使用方法
简洁获取 Cookie(注解)
Spring MVC 在这两个对象的基础上进行封装,给我们提供更加简单的使用方法
上面获取的话,就是获取的所有的 Cookie,而如果想要获取某个 Cookie,就需要使用 @CookieValue
@RequestMapping("/getcookie2")
public String getCookie2(@CookieValue("bite") String bite) {
return "从Cookie中获取值, bite:"+bite;
}
@CookieValue 里面的值,就是你要获取的 Cookie 
获取 Session
Session 存储和获取
传统方式也是用 Servlet 进行实现的
@RequestMapping("/getsession")
public String getsession(HttpServletRequest request) {
//从 Cookie 中获取到了 SessionId,根据 Session 获取 Session对象
HttpSession session = request.getSession();
String name = (String) session.getAttribute("name");
return "从session中获取name:"+name;
}
- 第四行是从
Cookie中获取到SessionId,然后根据SessionId获取到Session对象 - 然后通过
getAttribute来获取你要拿的值
因为 session 是在服务器中进行存储的,所以就不能像前面 Cookie 一样可以直接"伪造"了。就需要学习如何设置 session
@RequestMapping("/setsession")
public String setSession(HttpServletRequest request){
//从 Cookie 中获取到了SessionId,根据 SessionId 获取Session对象
//如果没有获取到,就会创建一个Session对象
HttpSession session = request.getSession();
session.setAttribute("name","zhangsan");
return "设置session成功";
}
- 首先是在
Cookie中获取SessionId,然后根据SessionId获取Session对象。如果没有获取到,就会创建一个Session对象 - 创建好
Session之后,就可以进行设置了- 使用
setAttribute进行设置,前面是name,后面是value
- 使用
可以通过 Fiddler 进行观察 
之后就可以通过 SessionId 获取到 Session 的值了 
如果擅自将下面的 SessionId 改了,就获取不到 Session 了 
简洁获取 Session (1)
封装一些冗余的过程
@RequestMapping("/getsession2")
public String getsession2(HttpSession session){
String name = (String) session.getAttribute("name");
return "从session中获取name"+name;
}
- 这里
HttpSession就直接省略了自己getSession的过程,直接就给我们提供了一个Session
简洁获取 Session (2)
更进一步,能直接给到我们想要的 name 的值吗
@RequestMapping("/getsession3")
public String getsession3(@SessionAttribute("name") String name){
//String name = (String) session.getAttribute("name");
return "从session中获取name:"+name;
}
- 这里的
@SessionAttribute里面的值就是想要获取的Session的值,省略掉了指定name的步骤
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-planinvite_code=33sw7qvy0ds04