前言:网上查了很多方法,比如给server.xml文件添加属性代码,还有给catalina.properties文件末尾添加代码,测试之后还是没用(泪奔~~~),好了,下面我们直奔主题。

报错原因

 当我们跳转网页的时候,浏览器报400,一般是因为前端传的参数类型或名称与后台接收的参数

的实体类的属性类型或名称不匹配,也就是前后台匹配错误

测试过程

 

这里我们在servlet01文件中将要传递的参数CLASS中包含中文字符

 在servlet02文件中正常接收

发现在浏览器运行点击超链接,报错

 修改servlet01中CLASS的值为3212

 跳转成功!

测试总结:我们发现不同的参数在传递时会产生不同的访问结果。

查询资料后发现,Tomcat7以上版本,严格按照RFC 3986规范进行访问解析,RFC 3986规范定义了URL中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4种特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]),而我的web服务器(tomcat)是9.0的版本所以在传递中文字符时报错了。

解决办法

1、更换低版本Tomcat规避此问题(不建议)

2、去除URL中的特殊字符 (也不建议)

3、我们给URL上的特殊字符定义编码 如图:

 

成功解决! 

--------------------------------------------------------------------------------------------------------------------------------

2022_10_31_补充

解决办法

4、在服务器的server.xml的Connector节点下添加useBodyEncodingForURI="true"属性(就会将当前上传页面的编码作为URL编码,注意:在取出URL中的参数的页面要设置     request.setCharacterEncoding("...");也就是URL参数的解码方式,解码方式要和页面设置的编码方式格式一致,否则会乱码)

---------------------------------------------------------------------------------------------------------------------------------

注:文章为作者笔记,有问题欢迎评论留言!

查看原文