我們知道JSP頁面是需要轉換為servlet的,在轉換進程中肯定是要進行編碼的。在JSP轉換為servlet進程中下面1段代碼起到相當重要的作用。
在上面代碼中有兩個地方存在編碼:pageEncoding、contentType的charset。其中pageEncoding是jsp文件本身的編碼,而contentType的charset是指服務器發送給客戶端時的內容編碼。
在前面1篇博客中就提到過(java中文亂碼解決之道(4)-----java編碼轉換進程)jsp在轉換為Servlet的進程中是需要經過主要的3次編碼轉換進程(除去數據庫編碼轉換、頁面參數輸入編碼轉換):
第1次:轉換為.java文件;
第2次:轉換為.class文件;
第3次:業務邏輯處理后輸出。
第1階段
JVM將JSP編譯為.jsp文件。在這個進程中pageEncoding就起到作用了,JVM首先會獲得pageEncoding的值,如果該值存在則采取它設定的編碼來編譯,否則則采取file.encoding編碼來編譯。
第2階段
JVM將.java文件轉換為.class文件。在這個進程就與任何編碼的設置都沒有關系了,不管JSP采取了甚么樣的編碼格式都將無效。經過這個階段后.jsp文件就轉換成了統1的Unicode格式的.class文件了。
第3階段
后臺經過業務邏輯處理后將產生的結果輸出到客戶端。在這個進程中contentType的charset就發揮了功效。如果設置了charset則閱讀器就會使用指定的編碼格式進行解碼,否則采取默許的ISO⑻859⑴編碼格式進行解碼處理。
流程如以下:
-----原文出自:http://cmsblogs.com/?p=1518,請尊重作者辛苦勞動成果,轉載說明出處.
-----個人站點:http://cmsblogs.com