GET&POST请求和响应的中文乱码解决方案
  RbYwdB2s8Ab9 2024年02月19日 107 0

Serlvet程序的请求和响应乱码问题

get请求与post请求数据乱码

public class RequestAPIServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取请求参数
        String username = req.getParameter("username");
        //解决get请求的中文乱码
        //1 先以 iso8859-1 进行编码
        //2 再以 utf-8 进行解码
        //username = new String(username.getBytes(StandardCharsets.ISO_8859_1), 					StandardCharsets.UTF_8);
        System.out.println(username);
        var pwd = req.getParameter("pwd");
        System.out.println(pwd);
        System.out.println("请求方式:" + req.getMethod());
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求体的字符集为UTF-8,解决POST请求中文乱码
        //字符集设置要在获取请求参数前
        req.setCharacterEncoding("UTF-8");
        var username = req.getParameter("username");
        /*byte[] bytes = username.getBytes("ISO-8857-1");
        var data = new String(bytes, StandardCharsets.UTF_8);
        System.out.println(data);*/
        System.out.println(username);
        var pwd = req.getParameter("pwd");
        System.out.println(pwd);
        System.out.println("请求方式:" + req.getMethod());
    }
}

服务器响应客户端数据乱码问题

public class MyHttpServletResponse extends HttpServlet {
    //获取字符流响应数据
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决响应数据中文乱码
        //设置浏览器与服务器都使用utf-8字符集,并设置了响应头
        //此方法要在获取流对象之前使用
        resp.setContentType("text/html;charset=UTF-8");
        //获取字符流对象
        var writer = resp.getWriter();
        //服务端向客户端响应数据
	writer.write("Hello,Browser,我是服务端!");
    }
}

说明:解决中文乱码必须放到获取流之前

推荐使用
// 它会同时设置服务器和客户端都使用 UTF-8 字符集,还设置了响应头
// 此方法一定要在获取流对象之前调用才有效
resp.setContentType("text/html;charset=UTF-8");
不推荐使用
// 设置服务器字符集为 UTF-8
resp.setCharacterEncoding("UTF-8");
// 通过响应头,设置浏览器也使用 UTF-8 字符集
resp.setHeader("Content-Type", "text/html; charset=UTF-8");

SpringMVC请求和响应的乱码问题

如果使用的是Tomcat服务器,可以在server.xml配置字符集解决get请求的乱码
image

post请求乱码可以在web.xml配置字符编码过滤器

<!--配置字符编码过滤器-->
<filter>
	<filter-name>CharacterEncodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<!--设置请求参数字符集初始化-->
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<!--设置请求与响应字符集编码初始化-->
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
	</filter>
	<filter-mapping>
	<filter-name>CharacterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年02月19日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   53   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   109   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
RbYwdB2s8Ab9