对于servlet转发后乱码的一个可能原因
2009-08-27 14:33
155 查看
昨天开始做的BLOG系统,今天快要完工了,但是,突然碰见了一个校问题,那就是,在servlet中用request.getRequestDispatcher("../singleList.jsp").forward(request, response);转向到JSP页面后竟然发生了乱码问题,乱码问题是很常见的,不过这样出现也有点奇怪,后来处理了一下,怎么弄都是有问题。最后才发现,原来因为在servlet里面多写下了这么一句话PrintWirter out = esponse.getWriter();这句话是ECLIPSE自动生成的,因为没有用,我忘给删掉了。结果,正是他对我的程序编码产生了影响。
以下测试程序:
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // PrintWriter out = response.getWriter(); // 关键在这一句,如果有,则会出现乱码的。 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/test/test2.jsp"); requestDispatcher.forward(request, response); } }
曾经尝试增加如下语句,问题依然存在
package test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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); } }
去掉后,就可以正常显示汉字了,
经多次测试,发现是语句的顺序有问题,需要调整为如下的代码即可
package test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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才可以。
以下测试程序:
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // PrintWriter out = response.getWriter(); // 关键在这一句,如果有,则会出现乱码的。 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/test/test2.jsp"); requestDispatcher.forward(request, response); } }
曾经尝试增加如下语句,问题依然存在
package test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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); } }
去掉后,就可以正常显示汉字了,
经多次测试,发现是语句的顺序有问题,需要调整为如下的代码即可
package test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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才可以。
相关文章推荐
- 对于servlet乱码的一种可能
- Asp.net 下载文件乱码问题一个可能原因--文件名加后缀名
- curl乱码有两个方面的原因一个是因为我们采集页面的php页面编码与远程文档编码不致导致的,另一种可能是页面进入了gzip压缩传输导致的
- 从.NET迁移到.NET Core的一个主要原因,在于后者具备在Linux上运行的能力。但是对于大型企业应用,不可能实现一步迁移到位。由此,Microsoft推荐采用一种逐步迁移做法: 第一步,迁移到
- servlet层调用biz业务层出现浏览器 500错误,解决方法 dao数据访问层 数据库Util工具类都可能出错 通过新建一个测试类复制代码逐步测试查找出最终出错原因
- java web 项目中可能出现乱码的原因
- pon 认证错误的一个可能的原因
- 完美解决在Servlet中出现一个输出中文乱码的问题
- javaweb servlet中使用请求转发乱码的实现
- 网站某一目录下mip页面点击全部跳转到同一个链接,可能是什么原因导致的? – SEO每天一贴
- setTimeout()和setInterval()调用函数时失效的一个可能原因
- 对于表单域乱码的处理!!只要一个简单的方法的,好好....
- 对于泛型的自动匹配的一个问题,可能你也会碰到的
- JSP/ Servlet常见的中文乱码原因
- Java --- Servlet乱码处理方式/转发重定向
- 使用request.getRequestDispatcher请求转发到一个页面中文乱码解决
- 转载---HttpUrlConnection发送post请求汉字出现乱码的一个解决方法及其原因
- php 开发wap乱码可能的原因及解决方法
- 解决Get和Post请求中中文乱码问题 (2013-01-26 23:59:39)转载▼ 标签: javaee it 分类: JavaEE 对于Post请求,只需在Servlet或者jsp中写入如下
- [Unity3D]调用函数时出现NullReferenceException的一个可能原因