Servlet 采用 forward 时,页面出现汉字乱码问题的分析

经常有人问到,在servlet里面forward到一个页面之后,浏览器总是汉字的乱码。经调试发现,是由于在servlet里面不能正确调用 response.getWriter()方法造成的。

servlet 如下,如果去掉注释,则会出现乱码

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();
    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才可以。

 

附test2.jsp的代码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<pre>中文
<%="中文2"%>
</pre>

web.xml, 未使用任何过滤器 

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  
<display-name>www.java2000.net</display-name>
  
<welcome-file-list>
    
<welcome-file>index.html</welcome-file>
    
<welcome-file>index.htm</welcome-file>
    
<welcome-file>index.jsp</welcome-file>
    
<welcome-file>default.html</welcome-file>
    
<welcome-file>default.htm</welcome-file>
    
<welcome-file>default.jsp</welcome-file>
  
</welcome-file-list>
</web-app>
VESTA-LAMMPS-OVITO实战:分子动力学模拟中的弗伦克尔缺陷与位错环分析 分子动力学模拟是研究材料辐照损伤的重要工具,级联碰撞后产生的弗伦克尔缺陷和位错环直接影响材料性能。要准确识别这些缺陷,需要从晶体结构建模、模拟计算到可视化分析的全流程配合。VESTA作为晶体结构建模工具,能够构建完美的初始晶格;LAMMPS负责执行分子动力学计算,输出包含缺陷信息的轨迹;OVITO则通过Wigner-Seitz分析和位错提取算法(DXA)定量识别空位、间隙原子及位错环。理解这些工具的原理与参数设置,能有效提升缺陷分析的准确性和效率。本文面向材料模拟与计算科学领域的研究人员,系统梳理了从VES 阅读详情

相关推荐

VTK基础教程(1)- vtkPolyData 介绍

目录 VTK的编译与环境搭建 VTK一般渲染流程 VTK数据类型-vtkPolyData 使用vtk自带的多边形数据 使用自己创建的数据 添加顶点颜色 添加面颜色 VTK的编译与环境搭建 这部分目前已经有了大佬做了成熟的傻瓜式配置,大家可以参考这篇文章:VTK+VS2019(或其他版本均可) 傻瓜式一站式 配置_Nancy_fairy的博客-优快云博客_vs2019 vtk VTK一般渲染流程 这部分的介绍也很多,大家可以参考这篇文章:VTK笔记-了解VTK_黑山老妖的博客.

qq_35769071的博客 9057

关于Servlet通过forward跳转其他页面乱码问题

把response.getWriter().append("Served at: ").append(request.getContextPath());这条语句删了就可以了,我也不知道为什么。很奇怪。刚开始还设置了各种格式。最后发现是这句话的问题,难道response.getWriter()影响了其编码格式?很奇怪。...

toward_south的博客 1176

比亚迪开放平台接口实战:车身状态监测与智能车联应用开发

本文详细介绍了如何利用比亚迪开放平台的车身状态接口进行智能车联应用开发。通过核心类BYDAutoBodyworkDevice,开发者可以安全获取车辆VIN、车门车窗状态、蓄电池电压、方向盘转角等实时数据,并利用监听器实现状态实时响应。文章提供了从SDK集成、接口调用到典型应用场景(如远程车况检查、车队管理)的完整实战指南,助力开发者快速构建基于比亚迪车辆数据的创新应用。

weixin_29176179的博客 731

JSP基础:包含、跳转指令,以及解决forward传参中文乱码

一.JSP包含指令         分为静态包含和动态包含 1.1静态包含        相当于把被包含的文件中的代码插入到要包含他的JSP页面中,不预先做处理,不管后缀是什么。        使用&lt;%@include file="要包含的文件路径"%&gt;        静态包含的处理流程: 1.2动态包含         与静态包含不同的是 动态包含会对被包含的内容先...

SihgYu 2063

UE5Could not be compiled. Try rebuilding from source manually.

UE5Could not be compiled. Try rebuilding from source manually.

weixin_45417260的博客 2772

保姆级教程:用ESP32和SPH0645麦克风做个无线录音笔(附Python服务端实时播放)

本文提供了一份详细的ESP32无线录音笔开发指南,涵盖从硬件搭建到Python服务端实时回放的全过程。通过SPH0645麦克风采集高质量音频数据,利用ESP32的I2S接口和WiFi功能实现无线传输,并结合Python服务端实现实时播放和WAV文件保存,适合远程音频监控和创意交互装置开发。

weixin_30700099的博客 645

Servlet采用forward出现中文乱码问题解决

经常有人问到,在servlet里面forward到一个页面之后,浏览器总是汉字的乱码。经调试发现,是由于在servlet里面不能正确调用 response.getWriter()方法造成的。 servlet 如下,如果去掉注释,则会出现乱码 package test; import java.io.IOException; import java.io.PrintWriter;

坤哥的专栏 3518

MTK-AWB 小结 (二)

调试总结:可以将offset 对应的ratio加大,保留更多的喜好色(偏色),影响WF statistic gain,从而影响最终的awb gain。这一部分前期CCT校准的时候就会算出一组默认值,当然这个offset offse 值用于优化T,S,wf 光下的偏色喜好度. offset。后面遇到 A H Shad 光收白或者偏色,还可以优化 A 的offset ,H offset,shad offset.new offset 计算过程(Day locus offset 和M/G offset )

qq_46056347的博客 1170

servlet中通过request.getRequestDispatcher跳转到jsp页面汉字乱码问题

<br />servlet中通过request.getRequestDispatcher("test.jsp").forward(request, response)跳转到test.jsp页面,test.jsp中的汉字都显示“?????”,在浏览器中直接跳转到test.jsp页面就是正常的。这个问题主要是编码不一致引起的,需要在jsp页面设置,servlet中有如下语句设置编码方式:<br /> response.setCharacterEncoding("UTF-8"); // 先指定输出流的编码 <br

adolinzi的专栏 7894

从模型车到真实路口:基于YOLOv5-Lite与SORT的轻量化车流量检测系统实战

本文详细阐述了如何将基于YOLOv5-Lite与SORT的轻量化车流量检测系统从毕业设计原型部署到真实路口。文章聚焦于解决在嵌入式平台(如树莓派)上实现实时、稳定检测的工程挑战,涵盖数据采集、模型微调、系统集成及动态信号灯策略,为智能交通灯系统提供了实用的轻量化解决方案。

weixin_29179311的博客 128

告别游戏卡关!用Cheat Engine 7.5修改单机游戏数据的保姆级教程(附Tutorial靶场练习)

本文提供了一份详细的Cheat Engine 7.5使用教程,帮助玩家轻松修改单机游戏数据。从基础操作到高级技巧,包括精确值扫描、模糊扫描、指针扫描和代码注入,教程还涵盖了《植物大战僵尸》和《星露谷物语》的实战案例,确保玩家能够安全、高效地优化游戏体验。

weixin_30082367的博客 790

对于servlet转发后乱码的一个可能原因

昨天开始做的BLOG系统,今天快要完工了,但是,突然碰见了一个校问题,那就是,在servlet中用request.getRequestDispatcher("../singleList.jsp").forward(request, response);转向到JSP页面后竟然发生了乱码问题,乱码问题是很常见的,不过这样出现也有点奇怪,后来处理了一下,怎么弄都是有问题。最后才发现,原来因为在servl

tyyz001的专栏 1098

基于毫米波雷达的智能风扇算法设计与实现

摘要:本文设计了一种基于毫米波雷达的智能风扇控制系统,采用FMCW雷达实现人体目标的精准检测与定位。系统通过距离FFT、速度FFT、CFAR检测和AoA估计构建完整的信号处理链路,并针对风扇叶片干扰设计了基于自相关函数的抗干扰算法。创新性地提出了人在开机、多人优先送风、摇头追踪等控制策略。研究采用MATLAB完成全链路算法仿真验证,并在STM32平台上实现实物系统。实验表明,该系统可实现0.15m测距精度和±60°方位角覆盖,有效解决了传统风扇的能源浪费和用户体验问题。本文提供了完整的MATLAB仿真代码和

huanghm88的专栏 405

注意语句顺序 防止Servlet Request Response乱码

servlet乱码一般分为Request发生乱码和Response发生乱码 对于Request发生乱码一般是由于tomcat容器的默认编码是ISO-8859-1 而Java中的编码是UTF-8的,因此可以对   String myparam=request.getParameter("myparam");   得到的参数进行编码转化   myparam = new String(m

OYJJ的专栏 1655

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

对于servlet乱码的一种可能

昨天开始做的BLOG系统,今天快要完工了,但是,突然碰见了一个校问题,那就是,在servlet中用 request.getRequestDispatcher("../singleList.jsp").forward(request, response);转向到JSP页面后竟然发生了乱码问题,乱码问题是很常见的,不过这样出现也有点奇怪,后来处理了一下,怎么弄都是有问题。最后才发现,原来因为在se

tyyz001的专栏 1638

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

解决Web工程乱码问题

web工程中jsp乱码问题

lv836735240的专栏 1587

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

servlet页面跳转多次传参

servlet如何从表单中获取,并连续多次跳转如何,再次获取表单参数  第一种方法: (第一个Serverlet类   注意:本章未进行乱码处理,不能传汉字) public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

wulongfei321的博客 903

Java Web Servlet是个什么?

Servlet 是什么? 这里是一些JavaWeb 的 Servlet操作

土豆块嘎嘣脆的博客 1015

JavaEE 学习中,Web-Servlet 简单登录页面(入口、处理、出口)(java 学习中的小记录)...

JavaEE 学习中,Web-Servlet 简单登录页面(入口、处理、出口)(java 学习中的小记录)作者:王可利(Star·星星) Web-Servlet 简单登录页面 这一章主要是熟悉,入口页面的登录效果,然后通过servlet来处理,最后把值传递给出口页面的过程。 附上代码(入口页面): 1 <!DOCTYPE HTML PUBLIC "-/...

519

2020-12-07

Servlet请求转发forward出现中文乱码问题解决 在servlet里面forward到一个页面之后,浏览器总是汉字的乱码。经调试发现,是由于在servlet里面不能正确调用 response.getWriter()方法造成的。 解决办法一: 曾经尝试增加如下语句,问题依然存在 public class TestServlet extends HttpServlet ...{ @Override public void doGet(HttpServletRequest requ

LJXKA的博客 184

javaweb/javaEE解决中文乱码

form两种传递数据的方式(post/get),只有get方式需要处理中文乱码。 通过filter过滤处理中文乱码 单独封装一个处理类 @WebFilter(//属性=属性值,属性和属性值用逗号隔开 //分配类型 dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.FORWARD, Dispatche...

weixin_42017951的博客 644

Servlet和Jsp

Servlet 与 JSP nginx 可以部署静态内容 tomcat 可以部署动态内容 常见操作 startup.bat shutdown.bat ctrl+C 找后台 java 进程 server.xml 可以端口,配置字符集,虚拟主机 … maven pom.xml GAV 坐标 &lt;dependency&gt; &lt;groupId&gt;组织 &lt;...

mashaokang1314的博客 262

servlet进阶

查询为例:开发流程 Servlet: 执行查询 public void service(HttpServletRequest request, HttpServletResponse response) { // 1) jdbc 代码,连接数据库,执行sql,查询结果 // 2) 存入作用域 request.setAttribute("变量名", 查...

feiyan的博客 341
上一篇: .NET Framework Library 正式开源
下一篇: HttpURLConnection 的 POST 方法
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值