springMvc通过url向后台传递带有#井号的参数处理
Posted 小魏的马仔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springMvc通过url向后台传递带有#井号的参数处理相关的知识,希望对你有一定的参考价值。
井号释义
1、HTTP请求不包括#
#是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。
比如,访问下面的网址,
http://www.example.com/index.html#print
浏览器实际发出的请求是这样的:
GET /index.html HTTP/1.1
Host: www.example.com
可以看到,只是请求index.html,根本没有"#print"的部分。
2、#后的字符
在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。
比如,下面URL的原意是指定一个颜色值:
http://www.example.com/?color=#fff
但是,浏览器实际发出的请求是:
GET /?color= HTTP/1.1
Host: www.example.com
可以看到,"#fff"被省略了。只有将#转码为%23,浏览器才会将其作为实义字符处理。也就是说,上面的网址应该被写成:
http://example.com/?color=%23fff
前台代码
当我们不能确定传入的参数中是否包含井号时,就需要对参数进行转码,一定是两次转码,因为spring会自己抵消一次,如果只写一次转码,则后台的处理逻辑就不能使用我接下来的代码
param = param + "&targetName="+encodeURIComponent(encodeURIComponent(targetName));
后台代码
String targetNameStr =java.net.URLDecoder.decode(bean.getTargetName(),"UTF-8");
注意
正常的post请求,不需要将特殊字符转码,后台也能正常接收,上述代码主要用于通过url直接请求的情况下,例如以下的请求发起方式,则param需要注意转码,否则就会被截断
var url = "/follow/followThread/toEditJsp.do?" + param;
以上是关于springMvc通过url向后台传递带有#井号的参数处理的主要内容,如果未能解决你的问题,请参考以下文章