Java pageEncoding原理详解
首先看下文章解释:
意思是jsp文件本身的编码
巨大的疑问:这里有一个很大的问题,既然你都已经从jsp中读到了这条属性,证明内容读取正确,那你还需要知道这条属性所指的编码是什么干嘛?
下面务必来看看Jsp的编译原理
第一阶段是jsp编译成java
它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。
第二阶段是由JAVAC的JAVA源码至java byteCode的编译
不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。
JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。
第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码
输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效
-----------------------------------------------------------------------------------------------------------------------------------
概括流程:读取jsp -> 编译成java文件 -> 编译成class文件
可以得出:
第一次读取jsp时所用的编码肯定不是pageEncoding所指定的编码,因为既然能读到pageEncoding的属性的时候,肯定就知道jsp文件的编码,因为pageEncoding在jsp文件当中,不可能不读jsp文件就知道pageEncoding的属性
重点:
那么既然jsp都被读出来了,还需要pageEncoding属性(设置读取jsp文件的编码)干嘛
原因是,这里的读取是指的,编译成.java文件时,读取jsp的编码
分析原理就是:
用默认编码打开jsp得到pageEncoding属性 -> 使用pageEncoding属性设置的编码再次读取jsp -> 编译成.java文件
有意思的地方就在这里了,有人会问第一步用默认编码能获得未知编码的jsp文件中的pageEncoding吗,你怎么知道jsp文件用的是什么编码呢,那么,请仔细想想,pageEncoding属性的语言是英文,java所支持的编码是不是都是支持英文的呢
所以jsp文件编码、pageEncoding指定编码、Content-Type编码一致才能正确显示数据就是这个原因
相信已经透彻的讲了,已经没有能够浓缩的地方了,有什么不懂可以留言,一般常在,尽量帮你解决,伸出小手点个赞,谢谢 = =
jsp pageEncoding属性详解的更多相关文章
-
tomcat 三种部署方式以及server.xml文件的几个属性详解
一.直接将web项目文件件拷贝到webapps目录中 这是最常用的方式,Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.如果你想要修改这个默认 ...
-
android:exported 属性详解
属性详解 标签: android 2015-06-11 17:47 27940人阅读 评论(7) 收藏 举报 分类: Android(95) 项目点滴(25) 昨天在用360扫描应用漏洞时,扫描结果, ...
-
OutputCache属性详解(一)一Duration、VaryByParam
目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...
-
OutputCache属性详解(二)一 Location
目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...
-
OutputCache属性详解(三)— VaryByHeader,VaryByCustom
目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...
-
OutputCache属性详解(四)— SqlDependency
目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...
-
WPF依赖属性详解
WPF依赖属性详解 WPF 依赖属性 英文译为 Dependency Properties,是WPF引入的一种新类型的属性,在WPF中有着极为广泛的应用,在WPF中对于WPF Dependency P ...
-
HTML video 视频标签全属性详解
HTML 5 video 视频标签全属性详解 现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.C ...
-
Android组件---四大布局的属性详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4372222.html Android常见布局有下面几种: LinearL ...
随机推荐
-
使用Cookie实现跨域单点登录的原理
对于构建分布式系统来说业务功能的物理部署会随着新业务模块的增加而增加或改变物理部署的位置.而每个用户都有统一的帐号作为我们登录系统时的一个认证.当新业务或子系统部署在不同的物理机上,我们去访问不同的业 ...
-
Cannot install NodeJs: /usr/bin/env: node: No such file or directory
安装doxmate时,doxmate地址是:https://github.com/JacksonTian/doxmatenpm install doxmate -g 安装完后把错误:Cannot in ...
-
discuz判断用户登录
在include/common.inc.php 文件.程序开始先判断是否有cookie存到了sid值,然后解密cookie['auth']这个用户登录状态加密字符串,如果解密出来有uid值表示 ...
-
android service 学习
参考:http://www.cnblogs.com/allin/archive/2010/05/15/1736458.html http://www.cnblogs.com/allin/archive ...
-
Minimum Sum(思维)
Problem 1603 - Minimum Sum Time Limit: 2000MS Memory Limit: 65536KB Total Submit: 563 Accepted ...
-
从事web前端两年半后的迷茫
做了两年半的重构,突然有种迷茫的感觉,好像瓶颈了,不知道自己该怎么继续走下去,以前刚毕业的时候,总觉得自己有好多的东西要学在前端方面,所以有那个促使自己去学习的动力,每当没工作任务的时候,自己总是去主 ...
-
With As 获取 id parentId 递归获取所有
Declare @Id Int Set @Id = 5; ---在此修改父节点 With RootNodeCTE(Id,ParentId) As ( Select Id,Paren ...
-
用CMD开启、关闭软件
关闭 (正常) taskkill /IM 1.100.exe 开启 : "路径"
-
Mac下写博客工具ecto相关资料
下载地址: https://www.macupdate.com/app/mac/8918/ecto 相关注册码: http://www.cnblogs.com/yssgyw/p/3284501.htm ...
-
[C++]“error C2712: 无法在要求对象展开的函数中使用__try”解决方案
https://blog.csdn.net/shiqw5696/article/details/80664749 前段时间写了一篇关于C++异常捕获及异常处理的文章:c++异常捕获及异常处理try-t ...