案例一:记住用户登录时间案例

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     }

 

posted on 2021-08-19 10:22  格物致知_Tony  阅读(195)  评论(0编辑  收藏  举报