当前位置: 首页 > news >正文

JSP中的pageEncoding和contentType的区别

转自:http://blog.csdn.net/yinyuan1987/article/details/3414646

这里引用论坛里朋友hafsky 的回答帖子,感觉总结的不错

和大家共享一下!

关于JSP页面中的pageEncoding和contentType两种属性的区别:
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源码。JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。
第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效

contentType的設定.

pageEncoding 和contentType的预设都是 ISO8859-1. 而随便设定了其中一个, 另一个就跟着一样了(TOMCAT4.1.27是如此). 但这不是绝对的, 这要看各自JSPC的处理方式. 而pageEncoding不等于contentType, 更有利亚洲区的文字 CJKV系JSP网页的开发和展示, (例pageEncoding=GB2312 不等于 contentType=utf-8)。

jsp文件不像.java,.java在被编译器读入的时候默认采用的是操作系统所设定的locale所对应的编码,比如中国大陆就是GBK,台湾就是BIG5或者MS950。而一般我们不管是在记事本还是在ue中写代码,如果没有经过特别转码的话,写出来的都是本地编码格式的内容。所以编译器采用的方法刚好可以让虚拟机得到正确的资料。
但是jsp文件不是这样,它没有这个默认转码过程,但是指定了pageEncoding就可以实现正确转码了。

举个例子:

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

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

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

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


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 2016-wing的年度总结
  • java中split() replace() replaceAll()三个函数分析
  • SPOJ-COLONY - Linearian Colony!简单二分思想
  • msfconsole 控制台使用和操作
  • 数据库范式
  • sed awk grep三剑客常用
  • 数据库事务隔离级别
  • 全排序算法
  • 用Spring+Junit4.4进行测试(使用注解)
  • Java HashMap 分析四篇连载
  • Leetcode 144. Binary Tree Preorder Traversal
  • 单页web应用是什么?它又会给传统网站带来哪些好处?
  • 深入理解HTML协议
  • BootStrap学习笔记
  • 深入解析 HTML DocumentType 元素
  • Angularjs之国际化
  • flutter的key在widget list的作用以及必要性
  • Java,console输出实时的转向GUI textbox
  • js递归,无限分级树形折叠菜单
  • Just for fun——迅速写完快速排序
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Redash本地开发环境搭建
  • 前端路由实现-history
  • 物联网链路协议
  • 2017年360最后一道编程题
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #Linux(Source Insight安装及工程建立)
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (23)Linux的软硬连接
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (二)JAVA使用POI操作excel
  • (九十四)函数和二维数组
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (七)Knockout 创建自定义绑定
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net core使用ef 6
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .net2005怎么读string形的xml,不是xml文件。
  • @Conditional注解详解
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [04] Android逐帧动画(一)
  • [20170705]diff比较执行结果的内容.txt
  • [2024-06]-[大模型]-[Ollama]- WebUI
  • [Android]一个简单使用Handler做Timer的例子
  • [BeginCTF]真龙之力
  • [BSidesCF 2019]Kookie1
  • [BZOJ3211]:花神游历各国(小清新线段树)