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


    目录

    • ?? 个人主页:

    • **?? 版权:**本文由【】原创、在CSDN首发、需要转载请联系博主

    • ?? 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦

    • ??人必有所执,方能有所成!

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

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

    1.1:需求&分析

    1.2:代码实现

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

    2.1:需求&分析

    2.2:代码


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

    1.1:需求&分析

    首先分析一波:

    关键点:

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

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

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

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

    1.2:代码实现

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

    HomeworkServlet

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

    userLogin.jsp

    <%
        //获取cookie中保存的用户名
        //1、获取所有cookie
        Cookie[] arr = request.getCookies();
        String username = null;
        //2、寻找保存用户名的cookie
        if(arr!=null){
            for (Cookie c : arr) {
                if(c.getName().equals("rememberUsername")){
                    //3、把用户名取出来
                    username = c.getValue();
                    break;
                }
            }
        }
        //4、对URL编码进行解码操作
        if(username!=null){
            username = URLDecoder.decode(username,"utf-8");
        }
    %>
    
    
    用户名:"/> 密码: checked="checked" <% } %> />记住用户名
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    小结:

    回显:html特性: 文本框 value

    复选框/单选框 checked=“checked”

    文本域:内容体

    选择框:selected=“selected”

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

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    初识腾讯云
    【nosql】redis之高可用(主从复制、哨兵、集群)搭建
    基于matlab/simulink永磁直驱风力发电低电压穿越控制仿真模型
    金仓数据库 KingbaseES 插件force_view
    如何在Spring Boot框架中打印响应的日志?
    高精度数字电容传感芯片-MDC04
    LinkedHashMap与LRU缓存
    插松枝(pta)
    STM32——STM32F103时钟解析(正点原子资料+HAL库代码分析)
    matlab 计算机载点云的密度
  • 原文地址:https://blog.csdn.net/web15286201346/article/details/126080473