Jsp - pageEncoding 解析

    pageEncoding 作为 Jsp page 指令的一个属性,表示当前 jsp 文件的编码格式,由于以前多用 contentType 来解决编码问题,从来没有用过这个属性,不过这个属性也不是没用,记录一下:


pageEncoding:


    pageEncoding : Jsp 需要由 jsp 引擎先转化为 servlet 源代码然后再编译 ,最后由 servlet 引擎载入执行。


画个图:(skitch )

 

    Jsp - pageEncoding 解析_第1张图片

 



那么 , pageEncoding 就主要用在(建议只用在) jsp 转为 servlet code 这步,由于 jsp 引擎需要读取 jsp file ,那么就需要知道这个 jsp file 的编码,以防里面的非英文字符转化到 servler code 时不一致。当然contentType也有这个副作用,下面再说。

 

   注意: 第一次默认使用 iso8809-1 读取 jsp 文件以获得 jsp 中 pageEncoding 的值,当然无论什么编码 ( 除了utf-16 ? ) 下英文的编码都一样,这样读去开头的 jsp 指令不会有错的。


contentType:


    contentType : 用处就很多了,主要用于设置 http 头 的 content-type ,来指示 servlet 引擎以什么编码向浏览器传递信息以及指示浏览器以什么编码来显示服务器传过来的信息。


  不过在 servlet 以及 jsp 中也有点副作用了。 在 jsp 中如果没有设置 pageEncoding ,jsp 引擎 则读取 contentType里的 charset 来替代 pageEncoding 作为 jsp 文件的编码,如果两者都没有则用iso8809-1读取了,那么毫无疑问里面由中文的话,必定乱码。


比较:


    那么既然 contentType 可以完成 pageEncoding 的工作,为什么还要 pageEncoding 这个属性呢?我觉得是为了一个特殊情况, 如果 jsp 文件是编码 A ,但是想要在网络上以 B 编码 传输,以及浏览器以 B 编码来显示服务器信息,则这时候只能设置 jsp 文件 pageEncoding 为 A ,contentType charset 为 B编码 。

 

    一般,如果 jsp 文件编码和网络传输编码一致的话,则只设置contentType charset 即可,这也正是我以前一直的做法,不过这并不意味着 pageEncoding 没用了,毕竟还有上述的特殊条件。






 

 

你可能感兴趣的:(jsp,工作,servlet,浏览器)