谈谈服务器的编码问题

本文详细探讨了Tomcat处理服务器编码的过程,从浏览器发起请求到Tomcat解析GET和POST参数,涉及Request、CoyoteRequest和Parameters类。重点讨论了编码设置对GET和POST数据的影响,强调了Request.setCharacterEncoding方法在防止乱码问题中的关键作用,以及UTF-8和GBK编码转化的潜在风险。
摘要由CSDN通过智能技术生成

    参考tomcat-5.5.20

    1)核心流程涉及到的几个类


    1.1)org.apache.catalina.connector.Request
    (这个就是我们在servlet中看到的HttpServletRequest的tomcat实现,有一个非常常见的属性ParameterMap parameterMap)

     

    1.2)org.apache.coyote.Request
    (原始的tomcat请求数据结构)

     

    1.3)org.apache.tomcat.util.http.Parameters
    (我们通过http传递的参数的数据结构)

    注意:org.apache.tomcat.util.http.Parameters有非常重要的几个属性:

    •  String encoding:

                  用于post数据的编码

    •  String queryStringEncoding:

                 用于get数据的编码

    •  MessageBytes queryMB:

                  原始的get请求部分的字节

    •  CoyoteInputStream inputStream

                  原始的post请求部分的字节(实际上来自coyoteRequest[org.apache.coyote.Request的实例]的inputBuffer)

    •  MessageBytes decodedQuery:

                 在对请求字节进行解码时,会拷贝queryMB即decodedQuery是queryMB 涉及请求参数那部分字节的拷贝
                  这里所说的解码会在下面的请求过程中详细描述

    •  Hashtable paramHashStringArray:

                  把解码后的字节(包括key和value)转为字符保存在hashtable 中,编码的选取规则如下:

                   get请求对应queryStringEncoding,post对应encoding
                   paramHashStringArray也是HttpServletRequest.getParameterMap的来源

    3者的关系如下:
    1)包含 2),2)包含 3)

    见下图:

     

    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值