JSP页面的pageEncoding和contentType的区别


经常我们写JSP页面都会用到一下内容:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Insert title here





 

我们可以看到,第一句设置了页面的一些属性。

其中包含了,编译语言:java,显示格式html

后面的charset和pageencoding都是"ISO-8859-1",那么这两者有什么区别呢?

其实顾名思义,是很容易理解的;

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源码。

举个例子: 

 

<%@ page contentType="text/html;charset=utf-8" %> 


 

大都会打印出乱码,因为输入的“你好”是gbk的,但是服务器是否正确抓到“你好”不得而知。 

 

但是如果更改为 

 

<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK"%> 


 

这样就服务器一定会是正确抓到“你好”了。

 

 

那么,



这一句又是什么意思呢?

 

http-equiv 属性为名称/值对提供了名称。并指示服务器在发送实际的文档之前先在要传送给浏览器的 MIME 文档头部包含名称/值对。

当服务器向浏览器发送文档时,会先发送许多名称/值对。虽然有些服务器会发送许多这种名称/值对,但是所有服务器都至少要发送一个:content-type:text/html。这将告诉浏览器准备接受一个 HTML 文档。

使用带有 http-equiv 属性的  标签时,服务器将把名称/值对添加到发送给浏览器的内容头部.

 

 

 

你可能感兴趣的:(JSP页面的pageEncoding和contentType的区别)