• 【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
  • 相关阅读:
    非常好用的C++线程池和内存池
    微信小程序开发【从入门到精通】——页面导航
    Python绘制三维图详解
    【PytorchLearning】Dropout | 内部机制及代码复现
    python中的生成器
    动手实践一下NodeJS事件驱动架构,流和模块
    Qt Creator 编译 libxlsxwriter
    前端缓存方法有哪些?cookie有哪些属性?
    排序方法总结
    洋葱架构、三层架构及两者区别
  • 原文地址:https://blog.csdn.net/xuexiiphone/article/details/126508050