项目编码解码和Tomcat配置
【1】针对乱码解决方法
- 保证数据库安装的时候编码为UTF-8 ;
- 保证jsp页面和Java文件编码为UTF-8 ;
- 保证spring字符过滤器encode为UTF-8 ;
- 保证Tomcat server.xml添加URIEncoding为UTF-8 ;
- 如果URL传参数中文,使用URL编码 ;
- 保证项目中jdbc链接添加charset=UTF-8。
URIEncoding实例如下:
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" />
【2】几个概念
1、pageEncoding="UTF-8"的作用是设置页面编码,也是设置服务器响应编码。
2、contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。
默认取值 ISO-8859-1,如,JSP页面设置了:
Content-Type: text/html; charset=ISO8859-1;
//告诉浏览器响应的内容格式为 text/html , 消息体编码为ISO8859-1
那么响应头中
Content-Type: text/html ; charset=ISO8859-1 ;
若响应编码未进行其他设置,将取pageEncoding值;若同时设置ContentType 和 pageEncoding,取ContentType值。
如下 :
① 只设置pageEncoding。
② 同时设置 pageEncoding 和ContentType 。
pageEncoding="ISO-8859-1" contentType="text/html;charset=UTF-8"
注意到:此时响应头中的ContentType 为UTF-8;另外页面中文发生了乱码(因为pageEncoding是ISO-8859-1)。
可以简单认为是,pageEncoding是jsp文件本身的编码;contentType的charset是指服务器发送给客户端时的内容编码。
如果pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定。
.
否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采用 默认的ISO-8859-1。
3、request.setCharacterEncoding(“UTF-8”)的作用是设置对客户端请求进行重新编码的编码。
一定要在request.getParameter()前使用,仅仅只适用于设置post提交的request body的编码而不是设置get方法提交的queryString的编码。
4、response.setCharacterEncoding(“UTF-8”)的作用是指定对服务器响应进行重新编码的编码。
如果在后台使用该方法,则一定在使用响应流之前使用。
5、response.setContentType()的作用是告诉浏览器如何处理随响应到来的数据。
其优先级大于JSP页面设置的属性“Content-Type : text/html ;”
response.setCharacterEncoding(“UTF-8”)的作用是指定对服务器响应进行重新编码的编码。同时,浏览器也是根据这个参数来对其接收到的数据进行解码。
所以在无论你在JSP中设置response.setCharacterEncoding (“UTF-8”)或者response.setCharacterEncoding(“GBK”),浏览器均能正确显示中文(前提是你发送到浏览器的数据编码是正确的)。
【3】请求和响应
① 对于发送数据,服务器按照以下的优先顺序,对要发送的数据进行编码:
response.setCharacterEncoding—contentType—pageEncoding的
优先级:
response.setCharacterEncoding("UTF-8")
>
Content-Type: text/html;charset=ISO8859-1
>
>pageEncoding="UTF-8" ;
② 对于接收数据,要分三种情况
一种是浏览器直接用URL提交的数据,另外两种是用表单的GET和POST方式提交的数据。
对于表单中POST方式提交的数据,只要在接收数据的JSP中正确request.setCharacterEncoding参数,即将对客户端请求进行重新编码的编码设置成浏览器编码,就可以保证得到的参数编码正确。
那如何得到浏览器编码呢?
上面我们提过了,在默认请情况下,浏览器编码就是你在响应该请求的JSP页面中response.setCharacterEncoding设置的值。
如果没有设置,根据优先级,依次选择。如果都没有设置,默认为ISO8859-1
所以对于POST表单提交的数据,在获得数据的JSP页面中request.setCharacterEncoding
要和生成提交该表单的JSP页面的response.setCharacterEncoding设置成相同的值。
对于URL提交的数据和表单中GET方式提交的数据,在接收数据的JSP中设置request.setCharacterEncoding
参数是不行的。
因为在Tomcat5.0中,默认情况下使用ISO- 8859-1对URL提交的数据和表单中GET方式提交的数据进行解码,而不使用该参数。
要解决该问题,应该在Tomcat的配置文件的Connector标签中设置useBodyEncodingForURI或者 URIEncoding
属性。
其中useBodyEncodingForURI参数表示是否用request.setCharacterEncoding 参数对URL提交的数据和表单中GET方式提交的数据进行重新编码。在默认情况下,该参数为false(Tomcat4.0中该参数默认为true)。
URIEncoding参数指定对所有GET方式请求(包括URL提交的数据和表单中GET方式提交的数据)进行统一的解码的编码。
③ URIEncoding和useBodyEncodingForURI区别
URIEncoding是对所有GET方式的请求的数据进行统一的重新编码(解码),而useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码。
所以对于URL提交的数据和表单中GET方式提交的数据,可以修改 URIEncoding参数为浏览器编码或者修改useBodyEncodingForURI为true,并且在获得数据的JSP页面中 request.setCharacterEncoding参数设置成浏览器编码。
URIEncoding实例如下:
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000" URIEncoding="UTF-8" redirectPort="8443" />
项目编码解码和Tomcat配置相关推荐
- tomcat配置前端静态文件gzip压缩
tomcat配置前端静态文件gzip压缩 问题背景 在项目部署后,由于网络等原因的限制,导致前端较大的资源文件加载时间特别长,特别是vue相关的项目,较大的js文件更多,这时就可以考虑开启gizp,把 ...
- eclipse下tomcat配置
eclipse下tomcat配置整了我一两个小时,呵呵,大家不要笑话,本人对eclipse还是菜鸟! 1.用到的软件 jdk-7u40-windows-i586 EclipseJavaEEIDEfor ...
- Rainbond最佳实践:Tomcat配置Redis实现Session共享
Rainbond:生产级无服务器PaaS Rainbond是国内首个开源的生产级无服务器PaaS,深度整合基于Kubernetes的容器管理.多类型CI/CD应用构建与交付.多数据中心的资源管理等技术 ...
- intellij tomcat配置
目录 intellij tomcat配置 @(目录) intellij tomcat配置 如上图标注 1 所示,我们可以切换随时为项目切换不同的容器. 如上图标注 2 所示,我们可以指定给运行的容器设 ...
- ssl单向tomcat配置webservice访问方法
tomcat 配置 单向 SSL <Connector port="8443" protocol="org.apache.coyote.http11.Http11P ...
- Tomcat 配置WEB虚拟映射 及 配置虚拟主机
Tomcat 配置WEB虚拟映射 及 配置虚拟主机 配置WEB虚拟映射文件夹有三种方法例如以下: 第一(要重新启动server的): 打开路径 Tomcat 6.0\conf 下的 server.x ...
- tomcat android https,tomcat 配置 https, android端 访问
1.控制台 进入到tomcat 的bin 目录下 执行命令 keytool的命令网上很多解释 生成一个 tomcat.keystore 文件 keytool -genkey -alias tomcat ...
- tomcat苹果版安装步骤_mac系统安装apache tomcat配置方法图文详解
下面,绿茶小乐哥分享mac系统安装apache tomcat配置方法,希望能帮助到大家! tomcat无法取访问appache资源. appache只支持静态网页,但像asp,php,cgi,jsp等 ...
- 详解Tomcat配置JVM参数步骤
这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机.您可以选择自己的需要选择不同的操作系统和对应的JDK ...
最新文章
- 机房收费系统总结【1】-整体流程
- 十七、Redis事务
- VB DATA控件链接SQL SERVER
- SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
- 概念区分:并行、分布式、集群、云、超算
- 用Delphi开发OPC客户端工具的方法研究
- FreeMarker中assign指令的用法
- Java基础知识回顾之七 ----- 总结篇
- 【C语言天天练(二四)】内存分配
- 几位阿里朋友重写的Java并发编程,牛逼了
- cdev_alloc和cdev_init
- 百度Web生态开花结果:Lavas等多项新技术帮助开发者效率提升
- POI合并单元格后边框显示问题
- 菜鸟站长之家google账号注册申请图文教程
- 宝德自强AI智能小站 PI300T
- 科学大家谈 | 全球著名蛋白质工程学家——张阳
- linuxci‘pang磁盘管理的实验报告
- table中实现div完全填充td
- pga是啥oracle,[讨论话题]我的PGA我作主----搞清楚什么是真正的PGA
- 解决maven项目-Dmaven.multiModuleProjectDirectory报错
热门文章
- 神经网络隐藏层节点个数
- 浪潮服务器性能计数器感叹号,浪潮(INSPUR) 服务器 NF5270M5
- 计算机三级(数据库)备考题目知识点总结
- ISCXTor2016数据集(Tor-nonTor dataset)介绍
- h5 plus/h5+规范使用,模块索引,教你如何去看h5+的手册
- 【火灾检测】基于计算机视觉实现森林火灾检测系统带GUI界面
- VB做的程序的代码是放在哪里了呢?
- 字符串典例,看了不亏
- Linux脚本中Sleep和Wait命令的使用例子
- 【系统架构设计师】计算机组成与体系结构 ① ( 计算机组成 | CPU | 存储器 | 总线 | IO 外设 | CPU 组成 | 运算器 | 控制器 )