Spring MVC入门(4)
请求
获取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;}
运行结果:

相关文章:
Spring MVC入门(4)
请求 获取Cookie/Session 获取Cookie 传统方式: RequestMapping("/m11")public String method11(HttpServletRequest request, HttpServletResponse response) {//获取所有Cookie信息Cookie[] cookies request.getCookies();//打印Cookie信息StringBuilder build…...
RuoYi-Vue-Plus(基础知识点jackson、mybatisplus、redis)
一、JacksonConfig 全局序列化反序列化配置 1.1yml中配置 #时区 spring.jackson.time-zoneGMT8 #日期格式 spring.jackson.date-formatyyyy-MM-dd HH:mm:ss #默认转json的属性,这里设置为非空才转json spring.jackson.default-property-inclusionnon_null #设置属性…...
使用verillog编写KMP字符串匹配算法
设计思路如下: 定义模块的输入输出信号:包括时钟信号clk、复位信号rst、模式串pattern、文本串text以及输出信号match。定义所需寄存器和变量:使用寄存器来存储状态机的状态以及其他控制变量,如模式串数组P、失配函数数组F、模式串位置p_index、文本串位置t_index等。在时钟…...
《每天十分钟》-红宝书第4版-对象、类与面向对象编程(五)
对象迭代 在 JavaScript 有史以来的大部分时间内,迭代对象属性都是一个难题。ECMAScript 2017 新增了两个静态方法,用于将对象内容转换为序列化的——更重要的是可迭代的——格式。这两个静态方法Object.values()和 Object.entries()接收一个对象&#…...
华为ensp中rip动态路由协议原理及配置命令(详解)
CSDN 成就一亿技术人! 作者主页:点击! ENSP专栏:点击! CSDN 成就一亿技术人! ————前言————— RIP(Routing Information Protocol,路由信息协议)是一种距离矢…...
学习要不畏难
我突然发现,畏难心是阻碍我成长的最大敌人。事未难,心先难,心比事都难,是我最大的毛病。然而一念由心生,心不难时,则真难事也不再难。很多那些自认为很难的事,硬着头皮做下来的时候,…...
mysql迁移达梦数据库 Java踩坑合集
达梦数据库踩坑合集 文章目录 安装达梦设置大小写不敏感Spring boot引入达梦驱动(两种方式)将jar包打入本地maven仓库使用国内maven仓库(阿里云镜像) 达梦驱动yml配置springboot mybatis-plus整合达梦,如何避免指定数据库名&…...
arm 解决Rk1126 画框颜色变色问题(RGB转NV12)
在Rv1126上直接对Nv12图像进行绘制时,颜色是灰色。故将Nv12转BGR后绘制图像,绘制完成后转成Nv12,BGR的图像颜色是正常的,但是NV12的图像颜色未画全,如图: 1.排查发现是RGB转NV12的函数出现问题,…...
113 链接集10--ctrl+左键单击多选
1.ctrl左键单击多选,单击单选 精简代码 <div class"model-list"><divmousedown.prevent"handleClick(item, $event)"class"model-list-item"v-for"item in modelList":key"item.id":class"{ model…...
详解JavaScript中this指向
this 原理 this 是一个指针型变量,它指向当前函数的运行环境。 1.内存的数据结构 var obj { foo: 5 };2.函数 var obj { foo: function () {} };引擎会将函数单独保存在内存中,然后再将函数的地址赋值给foo属性的value属性。 由于函数是一个单独的…...
c语言之在函数中传递指针
c语言中定义一个函数,如果说是形参一个数组,这个数组在编译后会变成一个指针变量 比如下面的代码例子 #include<stdio.h> void ff(char a[]) {a[1]r;a[4]r;printf("%d\n",a); }int main() {char a[]"peogeam";ff(a);printf(…...
vue2 插槽(默认插槽 slot 、具名插槽 v-slot 、作用域插槽 slot-scope -- 插槽传值 )
插槽:用于在子组件的指定位置插入指定内容,类似在电梯里挂的若干广告显示屏,可以给指定的位置传入指定的广告 单插槽(匿名/默认插槽) 父组件中( 此时的 ) <Child><template><p…...
(第79天)单机转 RAC:19C 单机 到 19C RAC
前言 单机转 RAC 分为两种: 同版本迁移:可以使用 RMAN 或者 ADG 方式升级迁移:建议使用数据泵 或者 XTTS 方式升级迁移使用数据泵的方式与 (第72天)数据泵升级:11GR2 到 19C 步骤基本一致,这里不作演示,只演示使用 ADG 来进行同版本迁移。 升级前准备 本次测试尽量按…...
Spring Cloud微服务Actuator和Vue
目录 前言一、引入Actuator依赖二、暴露Actuator端点1. 配置文件2. 监控端点 三、自定义健康检查自定义健康检查类 四、vue前端代码五、监控器的优势六、监控指标的可视化1. Grafana2. Prometheus 七、安全性考虑安全配置示例 八、总结 前言 随着微服务架构的流行,…...
Iterator对象功能学习
package config;import java.util.Iterator; import java.util.Properties; import java.util.Set;/*** 这个类演示了如何使用Properties类来存储和访问键值对。* Properties类继承自Hashtable,因此它可以用来存储键值对数据,且支持同步。*/ public clas…...
Linux的一些基本指令
目录 前言: 1.以指令的形式登录 2.ls指令 语法: 功能: 常用选项: 3.pwd指令 4.cd指令 4.1 绝对路径与相对路径 4.2 cd .与cd ..(注意cd后先空格,然后两个点是连一起的࿰…...
【tips】Git使用指南
文章目录 一、Git介绍1. 什么是Git2.Git对比SVN3.Git安装 二.Git常用命令1. git config2. 初始化本地库3. 工作区、暂存区和版本库4. git add5. git commit6. git reset 与 git revertgit resetgit revert 三. Git 分支1.初识分支2.创建分支3.切换分支4.合并分支5.删除分支 四.…...
【字节序】
字节序 高字节(低字节)高地址(低地址)大端模式(小端模式) 高字节(低字节) 一个16位(双字节)的数据,比如0xAABB,那么高位字节就是0xAA,低位是0xBB …...
数据结构(五)——树森林
5.4 树和森林 5.4.1 树的存储结构 树的存储1:双亲表示法 用数组顺序存储各结点,每个结点中保存数据元素、指向双亲结点(父结点)的“指针” #define MAX_TREE_SIZE 100// 树的结点 typedef struct{ElemType data;int parent; }PTNode;// 树的类型 type…...
vscode配置c/c++调试环境
本文记录win平台使用vscode远程连接ubuntu server服务器下,如何配置c/c调试环境。 过程 1. 服务器配置编译环境 这里的前置条件是vscode已经能够连接到服务器,第一步安装编译构建套件(gcc、g、make、链接器等)和调试器…...
终极指南:如何用「阅读」APP书源一站式畅享海量小说资源
终极指南:如何用「阅读」APP书源一站式畅享海量小说资源 【免费下载链接】Yuedu 📚「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 想要在一个应用中免费阅读起点中文、番茄小说、酷我小说等主流平台的海量小说吗&…...
IndexTTS2 V23情感控制实测:如何用滑块调节喜怒哀乐语音
IndexTTS2 V23情感控制实测:如何用滑块调节喜怒哀乐语音 1. 情感语音合成技术概述 1.1 什么是情感语音合成 情感语音合成(Emotional Text-to-Speech)是语音合成技术的重要分支,它突破了传统TTS系统"机械感"的局限&am…...
Atmosphere-stable功能解析与实践指南:开源Switch自定义固件解决方案
Atmosphere-stable功能解析与实践指南:开源Switch自定义固件解决方案 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 传统Switch破解方案常面临系统稳定性差、原始系统安全风险…...
告别EEPROM!用FRAM FM25W256给你的GD32F303项目做个不掉电的‘记事本’(附SPI配置避坑指南)
告别EEPROM!用FRAM FM25W256给你的GD32F303项目做个不掉电的‘记事本’(附SPI配置避坑指南) 在嵌入式系统开发中,数据存储一直是个让人头疼的问题。想象一下,你花了几个月调试的工业控制器,因为一次意外断电…...
突破抖音直播回放下载限制:5大技术创新与3大实战场景全解密
突破抖音直播回放下载限制:5大技术创新与3大实战场景全解密 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...
如何进行 SEO 网站建设的链接优化
如何进行 SEO 网站建设的链接优化 在当今的数字化时代,搜索引擎优化(SEO)无疑是任何网站建设项目中不可或缺的一部分。尤其是在百度这样的主要搜索引擎上,SEO的重要性更是不言而喻。如何进行 SEO 网站建设的链接优化呢࿱…...
深入理解MUNIT架构:内容编码器与风格编码器的完美结合
深入理解MUNIT架构:内容编码器与风格编码器的完美结合 【免费下载链接】MUNIT Multimodal Unsupervised Image-to-Image Translation 项目地址: https://gitcode.com/gh_mirrors/mu/MUNIT MUNIT(Multimodal Unsupervised Image-to-Image Translat…...
UsbDk:突破Windows USB访问壁垒的开源驱动开发套件
UsbDk:突破Windows USB访问壁垒的开源驱动开发套件 【免费下载链接】UsbDk Usb Drivers Development Kit for Windows 项目地址: https://gitcode.com/gh_mirrors/us/UsbDk 技术背景解析 解构Windows USB访问限制 在Windows操作系统架构中,USB设…...
AirPodsDesktop完整指南:在Windows和Linux上提升AirPods使用体验的终极方案
AirPodsDesktop完整指南:在Windows和Linux上提升AirPods使用体验的终极方案 【免费下载链接】AirPodsDesktop ☄️ AirPods desktop user experience enhancement program, for Windows and Linux (WIP) 项目地址: https://gitcode.com/gh_mirrors/ai/AirPodsDesk…...
保姆级教程:用Vue 3 + Cesium 1.107 加载倾斜摄影模型(从OSGB到3DTiles全流程)
从OSGB到Web三维:Vue 3与Cesium 1.107的倾斜摄影实战指南 当我们需要在网页中展示真实世界的三维场景时,倾斜摄影技术提供了绝佳的解决方案。这种通过航拍获取多角度影像并重建三维模型的技术,已经成为数字孪生、智慧城市等领域的标配。但将专…...

