我們知道JSP頁面是需要轉換為servlet的,在轉換過程中肯定是要進行編碼的。在JSP轉換為servlet過程中下面一段代碼起到至關重要的作用。
在上面代碼中有兩個地方存在編碼:pageEncoding、contentType的charset。其中pageEncoding是jsp檔案本身的編碼,而contentType的charset是指伺服器發送給用戶端時的内容編碼。
在前面一篇部落格中就提到過(java中文亂碼解決之道(四)-----java編碼轉換過程)jsp在轉換為Servlet的過程中是需要經過主要的三次編碼轉換過程(除去資料庫編碼轉換、頁面參數輸入編碼轉換):
第一次:轉換為.java檔案;
第二次:轉換為.class檔案;
第三次:業務邏輯處理後輸出。
第一階段
JVM将JSP編譯為.jsp檔案。在這個過程中pageEncoding就起到作用了,JVM首先會擷取pageEncoding的值,如果該值存在則采用它設定的編碼來編譯,否則則采用file.encoding編碼來編譯。
第二階段
JVM将.java檔案轉換為.class檔案。在這個過程就與任何編碼的設定都沒有關系了,不管JSP采用了什麼樣的編碼格式都将無效。經過這個階段後.jsp檔案就轉換成了統一的Unicode格式的.class檔案了。
第三階段
背景經過業務邏輯處理後将産生的結果輸出到用戶端。在這個過程中contentType的charset就發揮了功效。如果設定了charset則浏覽器就會使用指定的編碼格式進行解碼,否則采用預設的ISO-8859-1編碼格式進行解碼處理。
流程如如下:

-----原文出自:http://cmsblogs.com/?p=1518,請尊重作者辛勤勞動成果,轉載說明出處.
-----個人站點:http://cmsblogs.com
PS:如果你覺得文章對你有所幫助,别忘了推薦或者分享,因為有你的支援,才是我續寫下篇的動力和源泉!
作者:chenssy。一個專注于【死磕 Java】系列創作的男人
出處:https://www.cnblogs.com/chenssy/p/4235191.html
作者個人網站:https://www.cmsblogs.com/。專注于 Java 優質系列文章分享,提供一站式 Java 學習資料
目前死磕系列包括:
1. 【死磕 Java 并發】:https://www.cmsblogs.com/category/1391296887813967872(已完成)
2.【死磕 Spring 之 IOC】:https://www.cmsblogs.com/category/1391374860344758272(已完成)
3.【死磕 Redis】:https://www.cmsblogs.com/category/1391389927996002304(已完成)
4.【死磕 Java 基礎】:https://www.cmsblogs.com/category/1411518540095295488
5.【死磕 NIO】:https://www.cmsblogs.com/article/1435620402348036096
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。