03|动态Response:按照规范构造返回流
项目结构
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何构造返回流,通过手写MiniTomcat实现动态Response。首先介绍了项目结构的变化,采用Maven结构对项目的包依赖进行管理,并引入最少的依赖包。然后详细讲解了Response请求规范,包括状态行、Header头、空行与响应体的组成,以及对Response进行封装的方法。重点介绍了Response封装的过程,包括对响应格式的规定、使用StringUtils工具进行占位符填充,以及引入专用于处理Response的返回值的StaticResourceProcessor.java。通过代码示例展示了如何拼接响应头和处理文件内容,实现动态资源返回。接着介绍了如何处理动态资源,引入了Servlet的概念,并展示了如何调用Servlet获取动态资源。最后调整了服务端的处理代码,新增了对是否为Servlet的判断。通过测试验证了整体功能改造成功。文章内容详细介绍了构造返回流、引入Maven项目规范、对Response进行封装和处理的方法,以及动态资源与Servlet的概念和实现。整体内容丰富,适合读者快速了解文章概览,体现了文章的技术特点。
《手把手带你写一个 MiniTomcat》,新⼈⾸单¥59
全部留言(7)
- 最新
- 精选
- so long老师请教一个问题,ServletProcessor没有设置响应头Content-Length,浏览器不会有拆包或者粘包的问题吗?
作者回复: 好问题啊。这个情况记住三点,一,要设置content-length 二,或者指定transfer-encoding为chunked,三,都不指定,可用短连接,即服务器关闭连接。 不符合三点的情况,大概率出问题。MiniTomcat是简化教学版本,是短连接,只是探讨了一下chunked方式。
2023-12-18归属地:浙江1 - HH🐷🐠🤪匹配 web.xml 或注解定义的 servlet 名称, 找到就可以当做动态 servlet。 不知道对不对, 想法比较单调, 希望老师和朋友给出点评和意见
作者回复: web.xml是经典方法
2023-12-13归属地:广东1 - Xiaosong欸 从来没 单独编译过单独的 java文件,我看target里面不编译test dir底下的文件,请教一下怎么操作
作者回复: 你用IDEA,把Gitee上的项目拉下来,然后编译。
2024-01-27归属地:美国 - Geek_50a5cc所以 Servlet 动态资源的 classloader 都是去 编译后的classes定位需要的Servlet,对吗
作者回复: 对的
2023-12-15归属地:北京 - 彩笔采购啊我悟了
作者回复: 恭喜啊!希望分享一下。
2023-12-15归属地:河南 - peter请教老师几个问题: Q1:老师开发用的IDE是Idea吗? 我用Idea2019,打开老师的第三课代码,打开HttpServer.java,运行main函数,提示编译错误:“Error:java: 错误: 不支持发行版本 5”。 我的电脑上java版本是java8。老师的代码只有三部分:src目录、webroot目录、pom.xml,都没有包含Java版本信息啊。 Note1:其中一部分代码是: if (index2 > index1) return requestString.substring(index1 + 1, index2); 对于这个代码,idea2019的提示是:'if'没有加大括号。) Note2: import java.time.ZonedDateTime; 对于此导包,有红色下划线,Idea2019提示“Usage of API documented as @since 1.8+ ”。这个有影响吗? Q2:Response类只有这些内容吗? 本课中,Response只当做实体类处理,实体类的话,应该包含响应的多个字段,比如状态行、响应头等字段,但本文只有Request和OutputStream,是没有全部列出来吗? Q3:对于图片,Response是怎么处理的? 把图片也当做文件,读取文件,读出的结果应该是二进制数据,然后把二进制数据放到response的响应体中,是这样吗?
作者回复: Q1,代码再IDEA上都是可编译运行的,你是再Gitee上拿的完整代码吗?文本中的代码只是主体部分,因为篇幅原因,不完整。 Q2,学到这节课,Response只有这么一点点。Mini系列课程的风格都是从无到有一点点长大,后面的章节回逐步完善它。 Q3,request和response都可以处理文件,Multipart/form-data,你可以看看http协议的规定。MiniTomcat没有实现。我们的主要目标是servlet容器。
2023-12-14归属地:北京2 - Martito为什么我编译这个HelloServlet.java报错呢 idea中也没有提示错误呀2023-12-19归属地:山东1