JSP/Servlet-----charset 、pageEncoding差别
一、JSP/Servlet中的几个编码的作用
在JSP/Servlet中有4个地方可设置编码(例如以下)。当中前两个仅仅能用于JSP中,后两个可用于JSP和Servlet 中。
1、pageEncoding="UTF-8":设置JSP编译成Servlet时使用的编码。
JSP在server上是要先被编译成Servlet的。pageEncoding="UTF-8"的作用就是告诉JSP编译器在将JSP文件编译成Servlet时使用的编码。通常。在JSP内部定义的字符串(直接在JSP中定义,而不是从浏览器提交的数据)出现乱码时。非常多都是因为该參数设置错误引起的。比如,你的JSP文件是以GBK为编码保存的,而在JSP中却指定pageEncoding="UTF-8",就会引起JSP内部定义的字符串为乱码。
另外,该參数另一个功能。就是在JSP中不指定contentType參数,也不使用response.setCharacterEncoding方法时。指定对server响应进行又一次编码的编码
2、contentType="text/html;charset=UTF-8":指定对server响应进行又一次编码的编码。
在不使用response.setCharacterEncoding方法时。用该參数指定对server响应进行又一次编码的编码。
3、request.setCharacterEncoding(“UTF-8”):设置对client请求进行又一次编码的编码。
该方法用来指定对浏览器发送来的数据进行又一次编码(或者称为解码)时,使用的编码。
4、response.setCharacterEncoding("UTF-8"):指定对server响应进行又一次编码的编码。
server在将数据发送到浏览器前。对数据进行又一次编码时,使用的就是该编码。
二、浏览器怎样对接收和发送的数据进行编码?
response.setCharacterEncoding("UTF- 8")的作用是指定对server响应进行又一次编码的编码。同一时候,浏览器也是依据该參数来对其接收到的数据进行又一次编码(或者称为解码)。
可做个实验。在JSP中设置response.setCharacterEncoding("UTF- 8"),在IE中显示该页面时,在IE的菜单 -- "查看" -- "编码"中可看到是" Unicode(UTF-8)"。
浏览器在发送数据时,对URL和參数会进行URL编码,对參数中的中文,浏览器也是使response.setCharacterEncoding參数来进行URL编码的.
浏览器在接收server数据和发送数据到server时所使用的编码是同样的。默认情况下均为JSP页面的response.setCharacterEncoding參数(或者contentType和 pageEncoding參数)。我们称其为浏览器编码。当然。在IE中能够改动浏览器编码(在IE的菜单 -- "查看" -- "编码” 中修 改)。但通常情况下,改动该參数会使原本正确的页面中出现乱码。
三、server怎样对接收和发送的数据进行编码?
1、对于发送数据。server依照response.setCharacterEncoding — contentType — pageEncoding的优先顺序,对要发送的数据进行编码。
2、对于接收数据,分三种情况(浏览器直接用URL提交的数据,用表单的GET方式提交的数据、用表单的POST方式提交的数据)。各种WEBserver对这三种方式的处理不同样,以Tomcat5.0为例。
不管使用哪种方式提交。若參数中包括中文,浏览器都会使用当前浏览器编码对其进行URL编码。
对于表单中POST方式提交的数据,仅仅要在接收数据的JSP中正确request.setCharacterEncoding參数,即将对client请求进行又一次编码的编码设置成浏览器编码(默认情况下浏览器编码就是在响应该请求的JSP页面中response.setCharacterEncoding设置的值)。就可得到正确的參数编码。
对于URL提交的数据和表单中GET方式提交的数据,在接收数据的JSP中设置request.setCharacterEncoding參数是不行的。由于在Tomcat5.0中,默认情况下使用ISO- 8859-1对URL提交的数据和表单中GET方式提交的数据进行又一次编码(解码)。而不使用该參数对URL提交的数据和表单中GET方式提交的数据进行又一次编码(解码)。要解决该问题,应在Tomcat的配置文件(server.xml)的Connector标签中设置useBodyEncodingForURI(表示是否用request.setCharacterEncoding 參数对URL提交的数据和表单中GET方式提交的数据进行又一次编码,默觉得false。Tomcat4.0中默觉得 true)或 URIEncoding(指定对全部GET方式请求(包含URL提交的数据和表单中GET方式提交的数据)进行统一的又一次编码(解码)的编码)属性。
四、怎样防止中文乱码
1、对于同一个应用最好统一编码,推荐为UTF-8
2、正确设置JSP的pageEncoding參数
3、在全部的JSP/Servlet中设置contentType="text/html;charset=UTF-8"或response.setCharacterEncoding("UTF-8")。从而间接实现对浏览器编码的设置。
4、 对于请求,可用过滤器或在每一个JSP/Servlet中设置request.setCharacterEncoding("UTF-8")。
同一时候,要改动Tomcat的默认配置,推荐设置useBodyEncodingForURI=“true”(获取參数值时先得设置request.setCharacterEncoding(“UTF-8”)),也可设置URIEncoding=“ UTF-8”(有可能影响其它应用,故不推荐)
JSP/Servlet-----charset 、pageEncoding差别的更多相关文章
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- 最简单的jsp+servlet的增删改查代码
package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...
- 使用jsp/servlet简单实现文件上传与下载
使用JSP/Servlet简单实现文件上传与下载 通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...
- JSP/Servlet的编码原理
转自:http://janwer.iteye.com/blog/150226 首先,说说 JSP/Servlet 中的几个编码的作用 在 JSP/Servlet 中主要有以下几种设置编码的方式: pa ...
- JSP+Servlet中使用cos.jar进行图片上传(文件上传亦然)
链接:JSP+Servlet中使用jspsmartupload.jar进行图片上传下载 关于cos.jar,百度百科只有这么几句话(http://baike.baidu.com/subview/406 ...
- Eclipse JSP/Servlet 环境搭建
Eclipse JSP/Servlet 环境搭建 本文假定你已安装了 JDK 环境,如未安装,可参阅 Java 开发环境配置. 我们可以使用 Eclipse 来搭建 JSP 开发环境,首先我们分别下载 ...
- JSP/Servlet基础语法
相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...
- 基于jsp+servlet图书管理系统之后台用户信息查询操作
上一篇的博客写的是插入操作,且附有源码和数据库,这篇博客写的是查询操作,附有从头至尾写的代码(详细的注释)和数据库! 此次查询操作的源码和数据库:http://download.csdn.net/de ...
- 基于jsp+servlet图书管理系统之后台用户信息修改操作
上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的是修改操作,附有从头至尾写的代码(详细的注释)和数据库! 此次修改操作的源码和数据库:http://download.csdn.net/de ...
随机推荐
- Java中的异常详解
一.异常定义 阻止当前方法或作用域继续执行的问题,称为异常 二.异常分析 所有不正常类都继承Throwable类,这个类主要有两个子类Error类和Exception类.Error指系统错误 ...
- C语言拾遗--static
C程序一直由下列部分组成: 正文段——CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令: 初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里. ...
- 网站实战 从效果图开始CSS+DIV 布局华为网站
经过我们的前面css的学习,我们已经分模块的掌握的CSS的技术,但是,要是完整的做一个页面,我们还没有接触过,这次呢,小强老师来和大家完整的利用CSS+DIV做一个网站案例,我们来模仿下华为的网站. ...
- AlphaMobileControls介绍
大家在开发wince程序或者windows mobile程序时还在为丑陋的界面着急吗?AlphaMobileControls可以帮你解决这些方案.当然如果你是高手可以自己去实现一些特殊的功能,自己定义 ...
- 遗传算法Matlab源程序
参考自: http://blog.163.com/zhaoshuyu_thomas/blog/static/461929072009103034816716/ 大家内容上可以参考上述文章,但其代码有很 ...
- PHP - 接口&抽象类
什么时候使用抽象类什么时候使用接口? .如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类.如果要创建将由一些不相关对象采用的功能,就使用接口. .如果必须从多个来源继承行为,就 ...
- Eclipse用法和技巧二十二:快速调整字体大小
团队代码review的时候,一般都会一堆人围着显示器,或者投影仪.这个时候调整代码字体大小就显得很重要.下面直接说操作方式. 步骤一:Windows -> Preference 步 ...
- 学习算法-基数排序(radix sort)卡片分类(card sort) C++数组实现
基数排序称为卡片分类,这是一个比较早的时间越多,排名方法. 现代计算机出现之前,它已被用于排序老式打孔卡. 说下基数排序的思想.前面我有写一个桶式排序,基数排序的思想是桶式排序的推广. 桶式排序:ht ...
- VB.net数据库编程(03):一个SQLserver连接查询的简单样例
这个样例,因为在ADO.net入门已经专门学了,再次进行复习 一下. 主要掌握连接字串的情况. 过程就是: 1.引用System.Data.SqlClient.而Access中引用 的是System. ...
- myeclispe启动后报错 Subclipse talks to Subversion via a Java API that requires access to native libraries.
myeclispe 中SVN插件常遇到的异常: Subclipse talks to Subversion via a Java API that requires access to native ...