• WEB核心【记录网站登录人数,记录用户名案例】Cookie技术实现


    目录

    • 💂 个人主页: 爱吃豆的土豆
    • 🤟 版权: 本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主
    • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
    • 🏆人必有所执,方能有所成!

    • 🐋希望大家多多支持😘一起进步呀!

    案例1:记录网站登录人数

    1.1:需求&分析

    1.2:代码实现

    案例2:记录用户名案例【进阶】

    2.1:需求&分析

    2.2:代码


    案例1:记录网站登录人数

    1.1:需求&分析

    首先分析一波:

    关键点:

    因为request作用域太小,不能使用request传递

    因为ServletContext作用域太大,使得多个用户的访问时间会相互覆盖,导致业务混乱,也不能用。

    使用cookie,因为cookie针对的是某个浏览器的会话,一个浏览器cookie保存在该浏览器上,不同用户之间不会有影响。

     流程图:(配个图详细理解一波)

     

    1.2:代码实现

    1. @WebServlet({"/d1"})
    2. public class Demo1Servlet extends BaseServlet {
    3. public void visit() throws IOException {
    4. PrintWriter writer = getResponse().getWriter();
    5. //一、接收请求中的cookie,展示用户上次访问时间
    6. //1.1、获取浏览器发送的所有cookie
    7. Cookie[] arr = getRequest().getCookies();
    8. //1.2、查找是否存在lastVisitTime的cookie
    9. //1.2.1、设置一个cookie类型的开关 默认为null,不存在
    10. Cookie lastVisitTime = null;
    11. //1.2.2、只要数组arr不为null,遍历arr,查找名为lastVisitTime的cookie
    12. if(arr!=null){
    13. for (Cookie cookie : arr) {
    14. if(cookie.getName().equals("lastVisitTime")){
    15. //1.2.3、如果找到了,把他赋值给开关
    16. lastVisitTime = cookie;
    17. break;
    18. }
    19. }
    20. }
    21. //1.3、如果存在该cookie,展示上次访问时间
    22. if(lastVisitTime!=null){
    23. writer.write("上次访问时间是:"+new Date(Long.parseLong(lastVisitTime.getValue())).toLocaleString());
    24. }else{
    25. //1.4、如果不存在该cookie,展示:第一次访问
    26. writer.write("您是第一次访问!");
    27. }
    28. //二、记录用户当前的访问时间,写出到响应头
    29. //2.1、获取当前时间的毫秒值
    30. long t = System.currentTimeMillis();
    31. //2.2、封装为cookie对象
    32. Cookie c = new Cookie("lastVisitTime", t + "");
    33. //2.3、设置cookie保存7天
    34. c.setMaxAge(60*60*24*7);
    35. //2.4、写出响应头
    36. getResponse().addCookie(c);
    37. }
    38. }

    小结:

    request.getCookies();//如果cookie都不存在,Null

    Cookie的value是字符串类型,其他类型必须先转字符串才能保存,中文进行URL编码

    案例2:记录用户名案例【进阶】

    效果图:记住用户名效果图

     效果图:不记住用户名效果图

     

     

    2.1:需求&分析

    分析:

    关键点:

    1. request.getParameter("");

    2. cookie技术。

    3. URL编码

    4. 重定向: return "redirect:/userLogin.jsp";

    5. <% %>

    6. cookie   setMaxAge(0);

    流程图:

     

    2.2:代码

    userLogin.jsp

    1. <form method="post" action="/day11_1/hw">
    2. <input type="hidden" name="method" value="login"/>
    3. 用户名:<input type="text" name="username" />
    4. 密码:<input type="password" name="password"/>
    5. <input type="checkbox" name="remember" value="yes"/>记住用户名
    6. <input type="submit" value="登录"/>
    7. </form>

    HomeworkServlet

    1. @WebServlet({"/hw"})
    2. public class HomeworkServlet extends BaseServlet {
    3. public String login() throws UnsupportedEncodingException {
    4. //1、接收参数
    5. HttpServletRequest request = getRequest();
    6. String username = request.getParameter("username");
    7. String remember = request.getParameter("remember");
    8. //2、判断remember,判断是否需要记录用户名
    9. Cookie rememberUsername = new Cookie("rememberUsername","");
    10. if(remember!=null){
    11. //3、如果remember不为null,记录用户名
    12. rememberUsername.setValue(URLEncoder.encode(username,"utf-8"));
    13. rememberUsername.setMaxAge(60*60*24*7);
    14. }else{
    15. //4、如果remember为null,删除已记录的用户名
    16. rememberUsername.setMaxAge(0);
    17. }
    18. //5、将用户名cookie写出响应头
    19. getResponse().addCookie(rememberUsername);
    20. //6、重定向回userLogin.jsp
    21. return "redirect:/userLogin.jsp";
    22. }
    23. }

    userLogin.jsp

    1. <%
    2. //获取cookie中保存的用户名
    3. //1、获取所有cookie
    4. Cookie[] arr = request.getCookies();
    5. String username = null;
    6. //2、寻找保存用户名的cookie
    7. if(arr!=null){
    8. for (Cookie c : arr) {
    9. if(c.getName().equals("rememberUsername")){
    10. //3、把用户名取出来
    11. username = c.getValue();
    12. break;
    13. }
    14. }
    15. }
    16. //4、对URL编码进行解码操作
    17. if(username!=null){
    18. username = URLDecoder.decode(username,"utf-8");
    19. }
    20. %>
    21. <form method="post" action="/day11_1/hw">
    22. <input type="hidden" name="method" value="login"/>
    23. 用户名:<input type="text" name="username" value="<%=username==null?"":username%>"/>
    24. 密码:<input type="password" name="password"/>
    25. <input type="checkbox" name="remember" value="yes"
    26. <%
    27. if(username!=null){
    28. //说明用户肯定勾选了记录用户名,该复选框直接回显勾选即可
    29. %>
    30. checked="checked"
    31. <%
    32. }
    33. %>
    34. />记住用户名
    35. <input type="submit" value="登录"/>
    36. </form>

    小结:

    回显:html特性: 文本框 value

    复选框/单选框  checked="checked"

    文本域:内容体

    选择框:selected="selected"

    嵌套java脚本,进行if判断,对html特性进行回显。

  • 相关阅读:
    C/C++:双向队列的实现
    C++ - 完美语义(右值引用的中篇) - lambda表达式
    1808_ChibiOS基本的架构介绍
    IO多路复用--select,poll,epoll
    pta天梯赛训练 7-10 抢红包(25分)
    antDesign Form表单校验(react)
    LuatOS-SOC接口文档(air780E)--mcu - 封装mcu一些特殊操作
    红细胞膜包覆葫芦素B纳米结构脂质载体RBC-CuB-NLC /红细胞膜脂三尖杉酯碱脂质体
    GitLab的使用
    23. Opencv——图像拼接项目
  • 原文地址:https://blog.csdn.net/m0_64550837/article/details/125423318