【1】针对乱码解决方法

  1. 保证数据库安装的时候编码为UTF-8 ;
  2. 保证jsp页面和Java文件编码为UTF-8 ;
  3. 保证spring字符过滤器encode为UTF-8 ;
  4. 保证Tomcat server.xml添加URIEncoding为UTF-8 ;
  5. 如果URL传参数中文,使用URL编码 ;
  6. 保证项目中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配置相关推荐

  1. tomcat配置前端静态文件gzip压缩

    tomcat配置前端静态文件gzip压缩 问题背景 在项目部署后,由于网络等原因的限制,导致前端较大的资源文件加载时间特别长,特别是vue相关的项目,较大的js文件更多,这时就可以考虑开启gizp,把 ...

  2. eclipse下tomcat配置

    eclipse下tomcat配置整了我一两个小时,呵呵,大家不要笑话,本人对eclipse还是菜鸟! 1.用到的软件 jdk-7u40-windows-i586 EclipseJavaEEIDEfor ...

  3. Rainbond最佳实践:Tomcat配置Redis实现Session共享

    Rainbond:生产级无服务器PaaS Rainbond是国内首个开源的生产级无服务器PaaS,深度整合基于Kubernetes的容器管理.多类型CI/CD应用构建与交付.多数据中心的资源管理等技术 ...

  4. intellij tomcat配置

    目录 intellij tomcat配置 @(目录) intellij tomcat配置 如上图标注 1 所示,我们可以切换随时为项目切换不同的容器. 如上图标注 2 所示,我们可以指定给运行的容器设 ...

  5. ssl单向tomcat配置webservice访问方法

    tomcat 配置 单向 SSL <Connector port="8443" protocol="org.apache.coyote.http11.Http11P ...

  6. Tomcat 配置WEB虚拟映射 及 配置虚拟主机

    Tomcat  配置WEB虚拟映射 及 配置虚拟主机 配置WEB虚拟映射文件夹有三种方法例如以下: 第一(要重新启动server的): 打开路径 Tomcat 6.0\conf 下的 server.x ...

  7. tomcat android https,tomcat 配置 https, android端 访问

    1.控制台 进入到tomcat 的bin 目录下 执行命令 keytool的命令网上很多解释 生成一个 tomcat.keystore 文件 keytool -genkey -alias tomcat ...

  8. tomcat苹果版安装步骤_mac系统安装apache tomcat配置方法图文详解

    下面,绿茶小乐哥分享mac系统安装apache tomcat配置方法,希望能帮助到大家! tomcat无法取访问appache资源. appache只支持静态网页,但像asp,php,cgi,jsp等 ...

  9. 详解Tomcat配置JVM参数步骤

    这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机.您可以选择自己的需要选择不同的操作系统和对应的JDK ...

最新文章

  1. 机房收费系统总结【1】-整体流程
  2. 十七、Redis事务
  3. VB DATA控件链接SQL SERVER
  4. SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
  5. 概念区分:并行、分布式、集群、云、超算
  6. 用Delphi开发OPC客户端工具的方法研究
  7. FreeMarker中assign指令的用法
  8. Java基础知识回顾之七 ----- 总结篇
  9. 【C语言天天练(二四)】内存分配
  10. 几位阿里朋友重写的Java并发编程,牛逼了
  11. cdev_alloc和cdev_init
  12. 百度Web生态开花结果:Lavas等多项新技术帮助开发者效率提升
  13. POI合并单元格后边框显示问题
  14. 菜鸟站长之家google账号注册申请图文教程
  15. 宝德自强AI智能小站 PI300T
  16. 科学大家谈 | 全球著名蛋白质工程学家——张阳
  17. linuxci‘pang磁盘管理的实验报告
  18. table中实现div完全填充td
  19. pga是啥oracle,[讨论话题]我的PGA我作主----搞清楚什么是真正的PGA
  20. 解决maven项目-Dmaven.multiModuleProjectDirectory报错

热门文章

  1. 神经网络隐藏层节点个数
  2. 浪潮服务器性能计数器感叹号,浪潮(INSPUR) 服务器 NF5270M5
  3. 计算机三级(数据库)备考题目知识点总结
  4. ISCXTor2016数据集(Tor-nonTor dataset)介绍
  5. h5 plus/h5+规范使用,模块索引,教你如何去看h5+的手册
  6. 【火灾检测】基于计算机视觉实现森林火灾检测系统带GUI界面
  7. VB做的程序的代码是放在哪里了呢?
  8. 字符串典例,看了不亏
  9. Linux脚本中Sleep和Wait命令的使用例子
  10. 【系统架构设计师】计算机组成与体系结构 ① ( 计算机组成 | CPU | 存储器 | 总线 | IO 外设 | CPU 组成 | 运算器 | 控制器 )