CookieDemo
需求:
1.访问一个Servlet,如果是第一次访问,则提示:您好,欢迎首次访问
2.如果不是第一次访问,则友好提示:欢迎回来,您上次访问时间为:显示时间字符串
分析:
1.可以采用Cookie来完成
2.在服务器中的Servlet判断是否有一个名为lastTime的cookie
2.1 有Cookie则表示不是第一次访问
1.响应数据 : 欢迎回来,您上次访问的时间为:2019年7月31日 xx:xx:xx
2.写回Cookie : lastTime=2019年7月31日 xx:xx:xx
2.2 没有Cookie则表示是第一次访问
1.响应数据 : 您好,欢迎您首次访问
2.写回Cookie : lastTime=2019年7月31日 xx:xx:xx
具体代码实现:
1 package com.infosys.servlet;
2
3 import javax.servlet.ServletException;
4 import javax.servlet.annotation.WebServlet;
5 import javax.servlet.http.Cookie;
6 import javax.servlet.http.HttpServlet;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9 import java.io.IOException;
10 import java.net.URLDecoder;
11 import java.net.URLEncoder;
12 import java.text.SimpleDateFormat;
13 import java.util.Date;
14
15 @WebServlet("/CookieTest")
16 public class CookieTest extends HttpServlet {
17 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
18
19 response.setContentType("text/html;charset=utf-8");
20
21 Cookie[] cookies = request.getCookies();
22
23 boolean flag = false;
24
25 if (cookies != null && cookies.length > 0) {
26 for (Cookie cookie : cookies) {
27 //3.获取cookie的名称
28 String name = cookie.getName();
29 if ("lastTime".equals(name)) {
30
31 flag = true;
32
33 Date data = new Date();
34 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:dd");
35 String str_date = sdf.format(data);
36
37 System.out.println("编码之前" + str_date);
38 str_date = URLEncoder.encode(str_date, "utf-8");
39 System.out.println("编码之后" + str_date);
40 cookie.setValue(str_date);
41 cookie.setMaxAge(60 * 60 * 24 * 30);
42 response.addCookie(cookie);
43
44 String value = cookie.getValue();
45 value = URLDecoder.decode(value, "utf-8");
46 response.getWriter().write("欢迎回来,您上次访问时间为" + value);
47
48 break;
49 }
50 }
51 }
52
53 if (cookies == null || cookies.length == 0 || flag == false) {
54 //没有cookie, 第一次访问
55 //设置cookie的value,或当前的时间字符串,重新发送cookie
56 Date data = new Date();
57 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:dd");
58
59 String str_date = sdf.format(data);
60
61 System.out.println("编码之前" + str_date);
62 str_date = URLEncoder.encode(str_date, "utf-8");
63 System.out.println("编码之后" + str_date);
64
65
66 Cookie cookie = new Cookie("lastTime", str_date);
67 cookie.setValue(str_date);
68 //设置cookie的存活时间
69 cookie.setMaxAge(60 * 60 * 24 * 30);
70 response.addCookie(cookie);
71 response.getWriter().write("欢迎首次登陆");
72 }
73
74 }
75
76 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
77 this.doPost(request, response);
78 }
79 }