`

Tomcat 7源码学习笔记 -4 encoding的处理机制

阅读更多

一.概述

Tomcat对http请求的字符编码支持得有些混乱,使用起来动不动就发生乱码的情况。通过窥探tomcat的源码,对http request的字符编码这块的处理机制作一个总结。

 

tomcat内部对于http request,有两种字符编码的配置:

1. 对应get方式的http请求的字符编码

2. 对应post方式的http请求的字符编码

 

二.get方式的字符编码

 

第一种情况:get和post的编码保持一致,post方式的编码是什么,get方式的编码就是什么。

 

server.xml中进行如下配置的话,get方式的字符编码和post方式的字符编码保持一致。

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>

 

第二种情况:不指定useBodyEncodingForURI或者useBodyEncodingForURI="false"。

这时get和post的字符编码各自设置,互相没有关系。配置方法如下:

 

通过server.xml文件的URIEncoding进行设置,如果没有配置URIEncoding,那么用缺省的ISO-8859-1。

 

<Connector port="8080" maxThreads="150" minSpareThreads="25"
maxSpareThreads="75" enableLookups="false" redirectPort="8443"
acceptCount="100" debug="99" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8"/>

三.post方式的字符编码

 

1. 如果在servlet的doPost方法中或者filter中设置了request的字符编码,那么就以设置的为准。

 

public void doPost(HttpServletRequest request,HttpServletResponse response)
      throws IOException,ServletException{

 

//必须在getParameter,getParameterNames,getParameterValues方法调用之前进行设置

request.setContentType("UTF-8");

 

}

 

 

web.xml中配置filter

 

<filter>
    <filter-name>SetCharacterEncoding</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
</filter>

 

2. 如果没有进行1.的配置,那么从http header中取出content-type,然后从content-type的值中取出charset的值,

用charset的值作为post的字符编码。

如:content-type=application/x-www-form-urlencoded;charset=utf-8

那么,post的字符编码就是utf-8。

 

如果从http header中没有取到content-type或者charset,那么,就使用缺省的ISO-8859-1。

 

分享到:
评论

相关推荐

    tomcat-redis-session-manager-1.2-tomcat-7-java-7

    tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-...

    tomcat-redis-session-manager的jar包-包含Tomcat7和Tomcat8

    《深入理解Tomcat-Redis-Session-Manager:在Tomcat7和Tomcat8中的应用》 在现代Web应用程序开发中,session管理是一个至关重要的环节,它涉及到用户会话的持久化和跨请求的数据共享。传统的session管理方式在高...

    tomcat-redis-session-manager源码

    《深入解析Tomcat-Redis-Session-Manager源码》 在现代Web应用中,服务器端会话管理是一个至关重要的部分,特别是在高并发、分布式环境中。Tomcat作为最流行的Java Servlet容器,提供了丰富的功能来支持这一需求。...

    开发工具 apache-tomcat-8.0.41-windows-x86

    开发工具 apache-tomcat-8.0.41-windows-x86开发工具 apache-tomcat-8.0.41-windows-x86开发工具 apache-tomcat-8.0.41-windows-x86开发工具 apache-tomcat-8.0.41-windows-x86开发工具 apache-tomcat-8.0.41-...

    Tomcat7下载(apache-tomcat-7.0.85)

    Tomcat7下载(apache-tomcat-7.0.85)Tomcat7下载(apache-tomcat-7.0.85)Tomcat7下载(apache-tomcat-7.0.85)Tomcat7下载(apache-tomcat-7.0.85)

    Tomcat 源代码调试笔记 - 看不见的 Shell1

    【Tomcat 源代码调试笔记 - 看不见的 Shell】这篇笔记主要探讨了如何在Tomcat运行时动态插入过滤器,以及遇到的问题和解决方法。Tomcat作为一个流行的Java应用服务器,它允许开发者通过Servlet规范中的`...

    apache-tomcat-9.0.45-windows-x64

    apache-tomcat-9.0.45-windows-x64apache-tomcat-9.0.45-windows-x64apache-tomcat-9.0.45-windows-x64apache-tomcat-9.0.45-windows-x64apache-tomcat-9.0.45-windows-x64apache-tomcat-9.0.45-windows-x64apache-...

    Tomcat8亲测可用 tomcat-redis-session-manager的jar包

    标题中的“Tomcat8亲测可用 tomcat-redis-session-manager的jar包”指的是一个专为Tomcat8设计的,用于管理session的扩展组件。这个组件实现了将Tomcat应用服务器中的用户session数据存储到Redis分布式缓存系统中,...

    tomcat-redis-session-manager-1.2-tomcat-6&7

    标题 "tomcat-redis-session-manager-1.2-tomcat-6&7" 指的是一个用于在Tomcat服务器中集成Redis作为session管理器的组件。这个组件使得Web应用程序可以利用Redis分布式缓存系统来存储和管理用户的会话数据,从而...

    tomcat-connectors-1.2.48-src

    《深入理解Tomcat连接器:剖析tomcat-connectors-1.2.48-src源码》 ...通过源码分析,我们可以学习到更多关于网络请求处理、服务器通信以及性能优化的实践知识,这对于提升Web应用的效率和稳定性至关重要。

    tomcat-redis-session-manager支持tomcat7

    因tomcat7使用redis共享session,其他的包存在问题,自己编译后处理通过。 该包是在https://github.com/jcoleman/tomcat-redis-session-manager 将源码编译后的包。

    tomcat-redis-session-manager for tomcat8.5

    文件名写错了,此压缩文件支持tomcat8.5。是否支持8.0请自行测试,本人只测试了8.5,可以使用。压缩文件包括tomcat-redis-session-manager-master-2.0.0.jar、jedis-2.7.3.jar、commons-pool2-2.3.jar三个jar包使用...

    tomcat-redis-session-manager-1.2-tomcat-6.jar

    用于配置 tomcat-redis-session-manager

    tomcat-connectors-1.2.32-src.tar.gz

    《Apache Tomcat Connectors源码解析与Linux环境下的整合指南》 Apache Tomcat Connectors,也被称为mod_jk或mod_proxy_ajp,是Apache HTTP Server与Tomcat应用服务器之间进行通信的重要桥梁。这个名为“tomcat-...

    3-6Tomcat处理源码实现与异步Servlet源码实现(1).mp4

    3-6Tomcat处理源码实现与异步Servlet源码实现(1).mp4

    apache-tomcat-9.0-windows-x64.zip 内置64位的三个版本尽情使用 吧少年

    7. **安全管理**: Tomcat支持多种安全机制,如SSL/TLS加密、用户认证、角色授权等。在conf/server.xml和conf/tomcat-users.xml文件中可以配置这些安全设置。 8. **日志与监控**: Tomcat会产生各种日志文件,帮助...

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-基于ssm的云的学习笔记系统-ssm-java代码

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...

    tomcat8 tomcat-redis-session-manager

    tomcat8下 tomcat-redis-session-manager , github上有源码,其他版本都有打好的jar包,tomcat 8 下没有,下载源码生成了一个。

    apache-tomcat-8.0.47-windows-x64.zip 【Tomcat服务器,Tomcat8 windows 64位版】

    7. **Manager App**:一个内置的Web应用,允许通过Web界面管理部署在Tomcat上的应用,如部署、卸载、重新加载等操作。 8. **Host Manager App**:用于管理Tomcat服务器上的虚拟主机,可以创建、编辑和删除主机配置...

    apache-tomcat-7.0.63-windows-x64.zip

    7. `work`:Tomcat处理JSP页面时生成的编译文件和工作目录。 **部署和运行** 在Windows上,你可以通过`bin`目录下的批处理脚本来启动和停止Tomcat。首先,确保你的系统已经安装了Java Development Kit (JDK)。然后...

Global site tag (gtag.js) - Google Analytics