servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header

简介: 文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。

Cookie —— 客户端机制

Session —— 服务端机制

本篇博客主在用servlet和SpringBoot两种方式分别获取Session和Cookie,用来比较记忆与分析

1、cookie和Session以及Header知识点

(注:若完全不懂Cookie、Session以及Header是什么,必须去系统地学习一下,不要只靠着本篇博客)

cookie:

但以上只是客户端机制,此时在服务器这边就需要记录“令牌”信息,以及令牌对应的用户信息,这个就是Session机制所做的工作

Session:

Session就是 会话 的意思

服务器同一时刻收到的请求是很多的,服务器需要清楚的区分每个请求是属于哪个用户,也就属于哪个会话,就需要在服务器这边记录每个会话以及与用户的信息的对应关系

Session是服务器为了保存用户信息而创建的一个特殊的对象

Session中的值也保存在客户端的cookie中

Header:

Header即Http请求头(标头)

    HTTP标头(Header)是HTTP请求和响应中的一部分,用于传输与请求或响应相关的元数据信息。HTTP标头包含一系列键值对(名称-值对),用于传递与消息内容、处理、身份验证、缓存控制、内容类型等相关的信息。HTTP标头通常分为请求头(Request Headers)和响应头(Response Headers)两大类。

HTTP标头的一些常见用途包括:

  1. 身份验证:HTTP标头可以包含用于认证用户身份的信息,例如Authorization标头用于传递身份验证凭证。

  2. 内容类型Content-Type标头用于指定响应内容的MIME类型,帮助客户端正确解释响应的内容。

  3. 内容长度Content-Length标头指示响应内容的长度,以字节为单位。

  4. 缓存控制Cache-Control标头用于定义缓存策略,控制响应内容的缓存和过期行为。

  5. 跳转与重定向Location标头用于指定重定向的目标URL,Referer标头包含引导请求的URL。

  6. 用户代理信息User-Agent标头用于标识发送请求的用户代理(通常是浏览器或应用程序)的信息。

  7. 接受语言和内容编码Accept-LanguageAccept-Encoding标头允许客户端指定其首选的语言和内容编码。

  8. 跨域资源共享(CORS)Access-Control-Allow-Origin和其他相关标头用于支持跨域请求。

  9. 安全性X-Frame-OptionsStrict-Transport-Security等标头用于增强安全性。

  10. 自定义标头:开发人员可以定义自己的自定义HTTP标头以传递额外的信息。

    HTTP标头允许HTTP协议具有灵活性和可扩展性,以便在通信中传递各种元数据和指令。不同的HTTP请求和响应都可以包含不同的标头,以满足其特定的需求。这些标头对于Web开发和网络通信中非常重要,因为它们允许客户端和服务器之间进行有效的信息交换和控制。

2、设置/获取 Cookie

设置cookie——直接在浏览器中设置

点击检查后在如图位置设置Cookie

后端获取Cookie

servlet版本:(更常用)

    @RequestMapping("/getCookie")
    public String getCookie(HttpServletRequest request){
        // 拿到cookie
        Cookie[] cookies = request.getCookies();
//        for(Cookie cookie : cookies){
//            System.out.println(cookie.getName()+":"+cookie.getValue());
//        }
        // lam表达式,和上面循环意思一样
        if (cookies != null){
            // cookies为null时,会报空指针的异常,所以判断
            Arrays.stream(cookies).forEach(cookie -> {
                System.out.println(cookie.getName()+":"+cookie.getValue());
            });
        }
        return "获取cookie成功";
    }

Spring版本:

    // SpingBoot获取cookie
    @RequestMapping("/getCookie2")
    public String getCookie2(@CookieValue String userId,@CookieValue String goodId){
        return "cookie存取的值userId:" + userId + ",gooId:" + goodId;
    }

注:使用注解的方式只能一个一个的去拿

总结:最常用的是servlet版本,因为Spring版本只能一个一个的取值,servlet可以直接获取所有cookie

3、设置/获取Session

设置session

    @RequestMapping("/setSession")
    public String setSession(HttpServletRequest request){
        HttpSession session = request.getSession();
        session.setAttribute("userId", "6_6_6");
        return "success";
    }

servlet版本获取session:

    @RequestMapping("/getSession")
    public String getSession(HttpServletRequest request){
        // false: 如果没有session,会创建一个session
        HttpSession session = request.getSession(false);
        if(session != null){
            String userId = (String) session.getAttribute("userId");
            return "登录用户:"+userId;
        }
        return "session 为空";
    }

Spring方式获取Session:

    @RequestMapping("/getSession2")
    public String getSession2(@SessionAttribute(required = false) String userId){
        return "userId:" + userId;
    }

注:使用注解的方式只能一个一个的去拿

使用HttpSession内置对象获取Session

    @RequestMapping("/getSession3")
    public String getSession3(HttpSession session){
            String userId = (String) session.getAttribute("userId");
            return "登录用户:"+userId;
    }

注:这种内置对象的方式若没有获取到Session,即Session为空的情况下会报错

总结:servlet方式都较为常用

4、设置/获取Header

设置响应的Header:

    @ResponseBody
    @RequestMapping(value = "/r1",produces = "application/json;charset=utf-8")
//    @RequestMapping(value = "/r1")
    public String r1(HttpServletResponse response){
        //设置header
        response.setHeader("myhead","myhead");
        return "{'OK':1}";
    }

servlet方式获取Header:

    @RequestMapping("/getHeader")
    public String getHeader(HttpServletRequest request){
        String userAgent = request.getHeader("User-Agent");
        return "userAgent:" + userAgent;
    }

Spring方式获取Header:

    @RequestMapping("/getHeader2")
    public String getHeader2(@RequestHeader("User-Agent") String userAgent){
        return "userAgent:" + userAgent;
    }
目录
相关文章
|
1月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
156 1
|
2月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
210 7
|
2月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
270 70
|
1月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
149 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
10天前
|
机器学习/深度学习 数据采集 人机交互
springboot+redis互联网医院智能导诊系统源码,基于医疗大模型、知识图谱、人机交互方式实现
智能导诊系统基于医疗大模型、知识图谱与人机交互技术,解决患者“知症不知病”“挂错号”等问题。通过多模态交互(语音、文字、图片等)收集病情信息,结合医学知识图谱和深度推理,实现精准的科室推荐和分级诊疗引导。系统支持基于规则模板和数据模型两种开发原理:前者依赖人工设定症状-科室规则,后者通过机器学习或深度学习分析问诊数据。其特点包括快速病情收集、智能病症关联推理、最佳就医推荐、分级导流以及与院内平台联动,提升患者就诊效率和服务体验。技术架构采用 SpringBoot+Redis+MyBatis Plus+MySQL+RocketMQ,确保高效稳定运行。
39 0
|
3月前
|
小程序 Java 关系型数据库
weixin117新闻资讯系统设计+springboot(文档+源码)_kaic
本文介绍了一款基于微信小程序的新闻资讯系统,涵盖其开发全过程。该系统采用Java的SSM框架进行后台管理开发,使用MySQL作为本地数据库,并借助微信开发者工具确保稳定性。管理员可通过个人中心、用户管理等功能模块实现高效管理,而用户则能注册登录并查看新闻与视频内容。系统设计注重可行性分析(技术、经济、操作),强调安全性与数据完整性,界面简洁易用,功能全面,极大提升了信息管理效率及用户体验。关键词包括基于微信小程序的新闻资讯系统、SSM框架和MYSQL数据库。
|
4月前
|
小程序 JavaScript Java
基于SpringBoot的智慧停车场微信小程序源码分享
智慧停车场微信小程序主要包含管理端和小程序端。管理端包括停车场管理,公告信息管理,用户信息管理,预定信息管理,用户反馈管理等功能。小程序端包括登录注册,预约停车位,停车导航,停车缴费,用户信息,车辆信息,钱包充值,意见反馈等功能。
189 5
基于SpringBoot的智慧停车场微信小程序源码分享
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
5月前
|
JavaScript 搜索推荐 Java
基于SpringBoot+Vue实现的家乡特色推荐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!