1.servlet中通过request.getRequestDispatcher("test.jsp").forward(request, response)跳转到test.jsp页面,test.jsp中的汉字都显示“?????”,在浏览器中直接跳转到test.jsp页面就是正常的。
这个问题主要是编码不一致引起的,需要在jsp页面设置,servlet中有如下语句设置编码方式:
response.setCharacterEncoding("UTF-8"); // 先指定输出流的编码
PrintWriter out = response.getWriter(); // 再拿到输出对象
response.setContentType("text/html;charset=UTF-8");
通知浏览器服务器发送的数据格式response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据,这个方法设置发送到客户端的响应的内容类型,此时响应还没有提交。给出的内容类型可以包括字符编码说明,例如:text/html;charset=UTF-8.如果该方法在getWriter()方法被调用之前调用,那么响应的字符编码将仅从给出的内容类型中设置。该方法如果在getWriter()方法被调用之后或者在被提交之后调用,将不会设置响应的字符编码,
另外,还可能是因为tomcat本身的编码问题不一致,找到tomcat的安装目录下的conf文件下的server.xml,查看其编码格式,
<Connector URIEncoding="GBK" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
将所有的都设置为统一的格式后,乱码问题就解决了。