这是一篇本来早就打算写,但又一直忘了写的小记录。由于昨天部署项目的时候,突然又重现这个问题,所以今天就记录一下。
问题是这样的,jsp请求后台时,传参出问题,导致控制台报错。错误如下:
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
截图如下:
jsp对应参数 如下:有问题的我已经圈起来了,注意第一个红框的数据
原因就在于 url参数中存在着 特殊字符,所以导致报错
RFC3986 文档规定,Url 中只允许包含英文字母(a-zA-Z )、数字(0-9 )、-_.~4 个特殊字符以及所有保留字符。
Url 可以划分成若干个组件,协议、主机、路径等。RFC3986 中指定了以下字符为保留字符: ! * ' ( ) ; : @ & =+ $ , / ? # [ ]
上面 URL中的 scriptes参数中的 "{}"就是非法字符,直接传递就会出现问题
解决办法:使用 encodeURIComponent 编码后再传递给后台
修改后:问题得以解决
JavaScript encodeURIComponent() 函数
定义和用法
encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
语法
encodeURIComponent(uri)
实例
Example
使用 encodeURIComponent() 对 URI 进行编码:
<script>
var uri="http://w3cschool.cc/my test.php?name=ståle&car=saab";
document.write(encodeURIComponent(uri));
</script>
以上实例输出结果:
http%3A%2F%2Fw3cschool.cc%2Fmy%20test.php%3Fname%3Dst%C3%A5le%26car%3Dsaab