手把手带你写一个 MiniTomcat
郭屹
前 Sun Microsystems Java 研发工程师
1792 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 22 讲
开篇词 (1讲)
手把手带你写一个 MiniTomcat
15
15
1.0x
00:00/00:00
登录|注册

10|Servlet Wrapper:如何维护Servlet生命周期及实现容器管理?

你好,我是郭屹。今天我们继续手写 MiniTomcat。
上节课我们把 Request 和 Response 从无状态变成了有状态,实现了 Session 和 Cookie 的管理,还实现了同一页面的资源请求复用 Socket,减少了性能消耗。
到目前为止,我们已经基本将浏览器与服务器之间的通信处理完毕。接下来我们再看后端服务器,现在我们还是使用 ServletProcessor 简单地调用 Servlet 的 service 方法,接下来我们考虑将其扩展,对 Servlet 进行管理,这就引入了 Container 容器的概念。我们计划让 Container 和 Connector 配合在一起工作,前者负责后端 Servlet 管理,而后者则负责通信管理。
初步构建容器后,我们还会考虑使用 Wrapper 进行包装,用于维护 Servlet 的生命周期:初始化、提供服务、销毁这个全过程,把 Servlet 完全纳入程序自动管理之中,让应用程序员更少地感知到底层的配置,更专注于业务逻辑本身。
接下来我们一起来动手实现。

项目结构

这节课我们新增 ServletContainer 与 ServletWrapper 两个类,分别定义 Container 与 Wrapper,你可以看一下现在的程序结构。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何在手写MiniTomcat项目中实现Servlet的管理和容器管理。作者首先介绍了项目结构,并引入了ServletContainer和ServletWrapper两个类,分别用于定义Servlet的管理容器和维护Servlet的生命周期。在ServletContainer类中,作者使用ClassLoader来加载Servlet类并创建实例,并通过Map存储Servlet实例,实现了对Servlet的管理。同时,作者对HttpServer的启动类进行了改造,引入了ServletContainer容器的概念,将Servlet管理和网络通信功能分离。在ServletWrapper类中,作者通过loadServlet()方法加载并实例化Servlet,进一步实现了对Servlet的管理和生命周期维护。文章内容涉及了Servlet的生命周期管理、容器管理和软件结构拆分的技术特点。通过对ServletContainer和ServletWrapper的介绍和实现,读者可以了解如何在MiniTomcat项目中实现对Servlet的管理和容器管理,以及如何进行软件结构的拆分和功能的分离。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 MiniTomcat》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • peter
    请教老师两个问题: Q1:为什么Cookie有实现而Session没有实现? 代码中的Session类实现了HttpSession接口,但代码中用的Cookie是系统提供的。为什么Session就没有系统提供的实现类? Q2:C++服务器有哪些? 看到一篇介绍用C++开发服务器的文章,说明有C++开发的服务器。Tomcat是用Java开发的。那么,有什么C++开发的服务器产品?用在什么场景下?互联网公司一般不用C++服务器吧。

    作者回复: 应该是Cookie比较简单吧,javax.servlet.http里面就直接实现了。 C++服务器一样多得很,Apache,Nginx,微软的IIS,还有很多游戏服务器,为了性能都用的C/C++写的。

    2023-12-30归属地:北京
  • HH🐷🐠
    请一个副总吧, 管理每个部门的 Connector 和 Container, 负责他们两个创建和相互引用

    作者回复: 各自都有各自的解决方案。我是这么想的,connector相当于公司的销售部门,把客户引进到公司,container是客户服务部门,满足客户需求。所以作为一个公司,还要有一些管理职能的部门,以及支撑销售部和客户服务部的部门。

    2023-12-29归属地:广东
    2
  • peter
    发的留言怎么没有显示出来,再发一次: Q1:为什么Cookie有实现而Session没有实现? 代码中的Session类实现了HttpSession接口,但代码中用的Cookie是系统提供的。为什么Session就没有系统提供的实现类? Q2:C++服务器有哪些? 看到一篇介绍用C++开发服务器的文章,说明有C++开发的服务器。Tomcat是用Java开发的。那么,有什么C++开发的服务器产品?用在什么场景下?互联网公司一般不用C++服务器吧。
    2024-01-01归属地:北京
    1
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部