JSP文件中的pageEncoding、contentType

本文解析了JSP页面中pageEncoding与contentType的区别与联系,详细介绍了它们如何影响JSP源文件编码及响应内容编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单的来讲,pageEncoding是用来设置JSP源文件的编码方式,而contentType是用来设置响应内容的MIME类型、及响应内容的编码方式。

JSP运行过程:
首先由客户端浏览器发出请求,JSP容器接收请求后,JSP容器对JSP代码进行以下4个操作过程(如果不是首次访问且JSP文档没有更改过则直接执行第4步)
1、代码转换。JSP容器将JSP文件转换成Java Servlet文件(.java文件)。
2、编译。JSP容器编译Java Servlet文件,生成.class文件。
3、生成实例。JSP容器加载编译后的.class文件,并创建实例。
4、响应请求。JSP容器调用该实例的请求处理方法处理客户请求,并将响应信息回复给客户端。

这里写图片描述

第一阶段:将jsp编译成Servlet(.java)文件。用到的指令是pageEncoding,根据pageEncoding=“XXX”的指示,找到编码的规则为“XXX”,服务器在将JSP文件编译成.java文件时会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8编码的JAVA源码(即.java)。

第二阶段:从Servlet文件(.java)到Java字节码文件(.class),从UTF-8到UTF-8。JAVAC用UTF-8的encoding读取java源码,编译成UTF-8编码的二进制码(即.class)。这一过程是由JVM的内在规范决定的,不受外界控制。

第三阶段:从服务器到浏览器,这在一过程中用到的指令是contentType。服务器载入和执行由第二阶段生成出来JAVA二进制码,输出的结果,也就是在客户端可见到的结果,在这次输出过程中,由contentType属性中的charset来指定,将UTF8形式的二进制码以charset的编码形式来输出。如果没有人为设定,则默认的是ISO-8859-1的形式。

pageEncoding和contentType都可以设置JSP源文件(JSP页面本身的编码方式)和响应正文中的字符集编码。但也有区别:


设置JSP源文件字符集编码时,优先级为pageEncoding>contentType。如果都没有设置,默认ISO-8859-1。
设置响应输出的字符集编码时,优先级为contentType>pageEncoding。如果都没有设置,默认ISO-8859-1。

与contentType效果一样的设置方式还有:

html页面charset, response.setCharacterEncoding(), response.setContentType(), response.setHeader();其中response.setContentType(), response.setHeader(); 优先级最好,其次response.setCharacterEncoding();再者是<%@page contentType="text/html; chareset=utf-8"%>,最后是<meta http-equiv="content-type"content="text/html; charset=gb2312" />

web页面输入编码( 输入框输入的字体编码 ):

在设置页面编码<%@page contentType="text/html; chareset=gbk"%>的同时,也就指定了页面的输入编码;如果页面的显示编码被设置为UTF-8,那么用户所有的页面输入都会按照UTF-8编码;服务器端程序在读取表单输入之前要设定输入编码;表单被提交后,按照JSP容器对JSP文件的4个操作过程进行处理。但是页面需要告诉服务器当前页面的编码方式;request.setCharacterEncoding(),能修改Serverlet获取请求的编码,response.setCharacterEncoding(),能修改Serverlet返回结果的编码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值