文章目录
- 获取 Cookie
- 传统获取 Cookie
- 简洁获取 Cookie(注解)
- 获取 Session
- Session 存储和获取
- 简洁获取 Session (1)
- 简洁获取 Session (2)
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站
https://www.captainbed.cn/yechiel
获取 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-plan?invite_code=33sw7qvy0ds04