转载
对于servlet转发后乱码的一个可能原因
在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才可以。
分享到:
相关推荐
•今天的问题:请求转发后页面的乱码问题 •由于特殊原因——图片上传的form表单无法通过ajax提交 因此必须使用form表单直接提交。但是这样会导致一个问题:前后台交互的时候效果不好。为什么效果不好?这里说的不是...
1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释 15 1.6.5 处理指令 15 1.6.6 空白处理 16 1.6.7 行尾处理 16 ...
本课程是javaee和大数据开发的基础课程,讲述了Servlet中Servlet创建过程,Request请求以及Response中各种响应头的介绍,以及乱码的各种处理方式,以及刷新重定向转发等。对servlet中的session和cookie做了着重讲解,...
1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释 15 1.6.5 处理指令 15 1.6.6 空白处理 16 1.6.7 行尾处理 16 ...
1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释 15 1.6.5 处理指令 15 1.6.6 空白处理 16 1.6.7 行尾处理 16 ...
1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释 15 1.6.5 处理指令 15 1.6.6 空白处理 16 1.6.7 行尾处理 16 ...
1.1. 开篇第一个jsp 1.2. B/S结构,请求与响应 2. 让jsp说hello 2.1. 另一个简单jsp 2.2. 中文乱码 2.2.1. 先解决响应中的乱码 2.2.2. POST乱码 2.2.3. GET乱码 3. 请求的跳转与转发 3.1. 范例 3.2. 如果用...
5.3.3 创建第一个Servlet对象 5.3.4 Servlet配置解析 5.3.5 使用Servlet处理业务逻辑 5.3.6 掌握Servelet处理流程 5.3.7 Eclipse快速创建Servlet 5.4 一夫当关——配置并应用Servlet过滤器 5.4.1 过滤器的基本原理 ...
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax+》讲解了JSP/S rvlet技术的基础知识,并提供了一个综合案例展示其具体应用,它们是Java Web服务端技术的基石,也是学习Java Web开发所要必须掌握...
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax+》讲解了JSP/S rvlet技术的基础知识,并提供了一个综合案例展示其具体应用,它们是Java Web服务端技术的基石,也是学习Java Web开发所要必须掌握...
3、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 56 4、线程的基本概念 57 5、什么是多线程 57 6、程序、进程、线程之间的关系 57 7、创建线程有几种方式,分别是什么? ...
本课程详细讲解了以下内容:? ? 1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程...8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码分析? ? ?9.MVC案例、三层架构详解、乱码问题
【下载说明】 《深入体验Java Web开发内幕——核心基础》一书在网上评价极高,非常适合广大Java Web开发人员。本资料是该书PDF格式的高清晰电子版,可用Adobe Reader7.0或兼容阅读工具打开,推荐Java爱好者...
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...