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大廠常用技術等,加群不定期分享行業內大牛直播講課以及獲得內退一線網際網路公司機會。