为什么会出现中文乱码问题:
**因为我们的浏览器在传输数据时采用的编码格式是“UTF-8”,而我们的服务器Tomcat在接收并且处理数据时采用的编码格式是“ISO-8859-1”,编码格式不一致造成的中文乱码,所以在处理时我们在服务器端修改编码格式即可
分为2种应用场景【一、在使用简单的MVC模式场景中 二、在使用三层架构中(集成了框架)】
一、在使用简单的MVC模式场景中
1、GET请求方式(有2种解决方案):
1-1:
//获取请求参数,封装成对象
String username = request.getParameter("username");
//以ISO-8859-1的方式把参数编译为二进制
byte[] bt = username.getBytes("ISO-8859-1");
//把这些二进制重新使用UTF-8来解码
String username2 = new String(bt,"UTF-8");
1-2:修改server.xml的配置文件
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
URIEncoding="UTF-8"
connectionTimeout="20000"
redirectPort="8443" />
2、POST的请求方式
这种方式提交的参数在请求体中,虽然处理get的先解码后编码的方式依然有效的,但是POST请求中是很可能有大量的非英文数据.(大量的解码然后再编码)
直接修改请求体的解码方式(UTF-8)
request.setCharacterEncoding("UTF-8");
在返回前端数据时候,设置入下
response.setContentType("text/html;charset=UTF-8");
注意:这行代码必须在获取第一个参数之前执行,如果已经获取了参数,在执行这个代码则无效.所以,把这行代码作为service方法的第一行代码
二、在使用三层架构中(集成了框架)【未完待续】
解决POST乱码问题:在web.xml中进行配置
<!-- 处理POST提交乱码问题 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<!-- 如果在前端控制器中我们的拦截方式是 “/”,拦截所有,那么我们在此处应该使用“/*”,拦截所有 -->
<url-pattern>*.action</url-pattern>
</filter-mapping>