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月前
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
132 36
|
25天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
59 10
|
25天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
44 8
|
25天前
|
JavaScript 搜索推荐 Java
基于SpringBoot+Vue实现的家乡特色推荐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
55 8
|
25天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
64 6
|
25天前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
56 6
|
25天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
40 4
|
25天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的高校食堂移动预约点餐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
69 3
|
25天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
37 2
|
25天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的冬奥会科普平台设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
43 0

热门文章

最新文章