请求转发和getWriter一起用导致的的乱码编码问题

 

import java.io.*;
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.*;

@WebServlet("/login")
public class Login extends HttpServlet {
    boolean 条件 = true;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        if (条件) {
            req.getRequestDispatcher("/b.html").forward(req, resp);
        } else {
            out.println("中文消息");
        }
    }
}


当条件为真时,请求转发b.html 就会有乱码。而且这个问题很奇怪,用 vscode 的 tomcat插件 运行 war包 又不会有编码问题。

解决方法 是把有关  getWriter() 的代码去掉但具体原因我还不知道,

欢迎大家讨论,望 不吝赐教 

html页面是什么编码方式。

再写一条语句:

resp.setCharacterEncoding("UTF-8");

b.html 代码


<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    中文
</body>

</html>

 

补充一下,这样是没问题的

import java.io.*;
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.*;

@WebServlet("/login")
public class Login extends HttpServlet {
    //boolean 条件 = true;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("/b.html").forward(req, resp);
    }
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632