第17周 第3章Servlet开发应用实践 --- 解决中文乱码问题

乱码产生的原因是数据发送方和接收方使用了不同字符集进行解析。解决乱码的思路是确保数据发送方和接收方统一使用utf-8编码。

中文乱码问题的产生原因

  1. 数据的发送方和接收方使用不同的字符集进行解析时,会产生乱码。
  2. 浏览器和服务器端编码不匹配是常见的乱码问题原因
java 复制代码
package com.imooc.servlet.encoding;

// 引入必要的Java类
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;

// 使用@WebServlet注解来配置Servlet的访问路径为 "/encoding/search"
@WebServlet("/encoding/search")
public class SearchServlet extends HttpServlet {
    
    // 重写HttpServlet的doGet方法,用于处理GET请求
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // 获取GET请求中的参数"keyword"
        // 在Tomcat 8以后,默认对GET请求的参数使用UTF-8编码进行解析
        // 在Tomcat 8以前,默认使用ISO-8859-1编码,需要在server.xml中配置字符集
        String keyword = request.getParameter("keyword");
        
        // 输出获取到的关键字到控制台,可能会出现乱码
        System.out.println(keyword);
        
        // 设置响应的内容类型和字符编码,表示返回HTML格式的文本内容,并确保浏览器以UTF-8解码
        response.setContentType("text/html;charset=utf-8");
        
        // 向客户端返回一个HTML格式的文本响应,输出获取到的关键字
        response.getWriter().println(keyword);
    }

    // 重写HttpServlet的doPost方法,用于处理POST请求
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // 设置请求体的字符编码为UTF-8,用于正确解析POST请求中的参数
        // 这样可以避免POST请求中的中文参数出现乱码
        request.setCharacterEncoding("UTF-8");
        
        // 获取POST请求中的参数"keyword",使用设置的UTF-8编码解析
        String keyword = request.getParameter("keyword");
        
        // 输出获取到的关键字到控制台,确保不会出现乱码
        System.out.println(keyword);
        
        // 设置响应的内容类型和字符编码,表示返回HTML格式的文本内容,并确保浏览器以UTF-8解码
        response.setContentType("text/html;charset=utf-8");
        
        // 向客户端返回一个HTML格式的文本响应,输出获取到的关键字
        response.getWriter().println(keyword);
    }
}
相关推荐
luteres12 分钟前
Mybatis+SSM整合笔记
java·开发语言·mybatis
覆东流7 小时前
7.Java数组
java·开发语言·后端
m0_719084117 小时前
限流和获取请求ip的方法
java
lzhdim7 小时前
提高 SQL 语句执行速度的方法
java·开发语言·数据库·sql·oracle
深漂的华哥8 小时前
Ruoyi-Plus前后端分离场景下,数据加密传输
java·spring boot·后端·开源·maven·ruoyi
落魄大学生之流水线上谋生计9 小时前
Java锁全面指南:从基础概念到企业级应用
java·开发语言
爱学习的小白柏10 小时前
【AI问数技术】多Agent协同架构:查询规划/SQL生成/洞察分析/报告生成
java·网络·人工智能·windows·sql·架构·llama
码匠许师傅11 小时前
【C++ 面试真题】30. 聊聊 C++ 的互斥锁与读写锁
java·c++·面试
沙盘客11 小时前
AFSIM 示例解读(03)· 六自由度飞行仿真 six_dof(下):机场运作与弹道导弹投送
java·javascript·经验分享
CHANCE V11 小时前
集合排序和流排序
java