cookie就是一个小体积的键值对,格式:key=value;客户端和服务器端,通常使用http协议来进行数据传输,而http协议是无状态的。也就是客户端向同一个服务器端发送的第一次Request和第二次Request,是没有关联的。需要cookie来保存一些用户信息,每次向相同的域名(domian)和路径(path)发送Request时都会携带cookie。
创建一个控制类
//首先,想要获取Cookie信息,那么就得先有Cookie信息,这边我们自己从头开始,先弄个Cookie吧。
@RequestMapping(value = "/setCookies",method = RequestMethod.GET)
public String setCookies(HttpServletResponse response){
//HttpServerletRequest 装请求信息类
//HttpServerletRespionse 装相应信息的类
Cookie cookie=new Cookie("sessionId","CookieTestInfo");
response.addCookie(cookie);
return "添加cookies信息成功";
}
2
3
4
5
6
7
8
9
10
该注解由SpringWeb提供,主要有两个属性,默认Required为true,如果Request不包含该名字的cookie,则会报错。
上边,可以看到,我new了个Cookie,name是sessionId,value是CookieTestInfo; 接下来我们看看怎么取。
非注解方式获取cookie中对应的key值
//非注解方式获取cookie中对应的key值
@RequestMapping(value = "/getCookies",method = RequestMethod.GET)
public String getCookies(HttpServletRequest request){
//HttpServletRequest 装请求信息类
//HttpServletRespionse 装相应信息的类
// Cookie cookie=new Cookie("sessionId","CookieTestInfo");
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie : cookies){
if(cookie.getName().equals("sessionId")){
return cookie.getValue();
}
}
}
return null;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
上边注意了,看到那个循环没,这是非常有必要的! 因为这不是通过注解方式去获取Cookie中对应的key值(注解方式下边有介绍),所以得用这种方式去获取(看到里面的if没,就是通过Cookie的name:sessionId去拿值),如果执行成功,会显示在网页上的,因为这个是个@RestController。
注解方式获取cookie中对应的key值
//注解方式获取cookie中对应的key值
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("sessionId") String sessionId ) {
//前提是已经创建了或者已经存在cookie了,那么下面这个就直接把对应的key值拿出来了。
System.out.println("testCookieValue,sessionId="+sessionId);
return "SUCCESS";
}
2
3
4
5
6
7
上边的代码,你可以看到实际上通过注解方式去获取Cookie信息的话,是非常!简单!的!,直接@一下,然后String sessionIValue=sessionId; 就拿出来了!