案例一:记住用户登录时间案例
1、需求:
1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串
2、分析:
1. 可以采用Cookie来完成
2. 在服务器中的Servlet判断是否有一个名为lastTime的cookie
2.1 有:不是第一次访问
1. 响应数据:欢迎回来,您上次访问时间为:2019年10月4日11:50:20
2. 写回Cookie:lastTime=2019年10月4日11:50:01
2.2 没有:是第一次访问
1. 响应数据:您好,欢迎您首次访问
2. 写回Cookie:lastTime=2019年10月4日11:50:01
3、代码实现:
1 import javax.servlet.ServletException;
2 import javax.servlet.annotation.WebServlet;
3 import javax.servlet.http.Cookie;
4 import javax.servlet.http.HttpServlet;
5 import javax.servlet.http.HttpServletRequest;
6 import javax.servlet.http.HttpServletResponse;
7 import java.io.IOException;
8 import java.net.URLDecoder;
9 import java.net.URLEncoder;
10 import java.text.SimpleDateFormat;
11 import java.util.Date;
12
13 /**
14 记住用户登录时间案例
15 */
16 @WebServlet("/cookieservlet")
17 public class cookieservlet extends HttpServlet {
18 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
19 // 设置响应消息体的数据格式以及编码
20 response.setContentType("text/html;charset=utf-8");
21
22 //1 获取所有 cookie
23 Cookie[] cookies = request.getCookies();
24 boolean flag = false; // 默认没有 cookie 为 lastTime
25 // 2.遍历cookie 数组
26 if (cookies != null && cookies.length > 0) {
27 for (Cookie cookie : cookies) {
28 // 3 获取所有的cookie 名称
29 String name = cookie.getName();
30 // 4.判断名称是否是 lastTime
31 if("lastTime".equals(name)) {
32 // 有 cookie,不是第一次访问
33 flag = true;
34
35 // 获取 cookie 的 value
36 // 响应数据
37 // 获取 cookie 的value,s时间
38 String value = cookie.getValue();
39
40 System.out.println("解码前:"+value);
41 // URL 解码
42 value = URLDecoder.decode(value, "utf-8");
43 System.out.println("解码后:"+value);
44
45
46 //设置cookie 的 value
47 // 获取当前时间的字符串,重新设置 cookie 值,重新发送cookie
48
49 Date date = new Date();
50 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
51 String str_date = sdf.format(date);
52
53 System.out.println("编码前:"+str_date);
54 //URL 编码
55 str_date = URLEncoder.encode(str_date, "utf-8");
56 System.out.println("编码后:"+str_date);
57
58 cookie.setValue(str_date);
59
60 // 设置 cookie的存活时间
61 cookie.setMaxAge(60*60);
62 response.addCookie(cookie);
63
64
65 response.getWriter().write("<h1>欢迎回来,您上次访问时间为:"+value+"</h1>");
66
67 break;
68 }
69 }
70 }
71
72 if(cookies == null || cookies.length==0 || flag == false) {
73 // 没有,第一次访问
74
75 //设置cookie 的 value
76 // 获取当前时间的字符串,设置cookie值,发送cookie
77
78 Date date = new Date();
79 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
80 String str_date = sdf.format(date);
81 Cookie cookie = new Cookie("lastTime",str_date);
82
83 // 解决时间里面有特殊字符,使用 URL 编码
84 System.out.println("编码前:"+str_date);
85 //URL 编码
86 str_date = URLEncoder.encode(str_date, "utf-8");
87 System.out.println("编码后:"+str_date);
88
89 cookie.setValue(str_date);
90
91 // 设置 cookie的存活时间
92 cookie.setMaxAge(60*60);
93 response.addCookie(cookie);
94
95 response.getWriter().write("<h1>欢迎您首次访问</h1>");
96 }
97 }
98
99 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
100 this.doPost(request, response);
101 }
102 }
案例二:免输入用户名登录
login.jsp 页面
1 <form action="http://localhost:8080/13_cookie_session/loginServlet" method="get">
2 用户名: <input type="text" name="username" value="${cookie.username.value}"> <br>
3 密码: <input type="password" name="password"> <br>
4 <input type="submit" value="登录">
5 </form>
LoginServlet 程序:
1 @Override
2 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
3 String username = req.getParameter("username");
4 String password = req.getParameter("password");
5 if ("admin".equals(username) && "admin".equals(password)) {
6 //登录 成功
7 Cookie cookie = new Cookie("username", username);
8 cookie.setMaxAge(60 * 60 * 24 * 7);//当前 Cookie 一周内有效
9 resp.addCookie(cookie);
10 System.out.println("登录 成功");
11 } else {
12 // 登录 失败
13 System.out.println("登录 失败");
14 }
15 }