我们知道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