• 【springMvc】通过url向后台传递带有#井号的参数处理


    井号释义

    1、HTTP请求不包括#

    #是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。

    比如,访问下面的网址,

    http://www.example.com/index.html#print
    
    • 1

    浏览器实际发出的请求是这样的:

    	GET /index.html HTTP/1.1
    
      Host: www.example.com
    
    • 1
    • 2
    • 3

    可以看到,只是请求index.html,根本没有"#print"的部分。

    2、#后的字符

    在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。

    比如,下面URL的原意是指定一个颜色值:

    http://www.example.com/?color=#fff
    
    • 1

    但是,浏览器实际发出的请求是:

    	GET /?color= HTTP/1.1
    
      Host: www.example.com
    
    • 1
    • 2
    • 3

    可以看到,"#fff"被省略了。只有将#转码为%23,浏览器才会将其作为实义字符处理。也就是说,上面的网址应该被写成:

    http://example.com/?color=%23fff
    
    • 1

    前台代码

    当我们不能确定传入的参数中是否包含井号时,就需要对参数进行转码,一定是两次转码,因为spring会自己抵消一次,如果只写一次转码,则后台的处理逻辑就不能使用我接下来的代码

    param = param + "&targetName="+encodeURIComponent(encodeURIComponent(targetName));
    
    • 1

    后台代码

    String targetNameStr =java.net.URLDecoder.decode(bean.getTargetName(),"UTF-8");
    
    • 1

    注意

    正常的post请求,不需要将特殊字符转码,后台也能正常接收,上述代码主要用于通过url直接请求的情况下,例如以下的请求发起方式,则param需要注意转码,否则就会被截断

    var url = "/follow/followThread/toEditJsp.do?" + param;
    
    • 1
  • 相关阅读:
    PD充电驱动解析
    JDBC快速入门
    计算机专业毕设课设选题攻略
    ubuntu下同时安装和使用不同版本的库 librealsense
    Linux驱动.之I2C,iic驱动层(二)
    JVM面试
    Vue——Vue脚手架安装的详细教程
    Git学习记录
    【LeetCode题目详解】第九章 动态规划part10 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II (day49补)
    [资源占用] CPU GPU
  • 原文地址:https://blog.csdn.net/xuexiiphone/article/details/126508050