ContentType 屬性指定響應的 HTTP 內容類型。若是未指定 ContentType,默認爲 text/HTML。 語法 Response.ContentType [= ContentType ] 參數 ContentType java
pageEncoding是jsp文件自己的編碼
contentType的charset是指服務器發送給客戶端時的內容編碼
JSP要通過兩次的「編碼」,第一階段會用pageEncoding,第二階段會用utf-8至utf-8,第三階段就是由Tomcat出來的網頁, 用的是contentType。
第一階段是jsp編譯成.java,它會根據pageEncoding的設定讀取jsp,結果是由指定的編碼方案翻譯成統一的UTF-8 JAVA源碼(即.java),若是pageEncoding設定錯了,或沒有設定,出來的就是中文亂碼。
第二階段是由JAVAC的JAVA源碼至java byteCode的編譯,不論JSP編寫時候用的是什麼編碼方案,通過這個階段的結果所有是UTF-8的encoding的java源碼。瀏覽器
也就是說:服務器
pageEncoding:設置JSP源文件和響應正文中的字符集編碼。
contentType:設置JSP源文件和響應正文的字符集編碼及MIME類型。jsp
可見,pageEncoding和contentType均可以設置JSP源文件和響應正文中的字符集編碼。但也有區別:
設置JSP源文件字符集時,優先級爲pageEncoding>contentType。若是都沒有設置,默認ISO-8859-1。
設置響應輸出的字符集時,優先級爲contentType>pageEncoding。若是都沒有設置,默認ISO-8859-1。 編碼
能夠簡單認爲是,pageEncoding是jsp文件自己的編碼;contentType的charset是指服務器發送給客戶端時的內容編碼。 例如:pageEncoding="GBK"。這句話的意思是,告訴JVM 這個jsp自己採用的"GBK"編碼,在JSP編譯成Servlet傳給JVM的時候,就用「GBK」的編碼方式將Jsp網頁源文件翻譯成統一的UTF- 8形式的Java字節碼。若是不加設定,則JVM默認的用ISO-8859-1這種編碼方式。contentType裏的charset=gbk,指的是 此網頁文件輸出到瀏覽器的輸出方式爲gbk。在這個過程當中,一個JSP的源文件須要通過三個階段,兩次編碼,才能完成一次完整的輸出。spa
下面總結這個流程及編碼的過程:翻譯
第一階段:將jsp編譯成Servlet(.java)文件。用到的指令是pageEncoding,根據pageEncoding=「XXX」的 指示,找到編碼的規則爲「XXX」,服務器在將JSP文件編譯成.java文件時會根據pageEncoding的設定讀取jsp,結果是由指定的編碼方 案翻譯成統一的UTF-8編碼的JAVA源碼(即.java)。utf-8
第二階段:從Servlet文件(.java)到Java字節碼文件 (.class),從UTF-8到UTF-8。在這一階段中,不論JSP編寫時候用的是什麼編碼方案,通過這個階段的結果所有是UTF-8的 encoding的java源碼。JAVAC用UTF-8的encoding讀取java源碼,編譯成UTF-8編碼的二進制碼(即.class),這是 JVM對常數字串在二進制碼(java encoding)內表達的規範。這一過程是由JVM的內在規範決定的,不受外界控制。ci
第三階段:從服務 器到瀏覽器,這在一過程當中用到的指令是contentType。服務器載入和執行由第二階段生成出來JAVA二進制碼,輸出的結果,也就是在客戶端可見到 的結果,在此次輸出過程當中,由contentType屬性中的charset來指定,將UTF8形式的二進制碼以charset的編碼形式來輸出。若是沒 有人爲設定,則默認的是ISO-8859-1的形式。get