一、 解决post请求中中文乱码问题
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 解决中文乱码问题
req.setCharacterEncoding("UTF-8");
// 获取请求参数
String username = req.getParameter("username");
String password = req.getParameter("password");
String hobby = req.getParameter("hobby");
// 有多个值的话要使用这个方法
String[] hobby2 = req.getParameterValues("hobby");
System.out.println("username=>"+username);
System.out.println("password=>"+password);
System.out.println("hobby=>"+hobby);
System.out.println("hobby=>"+ Arrays.toString(hobby2));
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:8080/web_Tomcat_war_exploded/ParameterServlet" method="post">
用户名: <input type="text" name="username"/> <br/>
密码: <input type="password" name="password"/> <br/>
兴趣爱好: <input type="checkbox" name="hobby" value="java"/> Java
<input type="checkbox" name="hobby" value="c++"/>C++
<input type="checkbox" name="hobby" value="js"/> JavaScript
<br/>
<input type="submit">
</form>
</body>
</html>
当我们的请求是post请求的时候,如果表单中有中文的话,会出现中文乱码的问题
当然解决这个问题的方式很简单,就是修改一下字符编码集
req.setCharacterEncoding("UTF-8");
注意!!!!!!
req.setCharacterEncoding("UTF-8"); 此语句一定要在获取请求的参数之前使用才可以实现效果
像下面的代码一样,还是会出现乱码问题!!!!
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
// 解决中文乱码问题
req.setCharacterEncoding("UTF-8");
// 获取请求参数
String password = req.getParameter("password");
// 有多个值的话要使用这个方法
String[] hobby = req.getParameterValues("hobby");
System.out.println("username=>"+username);
System.out.println("password=>"+password);
System.out.println("hobby=>"+ Arrays.toString(hobby));
}
二、解决后端传输数据给客户端出现乱码问题
第一种
public class ResponseIOServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置字符集
resp.setCharacterEncoding("UTF-8");
// 设置完成字符集之后,还会出现乱码问题,其中可能的就是浏览器的字符编码集合我们现在的服务器字符编码集不同
// 下面我们也要修改一下浏览器中的字符编码集
// 通过响应头,设置浏览器也是用UTF-8字符集
resp.setHeader("Content-Type","text/html;charset-UTF-8");
// 要求:往客户端回传 字符串 数据
PrintWriter writer = resp.getWriter();
writer.write("response's content!!!!");
writer.write("张张张张");
}
}
第二种
public class ResponseIOServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 会同时设置服务器和客户端都是用UTF8字符集,还设置了响应头
// 一定要在获取流对象之前调用才有效
resp.setContentType("text/html;charset-UTF-8");
// 要求:往客户端回传 字符串 数据
PrintWriter writer = resp.getWriter();
writer.write("response's content!!!!");
writer.write("张张张张");
}
}