Servlet请求转发forward出现中文乱码问题解决
在servlet里面forward到一个页面之后,浏览器总是汉字的乱码。经调试发现,是由于在servlet里面不能正确调用 response.getWriter()方法造成的。
解决办法一:
曾经尝试增加如下语句,问题依然存在
public class TestServlet extends HttpServlet ...{
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException ...{
PrintWriter out = response.getWriter();//注意这个
response.setCharacterEncoding("UTF-8");//也注意这个
response.setContentType("text/html;charset=UTF-8");
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/test/test2.jsp");
requestDispatcher.forward(request, response);
}
}
后来发现是顺序问题:
public class TestServlet extends HttpServlet ...{
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException ...{
response.setCharacterEncoding("UTF-8"); // 先指定输出流的编码
PrintWriter out = response.getWriter(); // 再拿到输出对象
response.setContentType("text/html;charset=UTF-8");
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/test/test2.jsp");
requestDispatcher.forward(request, response);
}
}
看来,response.getWriter() 在内部的实现上,影响了输出流的编码集。必须先指定编码集,再调用Writer才可以。
解决办法二:
找到转发到带有中文的那个html页面代码。将html的meta中的charset=gbk, 选择转发后的页面中文是正常的没有乱码。即:
<meta charset="GBK">
参考链接:
https://blog.csdn.net/red_flame/article/details/13168953