



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
jsp页面显示中文乱码: jsp页面的编码方式有两个地方需要设置: 其中:pageEncoding 指的是jsp文件本身在本地保存时的编码方式。contentType的charset是指服务器发送网页内容给客户端时所使用的编码。 从第一次访问一个jsp页面开始,到这个页面被发送到客户端,这个Jsp页面要经过三次编码转换: 第一阶段是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就发挥了功效 所以最终的解决方法为: 在jsp页面设置pageEncoding或者contentType的其中一个为支持中文的编码格式(如utf-8,gbk,gb2312)。因为设置一个的话,另一个默认会和它一样。 如果两个都设置的话,必须保证两个都是支持中文编码(不一定要一样)。 最佳建议设置如下: 2. post方式传值乱码: 由于post方式传值是通过request存储的,在另一个页面也是通过request.getParameter(String name)来提取信息,所以这种情况下的乱码主要是因为request存储信息的编码设置导致的。post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。所以使用如下语句即可得到单个正确的中文字符串:String str = new String(request.getParameter(something).getBytes(ISO-8859-1),utf-8) ; 解决方法: 在接收页面设置request.setCharacterEncoding(UTF-8)。最好通过过滤器实现每个页面都设置为request.setCharacterEncoding(UTF-8)。 3. get方式传值乱码: get方式传值有两种,一种是表单get传值,另一种是url地址传值(实质上这两种方式都是通过url参数的方式传值)。 表单方式get传值: 表单方式get传值的编码过程为,首先浏览器根据页面的charset编码方式对传值进行编码,然后提交至服务器交给tomcat,tomcat对这些信息进行解码时,采用的解码方式是由server.xml文件中的URIEncoding设置决定的,也就是说,当我们使用命令request.getParameter()获取表单参数值时,得到的字符串,经过了charset的编码和URIEncoding的解码。 由上所知,只要charset的编码和URIEncoding的解码一致,并且支持中文,就能保证没有乱码。 设置URIEncoding的方法如下: 方法一: 修改$TOMCAT/conf/server.xml文件,在HTTP Connector或者AJP Connector的配置加上URIEncoding=gbk 方法二: 使用useBodyEncodingForURI=true. 这个方法适合你的TOMCAT实例下需要跑多个不同Encoding的程序时。 enableLookups=false redirectPort=8443 protocol=AJP/1.3 useBodyEncodingForURI=true / 在Tomcat配置中,连接器(HTTP Connector)属性中有一个URIEncoding和 useBodyEncodingForURI属性,这两个属性设置对URL后的附加参数进行URL解码时该如何选择 字符集编码。URIEncoding用于制定URL后的附加参数的字符集编码,useBodyEncodingForURI 则说明是否采用实体内容的字符集编码设置来替代URIEncoding的设置,也就是说当 useBodyEncodingForURI属性设置为true时ServletRequest.setCharacterEncoding方法设置的字符集编码也影响getParameter等方法对URL地址后的参数进行URL解码的结果。(在/%TomCat_Home%/ confserver.xml文件中找到 标记,然后在后面加上useBodyEncodingForURI=true) url方式get传值乱码: 于这种方式,浏览器不会采用页面的charset方式对URL中的中文进行编码后提交至服务器(IE,FireFox都一样),而是采用系统的GBK转码为ISO-8859-1之后提交至服务器tomcat,所以这个过程为: 首先,url地址中的中文被从gbk转换成ISO-8859-1,交给tomcat后,又被tomcat根据URLEcoding解码,这种情况,只有把URLEcoding设置为gbk才能在request.getParameter()时不出现乱码。但是这样就会影响到上面的配置,所以一个好的解决方法是,使用.URLEcoder和URLDecoder对地址中的中文进行手动编码和解码。 所以一个万全的解决方法为: 1.所有页面的charset设置为UTF-8。 2.Tomcat的URIEncoding默认是ISO-8859-1,而我设置为UTF-8,主要是想解决中文命名的文件以及请求以get方式提交有可能出现的乱码问题。 3.添加过滤器,调用request.setCharacterEncoding(utf-8)方法将request的字符集设定为utf-8,解决请求以post方式提交的乱码问题。 4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030海洋工程防腐涂料市场前景分析及投资策略与风险管理研究报告
- 2025-2030桐木行业行业风险投资发展分析及投资融资策略研究报告
- 2025-2030机库工业门行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030年高速工具钢产业市场深度调研及发展趋势与投资战略研究报告
- 2025-2030年验光仪市场前景分析及投资策略与风险管理研究报告
- 沙土买卖合同
- 矿山工程服务合同
- 智能建筑系统集成与运营服务合同
- 2025-2030年全球ATM卷纸行业市场分析研究报告
- 测量仪器买卖合同买卖合同
- VDA6.3-2023版培训教材课件
- GB/T 17791-2017空调与制冷设备用铜及铜合金无缝管
- 换热器检修施工综合方案
- 罗氏C8000使用操作说明
- 融资融券策略课件
- 单层钢结构厂房施工组织设计方案
- 项目尽职调查清单模板
- 唯物主义和经验批判主义研读课件
- 环境保护和水土保持保证体系框图
- 眼部健康检测与分析课件
- 专业硕士学位论文修改报告(二)
评论
0/150
提交评论