解决HttpServletRequest中文输出乱码的方法

解决HttpServletRequest中文输出乱码的方法_第1张图片

当request对象传递数据时,通过下面的程序可以发现,会出现乱码

①:JSP文件

<%--
  Created by IntelliJ IDEA.
  User: HUNST_jue_chen
  Date: 2022/11/10
  Time: 20:20
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    $Title$


学号:
姓名:
密码:

②:Servlet文件

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Author: HNUST_jue_chen
 * @Date: 2022/11/13/ 18:14
 * @Attention: 转载, 引用请注明出处
 */

//配置Servlet
@WebServlet("/request")
public class HttpServletRequestTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String number = req.getParameter("number");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("number:" + number);
        System.out.println("username:" + username);
        System.out.println("password:" + password);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

提交数据:

解决HttpServletRequest中文输出乱码的方法_第2张图片

 控制台的输出结果为:

解决HttpServletRequest中文输出乱码的方法_第3张图片

姓名:张三的打印结果为??????,出现乱码

解决办法

在HttpServletRequest接口中,提供了setCharacterEncoding方法,用于设置request对象的解码方式

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Author: HNUST_jue_chen
 * @Date: 2022/11/13/ 18:14
 * @Attention: 转载, 引用请注明出处
 */

//配置Servlet
@WebServlet("/request")
public class HttpServletRequestTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //使用setCharacterEncoding方法设置request对象的解码方式
        req.setCharacterEncoding("UTF-8");
        String number = req.getParameter("number");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("number:" + number);
        System.out.println("username:" + username);
        System.out.println("password:" + password);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

解决HttpServletRequest中文输出乱码的方法_第4张图片

此时中文张三正常输出

需要注意的是,配置信息应该从GET或POST方法的第一行写起,才能正确设置编解码格式后传输数据,否则传输数据后再设置编解码格式是无效的

你可能感兴趣的:(JavaWeb,servlet,java,前端,html,web)