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

17|更大的框架:MiniSpring与MiniTomcat集成

你好,我是郭屹。今天我们继续手写 MiniTomcat。
上节课我们实现了 Context 类的预加载,并引入 server.xml 和 web.xml,分别对服务端和 Servlet 进行自定义配置。到目前为止我们的 MiniTomcat 已经是一个完整的小型 Tomcat 了。
考虑到在目前大部分的场景中,依托于 Spring 框架编写的项目大多使用 Tomcat 服务器进行启动,而我们之前已经完成过 MiniSpring 框架的构建,所以很自然地,我们就会想到将现有的 MiniTomcat 与之前完成的 MiniSpring 进行集成。
从原理上来说,只要是按照 Servlet 规范实现的服务器,就可以将 MiniSpring 直接放在 webapps 目录下运行,不用做任何额外的工作。所以从道理上讲,MiniTomcat 和 MiniSpring 的集成也是这样的。
不过,因为 MiniTomcat 毕竟是一个麻雀版的 Tomcat,并没有完整地实现 Servlet 规范,所以现在这么直接绑在一起是不能顺利运行的,我们还需要做一点完善的工作。
我们先回顾一下,MiniSpring 启动的时候,依赖 Tomcat 环境做什么事情。一切的起点都在 web.xml 文件中,里面定义了 Listener、Filter 和 Servlet。为了让 MiniSpring 启动起来,我们要实现一个 ContextLoaderListener,这个 Listener 的目的是启动 MiniSpring 的 IoC 容器。然后用一个 DispatcherServlet 来拦截一切路径,通过这个 DispatcherServlet 来使用 MiniSpring 的 MVC。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了如何将MiniSpring与MiniTomcat集成,实现一个完整的小型Tomcat服务器。作者首先回顾了MiniSpring启动时对Tomcat环境的依赖,并指出了MiniTomcat存在的局限性。随后,文章介绍了对MiniSpring中的Bean进行改造,以验证MiniTomcat和MiniSpring的集成。此外,还讨论了嵌入式方式与依托于MiniTomcat项目本身的运行方式的区别,并指出了后续集成过程中的测试方式。整体来说,本文重点介绍了MiniSpring与MiniTomcat集成的技术细节,为读者提供了一种实现小型Tomcat服务器的思路和方法。文章内容涉及项目结构、ClassLoader的移动、server.xml和web.xml的管理、MiniTomcat的代码结构以及集成过程中的关键步骤。对于想要了解如何将MiniSpring与MiniTomcat集成的读者来说,本文提供了清晰的指导和实现思路。文章还提供了测试结果和小结,以及思考题引导读者深入思考集成后的MiniTomcat + MiniSpring与实际的Tomcat+Spring结构上的区别。

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

全部留言(1)

  • 最新
  • 精选
  • peter
    请教老师几个问题: Q1:从编码角度怎么遵守servlet规范? 写出符合servlet规范的servlet,需要怎么做?查看规范文档,照着文档写吗?还是继承某个已经存在的符合规范的接口? Q2:以前开发的项目中spring与tomcat是什么关系? 本课程中,spring是作为一个webapp,放到tomcat的应用目录中;用户请求是先到tomcat,tomcat再转发给spring;而且spring是tomcat负责启动的。总之,tomcat好像是spring的管理者。 比较早的时候,还没有使用springBoot的时候,用IDE创建一个项目,直接创建的是spring项目,直接感觉到的是spring MVC,并没有感觉到tomcat的存在,但需要配置tomcat。 此种情况下,tomcat和spring是什么关系?还是我们本专栏的关系吗?即tomcat管理spring? 现在的开发中,IDE一般都是用Idea,然后使用springBoot创建项目,直接创建的也是spring项目,也没有感觉到tomcat的存在,甚至感觉不到spring的存在。不过还是需要配置tomcat。 此种情况下,springBoot和tomcat、spring是什么样的关系? Q3:miniSpring相当于原来的servlet处理部分吗?? 本课之前,servlet由miniT的servlet部分处理。本课集成minis以后,原来的servlet处理部分就没有了,由minis处理。这样的话,minis相当于接管了原来的servlet处理部分,相当于一个大的servlet。是这样吗? Q4:集成mins以后,原来的静态处理部分由谁处理? 本课之前,一部分是处理servelt,另外一部分是处理静态文本文件。集成minis以后,处理静态文本文件部分是谁处理? Q5:集成minis以后,正常的应用怎么办? Minit集成了minis,那其他web应用怎么办?原来是把应用放在webapp目录下面,那现在怎么办?

    作者回复: Q1,遵守规范对servlet程序员是很容易的,extends HttpServlet就可以了,简单来讲就是写在doPost(), doGet()中。 Q2,Tomcat本身支持两种方式,一种是独立服务器,一种是embedded,一般用SpringBoot来 搭建一个项目,里面的Tomcat是embedded模式的。MiniTomcat实现的是独立服务器模式,从软件结构讲我个人喜欢这种模式,觉得embedded模式有违软件的标准架构。 Q3,MiniSpring被当成了MiniTomcat的一个应用中的基础框架,提供一个Listener启动,一个servlet进行拦截。 Q4,静态部分简化处理了,在Processor中如果路径是/resources/则认为是静态的 Q5, 正常应用还是跟以前一样,没有变化。因为集成MiniSpring是当成一个webapp对待的。

    2024-01-16归属地:北京
    1
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部