首先我们应该知道,JSP页面在被客户端请求时首先会被服务器翻译成Servlet的java文件,然后编译成.class文件,最后执行输出至客户端。
pageEncoding
<%@page pageEncoding="UTF-8"%>
pageEncoding是告诉服务器当前JSP页面所使用的编码格式,方便服务器将JSP页面翻译成Servlet。所以只要与当前JSP页面保存时使用的编码格式相同就不会出现乱码。
contentType
<%@page contentType="text/html;charset=UTF-8"%>
contentType与response.setContentType()作用相同,它共有两个作用一是设置响应字符流的编码,二是设置content-Type响应头
则客户端访问一个JSP页面时可以分为如下三步,如下图:
1. 服务器通过pageEncoding可以知道当前JSP所用编码,然后将JSP页面翻译为Java文件,并转码成UTF-8.
2. JVM将UTF-8的Java文件编译成.class文件
3. 服务器通过.class文件执行结果转换成contentType所指定的编码格式,并输出至客户端。
还有要注意的就是pageEncoding 和 contentType的默认值都是ISO-8859-1,但是如果设置其中任意一个,另外一个也会与其值相同。