• JavaWeb 案例3— Cookie案例


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

    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     }
  • 相关阅读:
    SpringMVC与Hibernate配置备忘
    Intent在Activity间的传值
    高效的JSON处理_ Jackson
    Ireport+JasperReport制作报表三折线图
    SpringMVC与Ibatis整合开发配置备忘
    Ireport+JasperReport制作报表二JasperReport编译模板
    Android开发之简单计算器
    android平台中解析xml文件:SAX、PULL
    SpringMVC SimpleFormController学习备忘
    java的十个大类
  • 原文地址:https://www.cnblogs.com/niujifei/p/15160490.html
Copyright © 2020-2023  润新知