文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Cookie在Java中的使用

2024-04-02 19:55

关注

什么是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的使用的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯