Spring MVC入门(4)

news2025/5/24 15:58:00

请求

获取Cookie/Session

获取Cookie

传统方式:

    @RequestMapping("/m11")
    public String method11(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.toString();
    }

 Spring MVC是基于Servlet API构建的原始Web框架, 也是在Servlet的基础上实现的.

HttpServletRequest, HttpServletResponse是Servlet提供的两个类, 是Spring MVC方法提供的内置对象.需要时在方法中添加声明即可.

HttpServletRequest对象代表客户端的请求, 当客户端通过HTTP协议访问服务器时, HTTP请求头中的信息都封装在这个对象中, 通过该对象提供的方法, 可以获得客户端请求的所有信息.

HttpServletResponse对象代表服务器的响应. HTTP响应头中的信息都封装在这个对象中,比如向客户端发送的数据, 响应头, 状态码等. 通过该对象提供的方法, 可以获得服务器响应的所有信息.

Spring MVC在这两个对象的基础上提供了封装, 给我们提供了更简单的使用方法.

这时没有设置Cookie, 通过浏览器访问 http://127.0.0.1:8080/param/m11, 得到的cookie为null

让我们设置一下Cookie,再刷新一下网址查看一下:

看一下结果:

从这个例子中, 也可以看出Cookie是可以伪造的, 也就是不安全的, 所以使用Cookie是, 后端需要进行Cookie校验. 

在我们学习的过程中,为了让代码更加简洁,我们会将一些常用的部分封装起来. 在此处也是如此, 由于在获取Cookie的方法中, 有些代码必须需要, 那么Spring就将它们封装起来了.我们可以通过Spring注解的方式以更简单的方式获取到Cookie: 

    @RequestMapping("/m12")
    public String method12(@CookieValue("name") String name) {
        return "name:" + name;
    }

获取Session

Session的存储和获取

Session是服务器的一个机制, 我们需要存储, 然后才能获取.

Session也是基于HttpServletRequest来进行存储和获取的. 

Session的存储

    @RequestMapping("/m13")
    public String method13(HttpServletRequest request) {
        //获取Session对象
        HttpSession session = request.getSession();
        if(session != null) {
            session.setAttribute("username", "java");
        }
        return "session 存储成功";
    }

运行结果:

这个代码中是看不到SessionId这个概念的. getSession操作内部提取到请求中的Cookie里的SessionId, 然后根据SessionId获取到对应的Session对象, Session对象用HttpSession描述 

获取Session有两种方式:

HttpSession getSession(boolean create);



HttpSession getSession(); 

HttpSession getSession(boolean create): 参数如果为true, 则当不存在会话的时候新建会话; 参数如果为false, 则当不存在会话的时候返回null.

HttpSession getSession(): 和getSession(true)含义一样, 默认值是true.

void setAttribute(String name, Object value):指定的名称绑定一个对象到该对话

Session读取

读取Session可以使用HttpServletRequest

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

Object getAttribute(String name):返回在该session会话中具有指定名称的对象, 如果没有指定名称的对象, 返回null. 

运行结果(注意需要先设置Session, 否则这里的返回就是null了):

  简洁获取Session(1)

    @RequestMapping("/m15")
    public String sess2(@SessionAttribute(value = "username", required = false) String username) {
        return "username:" + username;
    }

简洁获取Session(2)

通过Spring MVC内置对象HttpSession来获取

    @RequestMapping("/m16")
    public String sess3(HttpSession session) {
        String username = (String)session.getAttribute("username");
        return "username" + username;
    }

HttpSession session = request.getSession();

Session不存在的话, 会自动进行创建. 

获取Header

获取Header也是从HttpServletRequest中获取.

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

使用HttpServletRequest提供的getHeader方法来获取, 参数对应HTTP请求报头的"Key". 

简洁获取Header

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

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1528514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据主要技术

1.大数据文件系统: GFS(谷歌的分布式文件系统) HDFS(hadoop distrubuted file system)分布式文件系统,衍生自GFS 2.大数据平台 MapReduce :谷歌的大数据处理平台,服务于搜索 Hadoop&#…

C#混淆心得

C#混淆心得 近期遇到混淆C#代码的需求,在网上找了很多办法,在此记录一下。 混淆的本质就是让代码变丑,让别人看不懂。 为什么要混淆: 1.保护核心代码 可以在一定程度上避免别人偷代码,从而保护重要的部分&#xf…

蓝桥杯单片机快速开发笔记——超声波测距

一、原理分析 超声波测距是一种常见的测距方法,其原理是利用超声波在空气中传播的速度恒定且较快的特性,通过发送超声波信号并接收回波,计算出物体与传感器之间的距离。以下是超声波测距的原理和应用: 原理: 发送超声…

Linux安装Mysql5.7数据库

一、前置条件 系统版本:Linux CentOS 7.5 MySQL版本:mysql5.7.31 二、操作步骤 2.1、关闭mysql服务 service mysqld stop 提示使用命令:systemctl stop mysqld.service 2.2、grep查找已安装的mysql服务 rpm -qa | grep -i mysql 2.3、卸载…

机器学习(1)机器学习的概念与应用领域

文章目录 一、前提二、机器学习的概念与应用领域1.认识①亚瑟•塞缪尔的定义②汤姆米切尔的定义 2.相关术语数据术语训练模型术语获得模型后术语 3.应用领域语音识别计算机视觉自然语言处理①自然语言分析②自然语言生成 大数据分析 一、前提 Python语言具有数量庞大且功能相对…

记录一次爬虫接单项目【采集国际淘宝数据】

1.背景 前几天接了一个爬虫的单子,上周六已经完成这个单子,也收到了酬劳(数目还不错,哈哈哈,小喜了一下)。这个项目大概我用了两天写完了(空闲时间写的)。 2.介绍 大概要采集的数据…

Flutter-仿淘宝京东录音识别图标效果

效果 需求 弹起键盘,录制按钮紧挨着输入框收起键盘,录制按钮回到初始位置 实现 第一步:监听键盘弹起并获取键盘高度第二步:根据键盘高度,录制按钮高度计算偏移高度,并动画移动第三步:键盘收起…

深度学习_卷积

卷积 卷积(Convolution)是数学和计算机科学中的一个重要概念,特别在信号处理和图像处理中应用广泛。在信号处理领域,卷积是两个函数之间的一种数学操作,它表示两个函数的重叠部分的积分量。 在图像处理中&#xff0c…

KKVIEW远程: TODESK退出了还能远程吗

Todesk退出了还能远程吗 当我们谈论Todesk或其他远程桌面软件时,一个经常被提及的问题是:当我退出Todesk后,是否仍然可以远程访问我的计算机?为了回答这个问题,我们首先需要了解Todesk的工作原理和远程访问的基本条件…

WhatsApp商业推广有哪些推广技巧?

在现代化商业,与用户创造紧密、良好的互动体验,建立强大的品牌形象以及找到最佳的推广途径,变得尤为重要。而WhatsApp作为全球使用最广泛的即时通讯应用之一,成为无数企业选择优选的推广平台。那么,在WhatsApp商业推广…

图书推荐|西门子S7-1200 PLC编程与应用实例

一线资深工程师的全彩版PLC实战教程,软硬件及编程全方位详解(配视频教学) 本书内容 《西门子S7-1200 PLC编程与应用实例》对西门子S7-1200 PLC的硬件和编程软件的功能进行详细讲解,内容包括PLC编程基础、博途TIA软件入门、指令介…

使用OCC进行切割操作

OCC中切割操作以一个平面作为切割面,对物体进行切割操作 //要操作的图形 TopoDS_Shape shape getHanleShape(); //构造切割面 TopoDS_Shape faceShape getSplitterFace(); //切割操作 BOPAlgo_Splitter splitter; splitter.AddArgument(shape); splitter.AddTool(…

13.Python从入门到精通—Python 集合操作与方法概览

13.Python从入门到精通—Python 集合操作与方法概览 Python 集合集合的基本操作1、添加元素2、移除元素3、计算集合元素个数4、清空集合5、判断元素是否在集合中存在 集合内置方法完整列表 Python 集合 在Python中,集合是一种无序、不重复的数据类型。集合通常用于…

unicloud快速上手,unicloud项目创建以及项目创建注意事项

uniCloud快速上手 本项目地址https://gitee.com/qayrup/unicloud-demo 创建unicloud项目 新建一个uni项目,并选择启用unicloud,选择阿里云或腾讯云 阿里云和支付宝云都支持一个月免费的云,如果只想体验啥的,可以选择这两个, 但是需要注意,支付宝云需要配置跨域,否则很多云函…

0基础学习VR全景平台篇第145篇:图层控件功能

大家好,欢迎观看蛙色VR官方——后台使用系列课程!这期,我们将为大家介绍如何使用图层控件功能。 一.如何使用图层控件功能? 进入作品编辑页面,点击左边的控件后就可以在右边进行相应设置。 二.图层控件有哪些功能&am…

C++有关内存的那些事

个人主页:PingdiGuo_guo 收录转栏:C干货专栏 前言 本篇博客是讲解关于C内存的一些知识点的。 文章目录 前言 1.内存函数 1.1memcpy函数 1.2memmove函数 1.3 memset函数 2.各数据类型占用 2.1bool类型 2.2char类型 2.3short、int、long类型及整数…

英语广场杂志英语广场杂志社英语广场编辑部2024年第3期目录

英语翻译理论与实践 浅析钱钟书“化境论”与文言文英译的适配度 冯睿;姚锦宁;李佳彧; 3-6《英语广场》投稿:cn7kantougao163.com 目的论视角下《写作、阅读和演讲的艺术》的翻译分析报告 张俊怡; 7-10 新加坡籍译者温宏文翻译行为研究 周梦; 11-14 …

CVE-2024-24112 XMall后台管理系统 SQL 注入漏洞分析

------作者本科毕业设计项目 基于 Spring Boot Vue 开发而成...... [Affected Component] /item/list /item/listSearch /sys/log /order/list /member/list (need time-based blind injection) /member/list/remove 项目下载地址 Exrick/xmall: 基于SOA架构的分布式…

百年难遇:3款良心好用的国产软件,常被误以为是外国佬开发

许多出色的国产软件,但由于某些特殊原因,我们常常错过了它们。 今天,笔者将向大家推荐三款电脑必备的软件,每一款都堪称神器。 Teamind Teamind是一款功能强大的在线白板工具,支持多人协作,成为众多居家…

收银软件多少钱一套?亿发全面解析超市收银系统软件价位

当超市经营达到一定规模时,商户通常会选择配置收银系统软件,以提升收银效率和为顾客提供更完善的购物体验。然而,人们常问:收银系统软件一套需要多少钱?安装一个收银系统又需要多少费用呢?了解收银系统软件…