【Tomcat错误系列】Tomcat9.0版本出现The valid characters are defined in RFC 7230 and RFC 3986问题

来源:互联网 发布:触摸展示一体机软件 编辑:程序博客网 时间:2024/06/04 01:34

目前我正在写一个Android端的学生管理系统的demo,客户端是andorid平台,服务端是用java Web,使用SSM框架进行开发,最后,进行整合。

目前,整体上的小demo已经写好啦,现在遇到的问题是,当我在本地用eclipse将后台程序导成war包,放到我在腾讯云的服务器的tomcat9.0的webapps目录下,远程连接腾讯云的云服务器,启动tomcat,发现只要android发送的http请求的url含有中文,tomcat后台就会报错,但是我在本地的Tomcat 8却可以完美运行

比如说:

http://localhost:8080/Studentmaven/Student/editStudentSubmit.action?name=张三&sex=男&age=22&grade=14计算机2班&score=90.0

这样就是会报错的,因为url中含有中文,

将所有的中文换成数字或则英文,则不会显示错误

http://localhost:8080/Studentmaven/Student/editStudentSubmit.action?name=1&sex=1&age=22&grade=141&score=90.0

(PS:这里我还发现了一个小问题,如果你用IE浏览器输入第一个含中文的链接,他是会将中文显示成乱码,如果你使用谷歌浏览器,则是显示正常,并且能够正常运行并找到该网页)



也就是The valid characters are defined in RFC 7230 and RFC 3986的错误问题。

开始我以为是中文乱码的问题。所以打开tomcat9.0/conf/serve.xml

参考:tomcat 访问URL(utf-8)编码时候,中文文件 404问题

在port=8080的地方添加

<Connector port="8080" redirectPort="8443" connectionTimeout="20000" URIEncoding="UTF-8"useBodyEncodingForURI="true"    />
然而并没有什么效果,总之就是找了很多方法,就没有成功。

最后在看以下两个资料的时候,找到了解决的方法。

参考:The valid characters are defined in RFC 7230 and RFC 3986异常-解决方法

参考:Tomcat 报 The valid characters are defined in RFC 7230 and RFC 3986

RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。

应该是tomcat9.0相对于tomcat 8.0对URL做出了一些更严格的限制。

所以我将本地的tomcat8复制到腾讯云的云服务器上,重新配置tomcat环境变量。

再次运行,最终运行成功,解决报错。


当然这肯定不是一个长久之计,比较tomcat9.0已经对URL做出了限制,所以即使是练习,之后的url的中文和一些不符合的符号都先在客户端进行URLEncode编码,再将

URL拼接成一个整体后再发送出去。最后服务端在进行解码。

举例:

 String   mytext   =   java.net.URLEncoder.encode("中国",   "utf-8");   
  String   mytext2   =   java.net.URLDecoder.decode(mytext,   "utf-8");   
    
  这两条语句在同一个页面中的话,得到的结果是:   
  mytext:   %E4%B8%AD%E5%9B%BD     
  mytex2:   中国  
  
  String   zhongguo=new      String(request.getParameter("zhongguo").getBytes("iso8859_1"));   
  zhongguo=java.net.URLDecoder.decode(zhongguo,"utf-8");   

参考: java.net.URLEncode编码 与 URLDecode解码问题




阅读全文
2 0