1 背景环境 Eclipse tomcat mysql 动态网站开发
本打算设计一个登录页面,当我们输入正确的用户名和密码就跳转到另外一个页面,然而却没有想象的那么简单。
2 出现的问题
当我修改数据库的字符类型为数字或者字母的时候 ,可以正常登陆
然而当我将username 改成中文的时候,再次向登陆界面输入 李思思 123 控制台就报了如下异常
难道是因为用户名不能输入中文 当然不是这个原因,上网百度了很久,有这么几种解决办法
原文链接:https://blog.csdn.net/qq_26975307/article/details/81459826
① 换了个低版本的tomcat
② 遵循7230 and RFC 3986规范,对于非保留字字符做转义操作
③ 使用保留字字符
④ 将json数据进行urlencode编码
这些用过之后发现并没有什么用,而且低版本的tomcat 也是换汤不换药,没有去尝试。
接着参考了这篇博客https://blog.csdn.net/zeroso/article/details/70592179/的做法,采用的是
在conf/catalina.properties中最后添加一行:
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
然后重启tomcat,却发现无济于事。
网上始终找不到适合自己解决的方式,又该怎么办呢? 还是得好好的读异常信息,明白究竟是什么错误。
解决过程
翻译一下错误信息
HTTP请求头解析错误
注意:进一步出现的HTTP头解析错误将在调试级别记录下来。
在请求目标中发现的无效字符。有效字符在RFC 7230和RFC 3986中定义
请求目标中发现无效字符,这句话很关键 ,我定位到了 向服务端发送请求的url
通过$.post() 向服务器发送请求的方式 第一个参数为URL,难道是后面传递参数的形式不对吗?但是以前做过那么多类似的向服务器传递参数也没有报错。这些都不行,难道是浏览器的原因,不用eclipse 自带的浏览器,换成谷歌浏览器尝试一下。
使用外部web浏览器 我默认使用的浏览器是谷歌浏览器
OK,到现在在调试一下
好的,现在向服务器提交的数据成功的被接收到了,并且我用控制台打印出来证明输入没有错误,那为什么判断我输入的用户名和密码错误呢? 返回false。我在servlet 和 jsp 已经把字符格式设置成为UTF-8了。
接下来只有去看数据库,设计表的时候是否把字符格式设置正确,打开Navicat
仍然是utf8, 字符集里面有很多utf8格式,那一定是正确的的吗?很明显不对,那么只有去百度了,最后发现字符集应该设置为utf8mb4,有木有想到。
再来测试一次
最后解决了 这个问题 ,但是到现在还是不能解释 为什么Eclipse内置浏览器不行 ,IE 浏览器也会出现类似的错误。解决问题也就只有通过不断的尝试,,慢慢的就能摸索出自己解决问题的方式。。