JSP

JSP中的pageEncoding和contentType属性

我爱IT资讯库   2021/02/24
关于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"%>

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



热门内容

对XX证券报关于物联网操作系统的几个问题的答复

XX证券报提问了几个关于物联网和物联网操作系统的问题,个人表达了一些粗陋的观点,在这里发表出来,与行业朋友交流和探... ...
In语句优化

In语句优化

In语句的优化 现有两张表: CLINIC_ORGANISM 数据量:1400 LAB_DRUGRESISTITE... ...
fuzzysearch, 在JavaScript中,快速而快速的模糊搜索

fuzzysearch, 在JavaScript中,快速而快速的模糊搜索

源代码名称:fuzzysearch源代码网址:http://www.github.com/bevacqua/fuzzys ...

SQL Server里的 ISNULL 与 NULLIF

SQL Server 中有两个参数,语法:     ISNULL(check_... ...

判断SD是否存在及其容量查询

这个非常简单,直接上代码: MainActivity: package com.home.getsdinf... ...

Python:如何排序(sort)

一、前言 python的列表(list)有两个排序方法: 一种是内建的list.sort()方法,可以直接改变列表的内容 ...

boost库在工作(5)作用域智能指针scoped_ptr之四

第二种情况,主要就是使用在调用异常抛出的函数的地方。如下面的例子: //异常抛出的函数,适合使用智能指针... ...

Error:couldnotopen`C:\ProgramFiles\Java\jre6\lib\i386\jvm.cfg'

昨天刚过情人节!哈哈,好久没记录学习内容了,今天在房子闲着没事重新安装jdk,按道理很简单的; 第一步下载jdk; ...

第49周二

晚上总结下今天,主要是在完善用户需求文档,同时看了jquery相关的操作技巧,主要是想学习jquery源码,在知乎jqu ...

C++ #include 和 using std::string

今天,偶尔写了一个小小的程序,关于字符串问题程序。 比如,我想连续打印用户输入的字符串。 #include&l... ...

Struts Hibernate Spring 经典面试题

Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建Ses... ...

SAP Performance浅析

本文来源于:http://scnblogs.techweb.com.cn/tcsapbw/archives/106... ...

数据库MySQL与xls文件的互导

      最近的一个项目需要将xls表导入到MySQL数据库中和将MySQL数据表导出到... ...

Head-of-Line Blocking (线头阻塞)

Head of Line (HOL) Blocking 产生的原因: 概念:队列的首个packet由于它的目的... ...

Python set的高效利用

python set的应用   ... ...

CollectionFrameWork

collectionframework如下: collection ├list │├linkedlist │├array ...

JAVA访问修饰符构造函数的问题(转)

java访问修饰符 构造函数的问题 java访问修饰符-限定符总结(类比c#) java访问修饰符--------- ...

PAT甲1004CountingLeaves【dfs】

1004counting leaves(30 分) a family hierarchy is usually p ...

171.[LeetCode]Excel Sheet Column Number

题目: Related to question Excel Sheet Column Title ... ...

在.NET中获取一台电脑名,IP地址及当前用户名

在.NET中获取一台电脑名,IP地址及当前用户名是非常简单,以下是我常用的几种方法,如果大家还有其他好的方法,可以回复一... ...
sun directory server

sun directory server

Sun One Directory Server(LDAP)安装和调整指南   ... ...
黑客讲故事:攻下隔壁女生路由器后,我都做了些什么

黑客讲故事:攻下隔壁女生路由器后,我都做了些什么

路由器被蹭网后,我有被黑的风险吗? Evi1m0,来自知道创宇,邪红色信息安全组织创始人 其实这个问题可以... ...

oracle 10g for redhat5

解压文件 解压文件命令: unzip 10201_database_linux32.zip ... ...

什么是I2C协议?

I2C协议是单片机与其它芯片常用的通讯协议,由于只需要两根线,所以很好使用。 一. I2C协议技术性能:&nb... ...

[USACO15DEC]最大流MaxFlow

题目:洛谷p3128。 题目大意:一棵n个点的树,每次将两个节点最短路径所覆盖的所有节点的流量加1。问你最后流量最大的节 ...

kde4.1 alpha1

KDE Project Ships First Alpha of KDE 4.1 KDE Commun... ...

oracle 函数 和 优化

sql语句中,如果where条件里面含有not, !=, <> ,null ,则即使该字段建有索引,也... ...
09年中国互联网企业市值排名

09年中国互联网企业市值排名

这是一个最坏的时代,也是一个最好的时代。自07年底美国次贷危机以来,全球经济发生了巨大的变化。股票市场也随之跌荡起... ...

用于发送UDP消息的SQL Server 扩展存储过程

下载源文件 13.1 kb介绍我希望能够发布 sql server 表更新,因此修改了微软的示例扩展存储过程 xp_he ...

Cache与Fetch(二)

这两天一直百思不得其解的问题终于解决了,这个问题如下: 通过HQL:“select distinct forumGr... ...