转载
对于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才可以。
分享到:
相关推荐
3. **JSP页面乱码**:如果你的Servlet转发到一个JSP页面,JSP页面也需要设置正确的字符集。在JSP头部添加以下指令: ```jsp ;charset=UTF-8" language="java" %> ``` 4. **IDE与项目配置**:确保你的IDE(如...
总之,解决Servlet中的中文乱码问题,需要从请求、响应、页面、文件上传、数据库等多个角度综合考虑,确保每个环节的字符编码一致且正确。在现代开发环境中,推荐使用UTF-8作为统一的编码标准,因为它支持的字符范围...
在转发过程中,服务器会将请求转发到另外一个Servlet 或 JSP 页面,而浏览器的地址栏不会改变。转发可以共享一个 request 对象,可以在 request 作用域中存储数据。例如,req.getRequestDispatcher(URI).forward(req...
- **概念**:转发是在服务器端完成的,由服务器将当前请求转发到另一个资源处理,客户端不知道该过程。 - **实现**:通过`RequestDispatcher`接口的`forward(request, response)`方法实现。 ##### 5.2 重定向 - **...
- **字符编码**:浏览器与服务器之间可能存在不同的字符编码设置,导致中文乱码问题。可以通过设置请求头中的`Content-Type`来统一字符编码,例如设置为`Content-Type: text/html; charset=UTF-8`。此外,也可以在...
- 可通过修改web.xml配置文件,使用后缀匹配模式,让一个Servlet处理不同类型的请求。 - 使用`request.getRequestURI()`获取请求资源路径,分析路径并调用不同的分支处理代码。 8. **重定向与转发** - 重定向...
在Java Web开发中,Tomcat是一个非常常见的应用服务器,它用于部署和运行Java Servlet和JavaServer Pages(JSP)应用程序。当我们处理表单提交时,可能会遇到数据乱码的问题,尤其是在涉及非ASCII字符集(如中文、...
总结来说,"java中servlet文字过滤器"是Java Web开发中的一个重要工具,它提供了对HTTP请求和响应的预处理和后处理能力,尤其在处理编码问题和安全过滤方面起到了关键作用。通过合理配置和实现,Filter可以帮助我们...
Servlet是一个Java类,遵循Servlet API规范,由Web服务器加载并执行以响应客户端(通常是浏览器)的请求。在这个教案中,我们将深入探讨Servlet的基本概念、编码过程以及在处理编码问题时的常见策略。 一、Servlet...
在本实验报告“Java + Servlet + JavaBean”中,我们将深入...而“jsp+servlet+javabean第七章实验包-胡新磊”可能是该实验的目录名,表明这是一个关于JSP、Servlet和JavaBean的系列教程的一部分,由胡新磊老师提供。
然而,文件中包含的部分内容似乎是乱码或者非中文字符,这可能是在转码过程中出现了问题。基于标题、描述及可识别的部分内容,下面将对servlet网络网关以及相关技术进行详细解析。 ### servlet网络网关介绍 #### 1...
- 请求转发属于服务器内部操作,地址栏不会发生变化,因此可以在转发后的页面继续处理前一个请求中的数据。 - **重定向(Redirect)**: - 使用`response.sendRedirect(url)`进行重定向。 - 重定向属于客户端行为...
在开发Java Web应用程序时,尤其是使用JSP和Servlet进行交互时,经常遇到的一个问题是请求转发后页面出现乱码。这个问题通常发生在数据从Servlet传递到JSP的过程中,由于字符编码设置不当,导致显示的文本出现乱码。...
多个Filter可以串联起来形成Filter链,每个Filter的`doFilter()`方法会调用`chain.doFilter(request, response)`将请求传递给下一个Filter,直到最后一个Filter将请求转发给目标Servlet。 5. **应用场景** - **...
转发是在服务器端完成的,请求到达Servlet后,通过RequestDispatcher的forward()方法,将请求转发到另一个资源。 17、**转发与重定向的区别**: - 转发是服务器内部操作,不改变浏览器地址栏;重定向会改变URL。 - ...
当用户通过浏览器访问一个JSP页面时,如果页面中包含Servlet的调用(例如,通过表单提交或者链接触发GET请求),请求会被发送到Servlet。Servlet接收到请求后,可以执行相应的业务逻辑,并可以选择性地将控制权传递...
然而,这种方法可能导致在多个文件包含同一个JSP文件时产生冲突,因此更好的做法是在项目的`web.xml`配置文件中全局设定JSP文件的编码: ```xml 解决页面乱码问题 <display-name>JSPConfiguration *.jsp ...
Java中的中文乱码问题是一个常见的困扰开发者的问题,尤其是在处理Web应用程序时。主要涉及到JSP页面、Servlet接收请求、数据存储等多个环节。以下是针对这些问题的详细分析及解决方案: 1. **JSP页面显示乱码** ...