请求参数的中文乱码的解决-HttpServletReques应用

简介: 请求参数的中文乱码的解决-HttpServletReques应用

GET/POST方式的区别:

<body>
<form action="/Demo04/RequestParamsServlet" method="GET/POST">
    用户名:<input type="text" name="username"><br>
    密  &nbsp;&nbsp;&nbsp;码:<input type="password" name="password"><br>
    爱好:
    <input type="checkbox" name="hobby" value="sing">唱歌
    <input type="checkbox" name="hobby" value="dance">跳舞
    <input type="checkbox" name="hobby" value="football">足球<br>
    <input type="submit" value="提交">
</form>
public class RequestParamsServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
    //设置request对象的解码方式
    request.setCharacterEncoding("utf-8");
    String name = request.getParameter("username");
    String password = request.getParameter("password");
      System.out.println("用户名:" + name);
      System.out.println("密  码:" + password);
      // 获取参数名为“hobby”的值
      String[] hobbys = request.getParameterValues("hobby");
      System.out.print("爱好:");
      for (int i = 0; i < hobbys.length; i++) {
        System.out.print(hobbys[i] + ",");
      }
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
      doGet(request, response);
    }
  }

观察控制台的效果可以发现:POST方式可以解决,而GET方式不能解决

可以得出结论:setCharacterEncoding()方法只对POST提交方式有效。

对于GET方式,我们可以这样:

public class RequestParamsServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
    //设置request对象的解码方式
    request.setCharacterEncoding("utf-8");
    String name = request.getParameter("username");
    name=new String(name.getBytes("iso8859-1"),"utf-8");
    String password = request.getParameter("password");
      System.out.println("用户名:" + name);
      System.out.println("密  码:" + password);
      // 获取参数名为“hobby”的值
      String[] hobbys = request.getParameterValues("hobby");
      System.out.print("爱好:");
      for (int i = 0; i < hobbys.length; i++) {
        System.out.print(hobbys[i] + ",");
      }
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
      doGet(request, response);
    }
  }

添加name=new String(name.getBytes(“iso8859-1”),“utf-8”); 就是先用错误码表"iso8859-1"将用户名重新编码,然后使用utf-8进行解码。

当然还可以l了解一下通过配置Tomcat解决GET提交方式中文乱码问题:

在server.xml中的Connector节点下添加一个useBodyEncodingForURI="true"并在程序中调用response.setCharacterEncoding(“GBK”)。

相关文章
|
26天前
|
XML JSON 安全
SSM:请求参数与回显&json
本文介绍了请求参数处理、过滤器和拦截器的使用方法。包括如何通过 `@RequestParam` 和 `@ModelAttribute` 绑定请求参数,使用 Lombok 简化实体类开发,实现过滤器处理字符编码,以及配置拦截器进行请求前后的处理。同时,还展示了如何使用 `@ResponseBody` 返回 JSON 数据,并解决了 JSON 编码问题。
|
5月前
|
应用服务中间件
Request请求参数----中文乱码问题
Request请求参数----中文乱码问题
|
5月前
|
编解码 Java
请求参数中文乱码-POST解决方法
请求参数中文乱码-POST解决方法
|
4月前
|
JSON 前端开发 Java
获取HTTP请求参数的方法
获取HTTP请求参数的方法
|
5月前
|
Java API 数据安全/隐私保护
获取HTTP请求参数的方法详解
获取HTTP请求参数的方法详解
|
6月前
【SpringMVC】解决方案:获取请求参数乱码的问题 (POST方式请求参数乱码)
【SpringMVC】解决方案:获取请求参数乱码的问题 (POST方式请求参数乱码)
78 1
|
6月前
|
应用服务中间件
Request请求参数中文乱码处理
Request请求参数中文乱码处理
168 0
|
6月前
【SpringMVC】获取 -请求参数- 的多种方式
【SpringMVC】获取 -请求参数- 的多种方式
63 0
|
存储 应用服务中间件 开发者
SpringMVC @RequestHeader @CookieValue 处理获取请求参数的乱码问题
SpringMVC @RequestHeader @CookieValue 处理获取请求参数的乱码问题
99 0
|
API
SpringMVC 获取请求参数 的几种方式
SpringMVC 获取请求参数 的几种方式
77 2