SpringMVC @RequestHeader @CookieValue 处理获取请求参数的乱码问题

news2024/11/26 15:29:00

SpringMVC @RequestHeader @CookieValue 处理获取请求参数的乱码问题

  • @RequestHeader
  • @CookieValue
    • 什么是cookie
  • 通过POJO获取请求参数
  • 通过CharacterEncodingFilter处理获取请求参数的乱码问题
    • get请求的乱码
    • post请求乱码

处理获取请求参数的乱码问题)


@RequestHeader

1.@RequestHeader是将请求头信息和控制器方法的形参创建映射关系
2.@RequestHeader注解一共有三个属性: value、required、defaultValue,用法同@RequestParam


@RequestMapping("/testParam")
    public String testParam(
        @RequestParam(value = "user_name",required = false,defaultValue = "hehe") String username,
        String password,
        String[] hobby,
        @RequestHeader("Host") String host){
        //求参数中出现多个同名的请求参数,可以再控制器方法的形参位置设置字符串类型或字符串数组接收此请求参数
        //若使用字符串类型的形参,最终结果为请求参数的每一个值之间使用逗号进行拼接
        System.out.println("username:"+username+",password:"+password+",hobby:"+ Arrays.toString(hobby));
        System.out.println("Host:"+host);
        return "success";
    }

在这里插入图片描述
该语句会将请求头信息提出来赋值给形参
运行结果:
在这里插入图片描述


@CookieValue

1.@CookieValue是将cookie数据和控制器方法的形参创建映射关系
2.@CookieValue注解—共有三个属性: value、required、defaultValue,用法同@RequestParam

@RequestMapping("/testParam")
    public String testParam(
        @RequestParam(value = "user_name",required = false,defaultValue = "hehe") String username,
        String password,
        String[] hobby,
        @RequestHeader("Host") String host,
        @CookieValue("JSESSIONID") String JSESSIONID){
        //求参数中出现多个同名的请求参数,可以再控制器方法的形参位置设置字符串类型或字符串数组接收此请求参数
        //若使用字符串类型的形参,最终结果为请求参数的每一个值之间使用逗号进行拼接
        System.out.println("username:"+username+",password:"+password+",hobby:"+ Arrays.toString(hobby));
        System.out.println("Host:"+host);
        System.out.println("JSESSIONID:"+JSESSIONID);
        return "success";
    }

运行结果:
在这里插入图片描述

什么是cookie

不知道你们有没有遇到过这种情况,当你在淘宝想去买一个手机的时候,你紧接着去刷短视频,那么推送的大量广告就是有关手机的,那其中的原因就是来源于我们的cookie追踪;
那么什么是cookie呢?
在这里插入图片描述
但是问题来了Http并不会记录我们的登陆状态
在这里插入图片描述
是不是代表着如果每当我们想访问别的页面时,就要重新登录一次,你敢想象吗
因此就有了cookie让我们的服务器记忆功能
浏览器收到服务器返回的页面时也会得到一个cookie,其中存放着我们的专属id,浏览器会保存我们的这个cookie,并且每次请求同一个网站时,请求中都会附带这个cookie,这样浏览器可以根据cookie中的id分辨出来我们是谁,和我们的登录状态,事实上除了记录我们的id还会记录别的东西,记录什么根据网站而定。
但随着存储信息的增加,问题又来了
在这里插入图片描述
一个cookie只有4kb的空间,于是开发者想到将cookie只用来存储id,而把其余的信息都存储到服务器名为session的一个地方,此后cookie中只需要存储用户对应的sessionID,当服务器收到浏览器发过来的cookie时,会根据sessionID字段,查询全部信息

cookie的一个限制,那就是一个网站只能查看自己所保存的cookie,那么购物网站是怎么精准的投放给我们的呢?

那是因为广告隶属于另一个网站,广告位所属的网站会在当前页面中植入一个追踪cookie称为第三方cookie,每一个cookie只能获取一部分信息,将所有有关的信息拼装起来就是一个人的信息库了

怎么样避免cookie追踪呢?

1.火狐浏览器的隐私窗口
2.谷歌浏览器的无痕窗口
3.安装拦截广告和追踪器的插件


通过POJO获取请求参数

可以在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实体类中的属性名一致,那么请求参数就会为此属性赋值

package com.yc.mvc.bean;

public class User {
    private String username;

    private String password;

    private Integer age;

    private String sex;

    private String email;

    public User(String username, String password, Integer age, String sex, String email) {
        this.username = username;
        this.password = password;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }

    public User() {
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public Integer getAge() {
        return age;
    }

    public String getSex() {
        return sex;
    }

    public String getEmail() {
        return email;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
<form th:action="@{/testPOJO}" method="post">
  用户名:<input type="text" name="username"><br>
  密码:<input type="password" name="password"><br>
  性别:<input type="radio" name="sex" value=""><input type="radio" name="sex" value="">女
  年龄:<input type="text" name="age"><br>
  邮箱:<input type="text" name="email"><br>
  <input type="submit" value="使用实体类接收请求参数">
</form>

通过CharacterEncodingFilter处理获取请求参数的乱码问题

在这里插入图片描述
在这里插入图片描述
为什么出现乱码?
字符编码不一致

get请求的乱码

get请求的乱码是由tomcat造成的
怎么解决?
在这里插入图片描述
在这里插入图片描述
改为
在这里插入图片描述

post请求乱码

怎么解决?
在这里插入图片描述

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

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

相关文章

实时计算业务介绍实时日志分析

4.1 实时计算业务介绍 学习目标 目标 了解实时计算的业务需求知道实时计算的作用应用 无 4.1.1 实时计算业务需求 实时&#xff08;在线&#xff09;计算&#xff1a; 解决用户冷启动问题实时计算能够根据用户的点击实时反馈&#xff0c;快速跟踪用户的喜好 4.1.2 实时计算…

编译与优化

第10章 前端编译与优化 10.2.1 Javac的源码与调试 从Javac代码的总体结构来看&#xff0c;编译过程大致可以分为1个准备过程和3个处理过程&#xff0c;它们分别如下 所示。 1&#xff09;准备过程&#xff1a;初始化插入式注解处理器。 2&#xff09;解析与填充符号表过程&…

【C++】异常

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;C语言传统…

精神财富 物质财富

今天聊到别的家庭每天都制定好计划的&#xff0c;补习班 party 冬令营什么之类的&#xff0c;这个是我们达不到的。有人提前开启了认知&#xff0c;赚到了人生的第一桶金。懂得付出&#xff0c;和执行输出差了好多数量级。 今天看了杂技表演&#xff0c;男人和女人配合的好好 …

C++ 初阶 :stackqueue

文章目录1 stack的介绍2 stack的模拟实现3 queue的介绍4 queue的模拟实现5 priority_queue(优先级队列)介绍6 priority_queue 模拟实现7 仿函数8 deque的简单介绍8.1 deque与vector list的比较8.2 为什么选择deque作为stack和queue的底层默认容器1 stack的介绍 ①stack是一种容…

Springboot校园食堂外卖点餐系统357

目 录 1 概述 1 1.1课题背景及意义 1 1.2 国内外研究现状 1 1.3 本课题主要工作 2 2 系统开发环境 3 2.1 java简介 3 2.2 Mysql数据库 3 2.3 B/S结构 4 2.4 JSP技术介绍 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2操作…

javaEE 初阶 — Socket 套接字与 UDP 数据报套接字编程

文章目录1. Socket 套接字1.1 有连接与无连接1.2 可靠与不可靠传输1.3 面向字节流与面向数据报1.4 全双工与半双工2. UDP数据报套接字编程2.1 DatagramSocket API2.2 DatagramPacket API2.3 InetSocketAddress API3. UDP 版本的客户端服务器程序3.1 服务器实现3.2 客户端实现3.…

【JUC并发编程】Java内存模型——JMM

【JUC并发编程】Java内存模型——JMM详解 文章目录【JUC并发编程】Java内存模型——JMM详解一&#xff1a;并发编程模型的两个关键问题二&#xff1a;Java内存模型的抽象结构1&#xff1a;从 CPU 缓存模型说起2&#xff1a;JMM3&#xff1a;JMM与Java内存区域划分的区别与联系4…

(考研湖科大教书匠计算机网络)第三章数据链路层-第二节:封装成帧

专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;封装成帧概述二&#xff1a;封装成帧作用&#xff08;1&#xff09;帧定界A&#xff1a;概述B&#xff1a;注意&#xff08;2&#xff09;透明传输A&#xff1a;字符填充B&…

设置Linux的信任列表

前言 我们在使用普通用户的时候&#xff0c;我们可以对指令提权&#xff0c;需要用到sudo指令,但是我们在使用的时候会报错。 原因就是&#xff0c;我们linux系统不信任你&#xff0c;必须将你放到我们的信任列表中&#xff0c;我们就可以使用我们的指令提权。 下图是我们在不是…

数据库系统概论②——关系数据库基础

本篇文章主要讲解关系数据库基础中的基本概念&#xff0c;包括关系模型概述、关系的完整性约束等等内容。 同时想要了解更多数据库系统概论知识的朋友可以看下我的上一篇文章数据库系统概论①——数据库系统基本概念 文章目录1、关系数据库的基本概念1.1 关系模型概述1.2 关系数…

【26】C语言_数据存储

目录 数据类型的意义 大小端介绍 例题1&#xff1a;设计一个小程序输出存储方式&#xff1a; 例题2&#xff1a;下列程序输出什么&#xff0c;为什么 例题3&#xff1a;下列程序输出什么&#xff0c;为什么 例题4&#xff1a;下列程序输出什么&#xff0c;为什么 例题6&a…

函数知识点总结

函数知识点总结 函数知识点总结 一、平面直角坐标系中点的坐标 1. 各象限内2. 坐标轴上3. 各象限角平分线上4. 与坐标轴平行的直线上的点5. 点到坐标轴及原点的距离6. 平面上两点距离 一、平面直角坐标系中点的坐标 1. 各象限内 象限x,yx,\,yx,y 的关系第一象限x>0,y&…

powerDesigner如何将数据库中已有表逆向生成pdm文件

问题背景 系统升级&#xff0c;要在原有数据库表结构基础之上重构表系统&#xff0c;为了节省时间&#xff0c;原来能使用的表结构保留&#xff0c;制作升级变动&#xff0c;所以用到了powerDesigner的逆向生成工具。 解决方案 第一种 创建新的PDM工程 点击左上角File&…

一起Talk Android吧(第四百七十六回:缩放类视图动画)

文章目录使用方法属性介绍示例代码各位看官们大家好&#xff0c;上一回中咱们说的例子是"渐变类视图动画",这一回中咱们说的例子是" 缩放类视图动画"。闲话休提&#xff0c;言归正转&#xff0c;让我们一起Talk Android吧&#xff01;使用方法 缩放类动画…

Servlet进阶2:JSP≈Servlet、MVC=JSP+Servlet

Servlet进阶2一、JSP的运行1. 启动tomcat2. 准备JSP文件3. 将JSP文件放在Tomcat的webapps文件夹下4. 利用Tomcat运行JSP文件二、JSP和Servlet的异同三、MVC JSP Servlet1. Servlet与JSP的优缺点2. MVC的出现一、JSP的运行 1. 启动tomcat 2. 准备JSP文件 <span style&quo…

【Ⅰ绪论】1.数据结构起源

一、起源 1、早期理解 人们都把计算机理解为数值计算工具 数值计算的特点&#xff1a;有数学方程&#xff0c;可以用计算机去做传统的数值计算 比如&#xff1a;一个线性回归的模型【机器学习】 ①根据历史数据&#xff08;黑点&#xff09;&#xff0c;去拟合这条线&#x…

【算法基础】快速排序(分治思想)

一、快速排序原理 1. 算法介绍 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: (1)首先设定一个分界值,通过该分界值将数组分成左右两部分。(记左端为L,最右端为R) 分界点的选取有如下四种方法:(1)q[L];(2)q[(L+R)/2];(3)q[R];(4)随机选取 (2)…

node封装一个控制台进度条插件

说在前面 控制台的进度条大家都见得不少了吧&#xff1f;大家都知道控制台的进度条是怎么实现的吗&#xff1f;最近自己在写几个node脚本工具&#xff0c;期间有需要进度展示的一个需求&#xff0c;所以就顺手写了一个可以自定义的进度条插件&#xff0c;可以直接引入并配置使用…

【自然语言处理】情感分析(三):基于 Word2Vec 的 LSTM 实现

情感分析&#xff08;三&#xff09;&#xff1a;基于 Word2Vec 的 LSTM 实现本文是 情感分析 系列的第 333 篇&#xff0c;前两篇分别是&#xff1a; 【自然语言处理】情感分析&#xff08;一&#xff09;&#xff1a;基于 NLTK 的 Naive Bayes 实现【自然语言处理】情感分析…