Cookie在Java中的使用

 更新时间:2021年05月20日 09:19:13   作者:kongsam  
Cookie又称“小甜饼”,类型为“小型文本文件”,指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。由用户客户端计算机暂时或永久保存的信息。本文将讲解Cookie在Java中的使用,感兴趣的朋友可以了解下

什么是Cookie

在现实生活中,当顾客第一次在超市购物,通常服务员会询问是否办理一张会员卡来积分以便日后折扣等福利活动。会员卡会记录顾客的姓名、积分、消费记录等信息,如果顾客要参与超市的福利活动等都需要提供会员卡,服务员在后台刷卡查询即可知道是哪个用户在使用会员卡。

现在将现实生活中的案例中的角色互换一下。

当用户没有在Web服务器登记过用户信息,而使用网站提供的需登录的服务时,服务器会告知浏览器跳转到登陆页面进行用户信息的登记操作,登录完成之后,浏览器向服务器发起一次登陆请求,服务器将用户的信息存储到Cookie中,并响应给浏览器新的Cookie,浏览器得到Cookie之后将它存储到缓存区。

当用户在Web服务器登记过用户信息,而使用网站提供的需登录的服务时,服务器会通过请求中携带的Cookie判断此次请求时哪个用户,并以这个Cookie的信息去查询数据库等操作,完成用户需要的服务。

Cookie的必要

HTTP是无状态协议,意味着服务器不会在两个请求之间保留任何数据(状态)。由于Web服务器要面对很多用户的并发访问,为了提高Web服务器对并发访问的处理能力,在设计HTTP协议时规定Web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任何状态信息,从而减轻服务器端的负载,同时无状态也减小了HTTP请求的开销。

但是在必要的场景,如登陆、购物等都需要保存用户的状态(信息),就不得不用到Cookie。

Cookie如何工作

第一次访问服务器,没有Cookie,向服务器登记新的Cookie。

第二次及以后访问服务器,有Cookie,无需登记新的Cookie。

模拟用户登录

需求分析:

当用户访问homepage.jsp时,判断请求中是否携带username的Cookie,如果不存在就通知浏览器跳转到登录页面进行用户信息的登记。当用户再次访问homepae.jsp时,不会被拦截,可以让用户访问个人主页页面。

编写代码:

个人主页的Servlet

@WebServlet(name = "homepageServlet", urlPatterns = "/homepage")
public class HomePageServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            if (!cookie.getName().equals("username")) {
                // 如果用户是第一次访问个人主页,就通知浏览器跳转到登陆页面进行登录
                resp.sendRedirect(req.getContextPath() + "/login.jsp");
            }
        }
    }

}

用户登录的Servlet

@WebServlet(name = "loginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取http请求参数username
        String username = request.getParameter("username");
        // 设置响应内容的类型
        response.setContentType("text/html;charset=utf-8");
        // 获取Cookie值
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if (!cookie.getName().equals("username")) { // 用户第一次访问
                Cookie userCookie = new Cookie("username", username);
                userCookie.setMaxAge(300);
                response.addCookie(userCookie);
            }
            response.sendRedirect(request.getContextPath() + "/homepage.jsp");
        }
    }

}

打开浏览器,实验一下:

在第一次访问homepage页面时,看到浏览器缓存区并没有名为username的Cookie,只有当登录之后,浏览器缓存区才有了这个Cookie。

以上就是Cookie在Java中的使用的详细内容,更多关于Cookie的使用的资料请关注脚本之家其它相关文章!

相关文章

  • java利用DFA算法实现敏感词过滤功能

    java利用DFA算法实现敏感词过滤功能

    在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和大家分享一下自己的理解。下面这篇文章主要给大家介绍了关于java利用DFA算法实现敏感词过滤功能的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • 通过案例了解静态修饰符static使用场景

    通过案例了解静态修饰符static使用场景

    这篇文章主要介绍了通过案例了解静态修饰符static使用场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • MyBatis处理CLOB/BLOB类型数据以及解决读取问题

    MyBatis处理CLOB/BLOB类型数据以及解决读取问题

    这篇文章主要介绍了MyBatis处理CLOB/BLOB类型数据以及解决读取问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java实现身份证号码验证源码示例分享

    Java实现身份证号码验证源码示例分享

    本篇文章主要介绍了Java实现身份证号码验证源码示例分享,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • java中Swing会奔跑的线程侠

    java中Swing会奔跑的线程侠

    本文通过代码示例给大家详细讲解了java中Swing会奔跑的线程侠这个经典的示例,有兴趣的朋友学习下。
    2018-03-03
  • spring+maven实现邮件发送

    spring+maven实现邮件发送

    这篇文章主要为大家详细介绍了spring+maven实现邮件发送,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Spring依赖注入的三种方式详解

    Spring依赖注入的三种方式详解

    这篇文章主要给大家介绍了三种Spring依赖注入的方式, settter方法注入,构造器注入以及变量(filed) 注入这三种方式,文章通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • java常用工具类 数字工具类

    java常用工具类 数字工具类

    这篇文章主要为大家详细介绍了java常用工具类中的数字工具类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • java 中数组初始化实例详解

    java 中数组初始化实例详解

    这篇文章主要介绍了 本文主要讲数组的初始化方法、可变参数列表以及可变参数列表对函数重载的影响的相关资料,需要的朋友可以参考下
    2017-05-05
  • java连接mysql数据库乱码的解决方法

    java连接mysql数据库乱码的解决方法

    这篇文章主要介绍通过java连接mysql数据库的时候,页面出现乱码,这里简单分享下解决方法, 需要的朋友可以参考下
    2013-05-05

最新评论