如何解决JavaWeb中客户端和服务器的中文乱码问题

浏览器和服务器的中文乱码

  • 准备工作
    • 创建一个新的Java Enterprse项目
    • 创建Form表单向服务器提交数据
  • 获取用户向服务器中提交的数据
    • 编写requestServlet
  • 往客户端回传中文数据
    • 解决方法一 (不推荐使用)
    • 解决方法二

准备工作

创建一个新的Java Enterprse项目

  1. 新建项目
    如何解决JavaWeb中客户端和服务器的中文乱码问题_第1张图片
  2. 注意 这里使用的是Tomcat服务器。点击下一步
    如何解决JavaWeb中客户端和服务器的中文乱码问题_第2张图片
  3. 勾选 Servlet
  4. 版本 Version 选择 Java EE 8
  5. 点击Finish

创建Form表单向服务器提交数据

  1. 在webapp 下新建一个form.html 如图:
    如何解决JavaWeb中客户端和服务器的中文乱码问题_第3张图片
  2. 具体代码如下
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/web02/requestServlet" method="post">
    用户名: <input type="text" name="username"><br>
   密码:  <input type="password" name="password"><br>
    兴趣爱好: <input type="checkbox" name="hobby" value="java">java
    <input type="checkbox" name="hobby" value="c++">c++
     <input type="checkbox" name="hobby" value="js">js<br>
    <input type="hidden" name="hidden" value="znb">
    <input type="submit">
</form>
</body>
</html>

获取用户向服务器中提交的数据

  1. 创建RequestServlet类
    如何解决JavaWeb中客户端和服务器的中文乱码问题_第4张图片
  2. 点击OK
    如何解决JavaWeb中客户端和服务器的中文乱码问题_第5张图片

编写requestServlet

  1. 添加注解
@WebServlet(name = "requestServlet", value = "/requestServlet")
  1. 重写方法
@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //解决中文乱码问题,读取服务器获得的中文数据。
        request.setCharacterEncoding("utf-8");
        System.out.println("name = " + request.getParameter("username"));
        System.out.println("pwd = " + request.getParameter("password"));
        String[] hobbies = request.getParameterValues("hobby");
        System.out.println("兴趣爱好 = " + Arrays.asList(hobbies));
    }
  1. 完整的RequestServlet类如下:
package com.znb.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.Arrays;

@WebServlet(name = "requestServlet", value = "/requestServlet")
public class RequestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //解决中文乱码问题,读取服务器获得的中文数据。
        request.setCharacterEncoding("utf-8");
        System.out.println("name = " + request.getParameter("username"));
        System.out.println("pwd = " + request.getParameter("password"));
        String[] hobbies = request.getParameterValues("hobby");
        System.out.println("兴趣爱好 = " + Arrays.asList(hobbies));
    }
}

  1. 设置并运行Tomcat服务器进行测试
    如何解决JavaWeb中客户端和服务器的中文乱码问题_第6张图片
  2. 访问 http://localhost:8080/web02/form.html
  3. 输入账号密码勾选兴趣 点击提交
  4. 测试结果如下:
    英文:
    如何解决JavaWeb中客户端和服务器的中文乱码问题_第7张图片
    中文:
    如何解决JavaWeb中客户端和服务器的中文乱码问题_第8张图片

往客户端回传中文数据

  1. 创建ResponseServlet类进行测试
package com.znb.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "responseServlet", value = "/responseServlet")
public class ResponseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter writer = response.getWriter();
        writer.write("response content!!!");
        writer.write("张宁波");
    }
}
  1. 重新启动Tomcat服务器,访问 http://localhost:8080/web02/responseServlet
  2. 运行结果如下,出现中文乱码问题。
    如何解决JavaWeb中客户端和服务器的中文乱码问题_第9张图片

解决方法一 (不推荐使用)

  1. 在重写的方法中添加如下语句
		//往客户端(这里的客户端指的是浏览器)回传 字符串数据
        //设置服务器字符集为utf-8
        response.setCharacterEncoding("utf-8");
        //通过响应头,设置浏览器也使用utf-8字符集
        response.setHeader("Content-Type","text/html;charset=UTF-8");
  1. 运行结果如下:
    如何解决JavaWeb中客户端和服务器的中文乱码问题_第10张图片

解决方法二

  1. 在重写的方法中添加如下语句
		//它会同时设置浏览器和客户端使用UTF-8字符集, 还设置了响应头
        //此方法一定要在获取流对象之前调用才有效
        response.setContentType("text/html;charset=UTF-8");
  1. 运行结果如下:
    如何解决JavaWeb中客户端和服务器的中文乱码问题_第11张图片

你可能感兴趣的:(Web服务器,服务器,java-ee)