06|规范化:引入HttpRequest与HttpResponse
项目结构
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了在手写MiniTomcat的过程中引入HttpRequest与HttpResponse的规范化工作。作者首先详细讲解了对Servlet规范的适配工作,包括实现HttpServletRequest与HttpServletResponse接口的过程。通过对SocketInputStream中定义的方法,读者可以了解到如何从输入流中读出request line和header信息。文章还介绍了在解析Request信息时的一些技术细节,如char数组的使用、indexOf()方法的实现等。通过本文,读者可以了解到在实现HttpRequest与HttpResponse的过程中涉及的技术细节和实现方法,对于想要了解Servlet规范适配工作和实现HttpRequest与HttpResponse接口的读者来说,具有很高的参考价值。文章还介绍了在解析Request信息时的一些技术细节,如char数组的使用、indexOf()方法的实现等。通过本文,读者可以了解到在实现HttpRequest与HttpResponse的过程中涉及的技术细节和实现方法,对于想要了解Servlet规范适配工作和实现HttpRequest与HttpResponse接口的读者来说,具有很高的参考价值。
《手把手带你写一个 MiniTomcat》,新⼈⾸单¥59
全部留言(4)
- 最新
- 精选
- C.buf[pos++]:表示buf的pos索引加一,以便后续read操作,是个后缀递增的操作。 & 0xff:位操作,字节在Java的中的范围为-128到127,是个有符号数,执行& 0xff是在做一个按位与操作,转换为一个无符号数,返回的值在0-255。0xff等于十进制的255,二进制位11111111。buf[pos]字节会与11111111进行按位与操作,基本保持了原始字节的值不变。
作者回复: 你说的是对的。我用自己的语言组织一下: byte转int或者char的时候, 如果byte原本是正数,补零扩展是没有问题的。 但是对于负数的情况,高位会补1,造成二进制补码不一致,所以用&0xff 将高位补零,低8位保持原样,这样二进制补码是一致的。
2023-12-20归属地:江苏23 - Clark Chen老师好, 关于`SocketInputStream .readRequestLine(HttpRequestLine requestLine)` 方法的这段代码 ``` while (!space) { if (pos >= count) { int val = read(); if (val == -1) { throw new IOException("requestStream.readline.error"); } pos = 0; readStart = 0; } if (buf[pos] == SP) { space = true; } requestLine.method[readCount] = (char) buf[pos]; readCount++; pos++; } ``` 有些地方没想明白, 为什么要在这个方法里面对手动控制pos++,直接获取buf[]里面的值 ,而不是通过read 方法来获取值。如下面这样 ``` while (!space){ if(pos >= count ){ readStart = 0; } int val = read(); if(val == -1){ throw new IOException("requestStream.readline.error"); } if(val == SP){ space =true; } requestLine.getMethod()[readCount] = (char)val; readCount++; } ``` 是有效率上的原因吗?
作者回复: 对,我的理解就是效率上的原因。
2023-12-24归属地:辽宁1 - peter请教老师两个问题: Q1:parameters用来做什么? HttpRequest类中定义了parameters,但好像并没有使用,这个类是用来存什么的? Q2:parseHeaders函数用if区分有意义吗? HttpRequest类中的parseHeaders用if … else来区分各个部分,但其实最后都是调用headers.put(name, value); 所有的分支,最后的处理结果都是一样的,这个区分还有意义吗?
作者回复: if是用来处理特殊header的,如果不是这些特殊的header,统一put
2023-12-20归属地:北京 - HH🐷🐠😄感觉像是纠正什么数据
作者回复: byte转int或者char的时候, 如果byte原本是正数,补零扩展是没有问题的。 但是对于负数的情况,高位会补1,造成二进制补码不一致,所以用&0xff 将高位补零,低8位保持原样,这样二进制补码是一致的。
2023-12-20归属地:广东