造成乱码问题的原因只有一个:即客户端与服务端的字符编码不一致所导致。
tomcat默认的编码处理时ISO-8859-1的编码解析器,所以我i们需要对tomcat对获取到的数据进行处理:
get与post的乱码处理是不一致的,当get请求时,其传递给服务器的数据是附加在URL地址之后的;而post的请求时,其传递给服务器的数据是作为请求体的一部分传递给服务器
1、使用String进行重新编码:
uname=new String(uname.getBytes("iso8859-1"),"utf-8"); 把iso8859-1编码的字符串解码成字节数组,然后重新编码成ut。
缺点:麻烦
2、使用公共配置
Post方式请求:
在service方法中使用: req.setCharacterEncoding(“utf-8”); (获取数据之前)
Get方式请求:
URL的参数没有使用编码(即使用了ISO-8859-1等)
上面Post方式对Get来说不好使了,应为Get的请求数据在url里面。
在tomcat服务器目录下的conf文件下找到server.xml文件,打开进 行如下配置:
找到Connector标签
加上一个属性 useBodyEncodingForURI="true"
配置好上面了
在获取数据之前加上 req.setCharacterEncoding(“utf-8”);就可以正常获取数据了。
我做的是公共配置,可能会造成其他的问题。
tomcat 9.0.5新特性:get方法浏览器传过来的数据在tomcate getParamete()中的编码是utf-8,所以当用get方法请求在控制台显示时,Servlet中不需要再改变中文字符的编码方式。
3、流程总结:
Servlet的使用流程:
设置请求编码格式
设置响应编码格式
获取请求信息
处理请求信息
响应处理结果
数据流转流程:
浏览器------>服务器------->数据库
浏览器<------服务器<-------数据库