在使用 request 的 getReader方法获取请求体数据的时候
代码:
@WebServlet("/std4")
public class ServletDemo04 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
BufferedReader reader = request.getReader();
String len=null;
while ((len=reader.readLine())!=null){
//直接写到页面
response.getWriter().write(len);
//在控制器里打印
System.out.println(len);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
我的表单:
<form action="${pageContext.request.contextPath}/std4" method="post">
用户名:<input type="text" placeholder="请输入用户名" name="username"/> <br>
密 码: <input type="password" placeholder="请输入密码" name="pwd"/> <br>
<input type="submit" value="提交">
</form>
然后呢 启动后报了 一堆乱码

我是直接用response.getWriter().write() 在页面打印出来的 一开始只是认为没有 设置编码的问题
response.setContentType("text/html;charset=UTF-8"); ////设置浏览器端解码
request.setCharacterEncoding("UTF-8"); //设置从request中取得的值或从数据库中取出的值。
加上以后还是不行 ,但是在浏览器的调试器里是这样的

是不是 jsp页面编码的问题啊?
然后呢 我在jsp页面 form表单上加了一个 enctype="text/plain 神奇的问题就解决了

enctype: 属性规定在发送到服务器之前应该如何对表单数据进行编码。
text/plain : 空格转换为 “+” 加号,但不对特殊字符编码。(懵逼····)
大概意思 就是发送纯文本内容
希望有 大佬来指点一下
在使用Java Servlet处理POST请求时,遇到通过request.getReader()读取请求体数据出现乱码的问题。本文详细描述了如何通过设置正确的字符编码和使用正确的enctype属性(如text/plain)来解决此问题。

被折叠的 条评论
为什么被折叠?



