搞清tomcat中的编解码

经常会被乱码问题搅得头晕脑胀。事实上,乱码问题涉及的地方比较多,所以常常有了问题也很难定位,比如,可以发生在容器,可以发生在MVC框架,可以发生在数据库,可以发生在响应等等。    这里分析一下tomcat中是如何编解码的。    以"http://localhost:8080/测试?网络=编程"为例,可以将tomcat中编解码分解为这么几个地方:    1. pathInfo.即“测
摘要由CSDN通过智能技术生成

    经常会被乱码问题搅得头晕脑胀。事实上,乱码问题涉及的地方比较多,所以常常有了问题也很难定位,比如,可以发生在容器,可以发生在MVC框架,可以发生在数据库,可以发生在响应等等。

    这里分析一下tomcat中是如何编解码的。

    以"http://localhost:8080/测试?网络=编程"为例,可以将tomcat中编解码分解为这么几个地方:

    1. pathInfo.即“测试”这个部分

    2. queryParameter,即”网络=编程“这个部分

    3. http header,即浏览器发送的http头部分

    4. requestBody,http正文部分,即post的正文部分

    1. pathInfo,Http11Processor中的process方法会调用InternelInputBuffer来解析请求URL(inputBuffer.parseRequestLine)以及请求头(inputBuffer.parseHeaders),但是这里并不是解码的地方。

public void process(Socket theSocket)
        throws IOException {
        ...
                inputBuffer.parseRequestLine();
                request.setStartTime(System.currentTimeMillis());
                keptAlive = true;
                if (disableUploadTimeout) {
                    socket.setSoTimeout(soTimeout);
                } else {
                    socket.setSoTimeout(timeout);
                }
                // Set this every time in case limit has been changed via JMX
                request.getMimeHeaders().setLimit(endpoint.getMaxHeaderCount());
                inputBuffer.parseHeaders();
        ...
    }
     真正解码的地方是CoyoteAdapter的convertURI

protected void con
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值