我們知道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編碼格式進行解碼處理。
流程如如下:
<a href="http://cmsblogs.com/?p=1518">原文連結</a>