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

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 SpringMVC @RequestHeader @CookieValue 处理获取请求参数的乱码问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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


@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请求乱码

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/141554.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!