JavaEE会话技术之cookie案例

需求

1.  访问一个servlet,如果第一次访问,则提示:您好!欢迎首次访问
2. 如果不是第一次访问,则提示:欢迎回来,您上次到访时间为:显示时间字符串

分析

1.  可以采用cookie完成
2. 在服务器中的servlet判断是否有一个名字为lastTime的cookie
    1. 有:不是第一次访问
        1. 响应数据:欢迎回来,您上次的访问时间为:时间
        2.  写回cookie:lastTime=时间
    2. 没有:是第一次访问
        1. 响应数据:您好,欢迎首次访问
        2. 写回cookie:lastTime=时间

注意事项

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package com.web.cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

/*1. 可以采用cookie完成
2. 在服务器中的servlet判断是否有一个名字为lastTime的cookie
1. 有:不是第一次访问
1. 响应数据:欢迎回来,您上次的访问时间为:时间
2. 写回cookie:lastTime=时间
2. 没有:是第一次访问
1. 响应数据:您好,欢迎首次访问
2. 写回cookie:lastTime=时间
*/

/**
* @author OldAZ-PC
*/
@WebServlet(urlPatterns = "/CookieTest")
public class CookieTest extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应消息体的数据格式
response.setContentType("text/html;charset=UTF-8");

//1.获取所有的cookie
Cookie[] cookies = request.getCookies();
Boolean flag = false; //没有cookie为last time
//2.遍历数组
if (cookies != null&& cookies.length>0){
for (Cookie cookie : cookies) {
//3.获取cookie的名称
String name = cookie.getName();

if ("lastTime".equals(name)){
//有该cookie,表示不是第一次访问
flag = true;
//设置cookie的value
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);


System.out.println("编码前:"+str_date);
str_date = URLEncoder.encode(str_date, "utf-8");
System.out.println("编码后:"+str_date);


cookie.setValue(str_date);

//设置cookie的存活时间
cookie.setMaxAge(60*60*24);//一个月
response.addCookie(cookie);

//响应数据
//获取cookie的value,时间
String value = cookie.getValue();
System.out.println("解码前:"+value);
value = URLDecoder.decode(value,"utf-8");
System.out.println("解码后:"+value);
response.getWriter().write("<h1>欢迎回来,您上次的访问时间为:"+value+"</h1>");


}

}
}else if (cookies==null || cookies.length==0||flag==false){
//没有,第一次访问

//设置cookie的value
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);
str_date = URLEncoder.encode(str_date, "utf-8");
Cookie cookie = new Cookie("lastTime",str_date);
//设置cookie的存活时间
cookie.setMaxAge(60*60*24); //一个月
response.addCookie(cookie);

response.getWriter().write("<h1>您好,欢迎首次访问</h1>");

}


}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
文章目录
  1. 1. 需求
  2. 2. 分析
  3. 3. 注意事项
  4. 4. 代码
,