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