【Spring】获取cookie,session,header(3)

本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。

博客涉及框架的重要知识点,根据序号学习即可。

目录

[本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。](#本系列共涉及4个框架:Sping,SpringBoot,Spring MVC,Mybatis。)

博客涉及框架的重要知识点,根据序号学习即可。

1、获取cookie

1.1传统版本【使用HttpServletRequest】

1.2简洁版本【使用注解@CookieValue】

2、获取session

2.1传统版本【使用HttpServletRequest】

2.2简洁版本【使用注解@SessionAttribute】

2.3简洁版本【使用HttpSession】

3、获取header

3.1传统版本【使用HttpServletRequest】

3.2简洁版本【使用注解@RequestHeader】

最后:无论使用传统的HttpServletRequest获取,还是使用注解获取,大差不差,关键要懂其原理,当然更推荐使用注解的方式,因为更方便(哈哈哈哈哈哈代码少!!!)

1、获取cookie

1.1传统版本【使用HttpServletRequest】

    @RequestMapping("/m11")
    public String m11(HttpServletRequest request, HttpServletResponse response){
        //获取所有的cookie信息
        Cookie[] cookies=request.getCookies();
        //打印cookie信息
        StringBuilder builder=new StringBuilder();
        if(cookies!=null){
            for(Cookie ck:cookies){
                builder.append(ck.getName()+":"+ck.getValue());
            }
        }

        return "Cookie信息:"+builder;
    }

运行结果:

没有获取到cookie是因为没有设置,下图展示如何自定义cookie【 在Application中手动添加cookie,其实这是不安全的,后端需要进行cookie的校验】

1.2简洁版本【使用注解@CookieValue】

 @RequestMapping("/m12")
    public String m12(@CookieValue("zhangsan") String name){
        //简洁版获取cookie,使用注解
        return "获取到的name:"+name;
    }

注意区分这里的zhangsan 和name ,搞懂为啥不是第一个cookie,而是以zhangsan为name的cookie。因为@CookieValue

2、获取session

2.1传统版本【使用HttpServletRequest】

    @RequestMapping("/m13")
    public String m13(HttpServletRequest request){
        //session的存储
        //获取session对象
        HttpSession session =request.getSession();//与getSession(true)一样,默认值为true
        if(session!=null){
            session.setAttribute("u","123");
        }
        return "Session存储成功";
    }


    @RequestMapping("/m14")
    public String m14(HttpServletRequest request){
        //session的读取
        //如果session不存在,不会自动创建session
        HttpSession session=request.getSession(false);
        String username=null;
        if(session!=null&&session.getAttribute("u")!=null){
            username=(String) session.getAttribute("u");
        }
        return "username:"+username;
    }

session是存放在服务器中的,不方便演示,所以我们先存储session,在读取

2.2简洁版本【使用注解@SessionAttribute】

    @RequestMapping("/m15")
    public String m15(@SessionAttribute(value = "u",required = false)String username){
        //获取session简洁版【1】
        return "username:"+username;
    }

2.3简洁版本【使用HttpSession】

    @RequestMapping("/m16")
    public String m16(HttpSession session){
        //获取session简洁版【2】
        //通过Spring MVC内置队象HttpSession来获取
        String username=(String)session.getAttribute("u");
        return "username:"+username;
    }

3、获取header

3.1传统版本【使用HttpServletRequest】

    @RequestMapping("/m17")
    public String m17(HttpServletRequest request){
        //传统获取header
        String userAgent=request.getHeader("User-Agent");

        return "userAgent:"+userAgent;
    }

3.2简洁版本【使用注解@RequestHeader】

    @RequestMapping("/m18")
    public String m18(@RequestHeader("User-Agent")String userAgent){
        //简洁版获取header
        return "userAgent:"+userAgent;
    }

最后:无论使用传统的HttpServletRequest获取,还是使用注解获取,大差不差,关键要懂其原理,当然更推荐使用注解的方式,因为更方便(哈哈哈哈哈哈代码少!!!)

相关推荐
engchina几秒前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j
尘浮生4 分钟前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
威哥爱编程4 分钟前
SQL Server 数据太多如何优化
数据库·sql·sqlserver
小华同学ai6 分钟前
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
数据库·信息可视化·开源
Acrelhuang28 分钟前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
十叶知秋1 小时前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
瓜牛_gn3 小时前
mysql特性
数据库·mysql
奶糖趣多多4 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt5 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
paopaokaka_luck6 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计