07|对内的保护:引入门面模式封装内部实现类
项目结构
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了在编写MiniTomcat过程中引入门面模式封装内部实现类的过程。作者首先提到了在前面的学习内容中新增了HttpRequest与HttpResponse类,但目前只对Request请求相关的代码进行了实现,因此需要改造Response返回代码。为了避免内部方法暴露在用户面前,作者计划使用门面设计模式来解决这个问题。文章详细介绍了项目结构的变化,新增了HttpRequestFacade.java与HttpResponseFacade.java两个类。接着,文章对Response返回信息解析进行了详细的讲解,包括状态行、响应头、空行、响应体的组成,以及对头部信息的操作和sendHeaders方法的实现。最后,文章提到了在HttpProcessor中将原来引用或初始化Response类的地方全部用HttpResponse替代,并完成了HttpRequest与HttpResponse的替换。整体来说,本文通过实际的代码示例和详细的讲解,帮助读者了解了如何引入门面模式来封装内部实现类,以及在MiniTomcat项目中对Response返回代码的改造过程。文章内容涉及门面设计模式的应用、Facade模式的结构图、HttpRequestFacade与HttpResponseFacade的定义、以及在ServletProcessor中的应用,为读者提供了深入理解门面模式在实际项目中的应用的指导。
《手把手带你写一个 MiniTomcat》,新⼈⾸单¥59
全部留言(4)
- 最新
- 精选
- peter请教老师几个问题: Q1:addHeader与setHeader代码相同,不就重复了吗? HttpResponse中的这两个类,代码完全相同,重复啊。 Q2:sendHeaders方法和servlet.service是分别输出到浏览器吗? ServletProcessor类的process方法中,先是调用response.sendHeaders(); 这个方法是把头部信息输出到浏览器吗?紧接着又调用servlet.service,这个方法是输出内容到浏览器。这两次输出是顺序完成的吗?感觉应该是一起输出到浏览器才对,不过用了两个方法,感觉是分别输出到浏览器。 Q3:newInstance过时了,替代方法是什么? 我用Idea2019,对于“servlet = (Servlet) servletClass.newInstance(); ”这行代码,Idea提示此方法已经过时了。如果过时了,替代方法是什么? Q4:getMethod并没有被使用,对吗? HttpRequest中虽然实现了getMethod方法,但程序运行并没有使用此方法,对吗?(也许用了,但我没有看到) Q5:HttpRequestFacade类中的方法,为什么没有加override注解? 我这里Idea2019有红线提示,提示缺少override注解,但是能运行。 Q6:Tomcat源码大约多少行?老师一般用什么看Tomcat源码? 用SourceInsight?还是直接用Idea看? Q7:对URL为什么要用URLClassLoader?传统的几个ClassLoader难道不能加载吗?
作者回复: Q1,实现代码一样的,但是对外是两个语义。 Q2,是先后输出的,一次交互中完成 Q3,替代方法是用constructor来新建实例 Q4,没用到,只是定义在这里了,大家知道原理。 Q5,Oerride是编译注解,加上是好习惯 Q6,不知道多少行,整个源代码大约是18M,我觉得有30-50万行吧。我直接用IDE看的源代码。 Q7,URLClassLoader是Java自己提供的,就是“传统”的啊。
2023-12-23归属地:北京21 - 小四这个facade感觉用wrapper更合理一些吧?
作者回复: 模仿Tomcat
2024-03-20归属地:北京 - 马以不希望外部修改的把方法设置为私有,只开放出必要的方法,设置为public
作者回复: 但是可以强制转化后获取,Facade就是让这种强制转化失效
2024-01-08归属地:广东 - HH🐷🐠目前想到有两点 1,直接操作请求参数, 会有数据篡改嫌疑 2,影响正常流程, 比如已经调用 response.sendHeaders 方法, 开发人员不熟悉整个复杂流程步骤,有可能会重复调用。 请老师指点
作者回复: 举个例子:如果没有Facade,而是直接传入了实现类ConcreteRequest,则写servlet的那个程序员,他在doGet(request,response)中可以这么写:(ConcreteRequest)request进行强制转换,这样就可以调用ConcreteRequest实现类里面的方法了,造成隐患。
2023-12-24归属地:广东