温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Servlet如何防止乱码

发布时间:2026-09-01 06:18:07 来源:亿速云 阅读:103 作者:小樊 栏目:编程语言

在 Java Web 开发中,Servlet 防止乱码的核心原则是:
请求和响应都要明确指定字符编码,并且要在读取/输出数据之前设置。

下面按常见场景说明。


一、防止请求参数乱码(接收数据)

1. POST 请求

POST 请求体中的参数需要设置:

request.setCharacterEncoding("UTF-8");

✅ 必须在 第一次调用 request.getParameter() 之前 设置。

示例:

protected void doPost(HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    String name = request.getParameter("name");
}

2. GET 请求

GET 参数在 URL 中,Tomcat 默认按 ISO-8859-1 解码。

方式一:手动转码(不推荐但常用)

String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");

方式二:修改 Tomcat 配置(推荐)

在 conf/server.xml 中:

<Connector URIEncoding="UTF-8" ... />

二、防止响应乱码(返回数据)

1. 设置响应编码(非常重要)

response.setContentType("text/html;charset=UTF-8");

或者分开写:

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");

✅ 必须在 response.getWriter() 之前 设置。

示例:

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("中文");

三、JSP 页面防止乱码

JSP 顶部加:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>

四、统一解决方案(推荐)

1. 使用过滤器(Filter)

public class EncodingFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp,
                         FilterChain chain)
            throws IOException, ServletException {
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        chain.doFilter(req, resp);
    }
}

web.xml 配置:

<filter>
    <filter-name>encoding</filter-name>
    <filter-class>com.example.EncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

五、常见乱码原因总结

原因 解决
没设 request 编码 setCharacterEncoding("UTF-8")
GET 默认 ISO Tomcat URIEncoding
响应未设编码 setContentType("text/html;charset=UTF-8")
JSP 编码不一致 pageEncoding + contentType
数据库编码不一致 数据库、连接串统一 UTF-8

如果你用的是 Spring Boot / Spring MVC,也可以告诉我,我可以直接给你对应的最佳实践。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手