JSP之pageEncoding和contentType属性讲解

news/2024/6/29 12:02:00 标签: jsp, encoding, java, tomcat, 编译器, 服务器

 

关于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的encodingjava源码。

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"%>

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

文章出处:http://www.diybl.com/course/3_program/java/javajs/2007109/77135.html


http://www.niftyadmin.cn/n/1051504.html

相关文章

jsonp跨域技术【php技术】

html代码 <html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <title>jsonp跨域技术</title> <style type"text/css"> #h1{ …

python连接MySQL

1&#xff09;创建Python的MySQL连接 connMySQLdb.connect(hostlocalhost,port3066,userlonger,passwdlonger123,dbdemo) 2&#xff09;通过连接获取游标 mycurconn.cursor() 3&#xff09;执行一个建表语句 mycur.execute(create table testa(id number(10),name varchar(20))…

python Thread 函数

构造方法&#xff1a; Thread(groupNone, targetNone, nameNone, args(), kwargs{}) group: 线程组&#xff0c;目前还没有实现&#xff0c;库引用中提示必须是None&#xff1b;   target: 要执行的方法&#xff1b;   name: 线程名&#xff1b;   args/kwargs: 要传入方…

struts之Tiles框架标签库介绍归纳

收集&#xff1a; 一&#xff09; 作者&#xff1a; Chuck Cavaness 原文&#xff1a; http://www.onjava.com/pub/a/onjava/excerpt/progjakstruts_14/index3.html译者&#xff1a; blasterboy Email: zhangjybpusoft.com.cn MSN: sino…

Matlab中如何作线性回归(拟合)

2019独角兽企业重金招聘Python工程师标准>>> 一元线性回归 用ya*xb来拟合一组数据{{x1,y1},{x2,y2}…{xn,yn}} matlab中使用polyfit xdata(:,1); ydata(:,2); ppolyfit(x,y,1); p(1)为斜率a&#xff0c;p(2)为截距b 多元线性回归 用ya1*x1a2*x2..am*xm来拟合…

centos7网卡找不到

#以下代码适用于作者本机&#xff0c;使用前请先测试 centos7只有lo 虚拟机安装centos7后只有lo网卡的解决办法发布时间&#xff1a;2017-06-03 来源&#xff1a;服务器之家 虚拟机安装centos7之后&#xff0c;执行ip addr发现只有一个网卡lo,进入/ect/sysconfig/network-scrip…