tomcat对URL有严格的限制,tomcat9.0相对于tomcat 8.0对URL做出了一些更严格的限制。所以上述错误就是你的url出现了一些不符合规定的字符,如常见的中文、/、\、#等等
RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。
RFC 7230文档,主要列出了网络通信中所用到的数字,包括常用端口以及协议号等等。
所以,在用到url的地方要养成良好的习惯,给url进行编码和解码。主要分后台编解码和前端编解码:
一、java后台编码和解码
编码:URLEncoder.encode(url,"UTF-8");
解码:URLDecoder.decode(url, "UTF-8");
注意:包名如下,encode和decode都是静态方法,可以直接调用,返回值还是String类型;
import java.net.URLDecoder; import java.net.URLEncoder;
二、javascript中编码和解码
(1)、escape(url) / unescape(url) (编码/解码)
(2)、encodeURI(url) / decodeURI(url) (编码/解码)
(3)、encodeURIComponent(url) / decodeURIComponent(url) (编码/解码)
至于escape,encodeURI和encodeURIComponent的区别参看另一篇博文http://blog.csdn.net/lpch0825/article/details/79408566。