当前位置: 首页 > news >正文

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的函数出现问题&#xff0c…...

113 链接集10--ctrl+左键单击多选

1.ctrl左键单击多选&#xff0c;单击单选 精简代码 <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 是一个指针型变量&#xff0c;它指向当前函数的运行环境。 1.内存的数据结构 var obj { foo: 5 };2.函数 var obj { foo: function () {} };引擎会将函数单独保存在内存中&#xff0c;然后再将函数的地址赋值给foo属性的value属性。 由于函数是一个单独的…...

c语言之在函数中传递指针

c语言中定义一个函数&#xff0c;如果说是形参一个数组&#xff0c;这个数组在编译后会变成一个指针变量 比如下面的代码例子 #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 -- 插槽传值 )

插槽&#xff1a;用于在子组件的指定位置插入指定内容&#xff0c;类似在电梯里挂的若干广告显示屏&#xff0c;可以给指定的位置传入指定的广告 单插槽&#xff08;匿名/默认插槽&#xff09; 父组件中&#xff08; 此时的 &#xff09; <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 七、安全性考虑安全配置示例 八、总结 前言 随着微服务架构的流行&#xff0c;…...

Iterator对象功能学习

package config;import java.util.Iterator; import java.util.Properties; import java.util.Set;/*** 这个类演示了如何使用Properties类来存储和访问键值对。* Properties类继承自Hashtable&#xff0c;因此它可以用来存储键值对数据&#xff0c;且支持同步。*/ public clas…...

Linux的一些基本指令

​​​​​​​ 目录 前言&#xff1a; 1.以指令的形式登录 2.ls指令 语法&#xff1a; 功能&#xff1a; 常用选项&#xff1a; 3.pwd指令 4.cd指令 4.1 绝对路径与相对路径 4.2 cd .与cd ..&#xff08;注意cd后先空格&#xff0c;然后两个点是连一起的&#xff0…...

【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.删除分支 四.…...

【字节序】

字节序 高字节&#xff08;低字节&#xff09;高地址&#xff08;低地址&#xff09;大端模式&#xff08;小端模式&#xff09; 高字节&#xff08;低字节&#xff09; 一个16位(双字节)的数据&#xff0c;比如0xAABB&#xff0c;那么高位字节就是0xAA&#xff0c;低位是0xBB …...

数据结构(五)——树森林

5.4 树和森林 5.4.1 树的存储结构 树的存储1&#xff1a;双亲表示法 用数组顺序存储各结点&#xff0c;每个结点中保存数据元素、指向双亲结点(父结点)的“指针” #define MAX_TREE_SIZE 100// 树的结点 typedef struct{ElemType data;int parent; }PTNode;// 树的类型 type…...

vscode配置c/c++调试环境

本文记录win平台使用vscode远程连接ubuntu server服务器下&#xff0c;如何配置c/c调试环境。 过程 1. 服务器配置编译环境 这里的前置条件是vscode已经能够连接到服务器&#xff0c;第一步安装编译构建套件&#xff08;gcc、g、make、链接器等&#xff09;和调试器&#xf…...

终极指南:如何用「阅读」APP书源一站式畅享海量小说资源

终极指南&#xff1a;如何用「阅读」APP书源一站式畅享海量小说资源 【免费下载链接】Yuedu &#x1f4da;「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 想要在一个应用中免费阅读起点中文、番茄小说、酷我小说等主流平台的海量小说吗&…...

IndexTTS2 V23情感控制实测:如何用滑块调节喜怒哀乐语音

IndexTTS2 V23情感控制实测&#xff1a;如何用滑块调节喜怒哀乐语音 1. 情感语音合成技术概述 1.1 什么是情感语音合成 情感语音合成&#xff08;Emotional Text-to-Speech&#xff09;是语音合成技术的重要分支&#xff0c;它突破了传统TTS系统"机械感"的局限&am…...

Atmosphere-stable功能解析与实践指南:开源Switch自定义固件解决方案

Atmosphere-stable功能解析与实践指南&#xff1a;开源Switch自定义固件解决方案 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 传统Switch破解方案常面临系统稳定性差、原始系统安全风险…...

告别EEPROM!用FRAM FM25W256给你的GD32F303项目做个不掉电的‘记事本’(附SPI配置避坑指南)

告别EEPROM&#xff01;用FRAM FM25W256给你的GD32F303项目做个不掉电的‘记事本’&#xff08;附SPI配置避坑指南&#xff09; 在嵌入式系统开发中&#xff0c;数据存储一直是个让人头疼的问题。想象一下&#xff0c;你花了几个月调试的工业控制器&#xff0c;因为一次意外断电…...

突破抖音直播回放下载限制:5大技术创新与3大实战场景全解密

突破抖音直播回放下载限制&#xff1a;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 网站建设的链接优化 在当今的数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;无疑是任何网站建设项目中不可或缺的一部分。尤其是在百度这样的主要搜索引擎上&#xff0c;SEO的重要性更是不言而喻。如何进行 SEO 网站建设的链接优化呢&#xff1…...

深入理解MUNIT架构:内容编码器与风格编码器的完美结合

深入理解MUNIT架构&#xff1a;内容编码器与风格编码器的完美结合 【免费下载链接】MUNIT Multimodal Unsupervised Image-to-Image Translation 项目地址: https://gitcode.com/gh_mirrors/mu/MUNIT MUNIT&#xff08;Multimodal Unsupervised Image-to-Image Translat…...

UsbDk:突破Windows USB访问壁垒的开源驱动开发套件

UsbDk&#xff1a;突破Windows USB访问壁垒的开源驱动开发套件 【免费下载链接】UsbDk Usb Drivers Development Kit for Windows 项目地址: https://gitcode.com/gh_mirrors/us/UsbDk 技术背景解析 解构Windows USB访问限制 在Windows操作系统架构中&#xff0c;USB设…...

AirPodsDesktop完整指南:在Windows和Linux上提升AirPods使用体验的终极方案

AirPodsDesktop完整指南&#xff1a;在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三维&#xff1a;Vue 3与Cesium 1.107的倾斜摄影实战指南 当我们需要在网页中展示真实世界的三维场景时&#xff0c;倾斜摄影技术提供了绝佳的解决方案。这种通过航拍获取多角度影像并重建三维模型的技术&#xff0c;已经成为数字孪生、智慧城市等领域的标配。但将专…...