JSP页面+Servlet乱码问题解决方法
jsp产生乱码,从以下4个完整流程方面找原因:
前端jsp传值设置编码格式
后台servlet接收请求参数request设置编码格式
后台servlet返回参数response设置编码格式
前端jsp接收后台返回参数
1、对于前端jsp传值设置编码格式:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
这个默认在jsp页面的第一行,设置如上。本文以utf-8格式编码为例
对于这个编码设置,应理解为:该jsp页面显示的文本等编码格式,比如页面标题,文本框标题等。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>*****</title>
</head>
接着是在<head>标签下的<meta>设置utf-8编码格式,对于这个编码设置,应理解为:该jsp页面携带的请求参数向后台传值时的
编码格式。
2、后台servlet接收request请求参数和返回response参数,归为一类讲解。
对于GET请求和POST请求同样设置:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("application/json; charset=utf-8");
doGet(req,resp);
}
在servlet的HttpServletRequest和HttpServletResponse参数设置编码格式:
HttpServletRequest 设置:req.setCharacterEncoding("UTF-8");
是用来接收jsp请求的参数并转码;跟第一步中在jsp页面请求参数中设置编码格式互为:编码——>解码。
HttpServletResponse 设置:resp.setContentType("application/json; charset=utf-8");
是用来设置后台servlet处理完请求返回给前端jsp页面的编码格式,跟第4步中的jsp页面接收后台返回参数设置的解码格式互为:
编码——>解码。
3、前端jsp页面接收后台servlet处理请求完后设置编码
通常这个可以忽略,拿出来讲解只是为了让大家更好的理解整个前端+后台编码解码逻辑流程。
对于这里接收的编码格式,无需做特别处理,按照原本的编码设置就好:
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*" pageEncoding="UTF-8"%>
解析后台传值的编码,设置为utf-8统一整个编码格式设置就好了。
凡是遇到jsp乱码的问题,先从以上几个方面入手分析,看到网上有什么关乎到tomcat应用服务器里server.xml的编码格式设置之类的,把问题弄得太复杂了。
关注个人技术公众号:nick_coding1024
不定期分享最新前沿技术框架和bat大厂常用技术等,加群不定期分享行业内大牛直播讲课以及获得内退一线互联网公司机会。
---------------------CSDN技术博客
原文:https://blog.csdn.net/xuri24/article/details/84280802