蘑菇君深入源码学习Tomcat系列 (1) - Tomcat与Servlet的那些事

瞎扯淡

最近很焦虑,每天过着咸鱼般的生活,感觉前途渺茫。再这么下去,整个人就真成咸鱼了。焦虑来源于日复一日工作中,自己变得越来越麻木,不会动脑思考。憋说举一反三了,脑子多转一下都感觉要耗尽全身气力。

焦虑之余,平时也会看各种技术文章。无论是HashMap, ReentrantLock, 还是Redis, Kafka, dubbo, 我都看的有模有样。最喜欢Spring, 兼容并包, 等到睡上一觉,已被我全都忘掉。若是有人问到,请自己网上去找~ヾ(o・ω・)ノ

反而三年前写的关于Android控件源码解析的文章,自己还印象深刻。时不时的收到有人给我点赞的邮件,还会嘿嘿一笑。

所以我打算狠狠心,把打王者的时间用在看源码和写博客上。我倒是要看看,一年以后,我的王者水平会不会掉到青铜。╮(╯﹏╰)╭

既然目的是看源码学习思想,也没有必要挑那些复杂的最新的技术(怕看不懂,受到打鸡…),那就挑一个工作中开发都会用到的,这样既能学习思想,又能解决实际问题。所以我挑了Tomcat,这个每天都要启动N遍,又较为底层的开源Web容器。

Tomcat是什么

想起第一次接触Tomcat,还是我五岁那年,那时他还很年轻,还有一个cp叫杰瑞…

咳咳,错了错了。第一次接触Tomcat大概是大一吧,有一门课程就是学Web程序设计。那个时候按照书本操作,写了个jsp页面,放到Tomcat里运行起来。 打开浏览器,输入localhost:8080这串神秘代码,看到了"Hello World",那个时候感觉自己离淘宝,离马云只有一步之遥了。

那Tomcat究竟是什么呢?

long long ago, Web应用主要用于浏览器新闻等静态页面。那个时候只需要服务端有一个能解析Http协议,返回HTML给浏览器的应用程序即可,称作HTTP服务器。但是现在呢,一个页面,没有点热门排行,没有点个性化推荐小广告,都不好意思见人。这些动态结果,就需要服务端经过一定的逻辑处理,再生成用户需要的页面信息,让HTTP服务器返回给浏览器。

所以除了HTTP解析工具外,还需要一套扩展机制去调用其他业务逻辑来生成最终的返回结果。Sun公司推出了Servlet技术,用于规范Java语言的这种服务端扩展机制。我们可以把Servlet简单理解为运行在服务端的Java程序,但是Servlet不能独立运行,必须把它部署到Servlet容器中,由容器来调用。Tomcat就是实现了Servlet规范的Servlet容器,同时也具备HTTP服务器的功能,我们称这种应用程序为Web容器。

现在微服务大行其道,都喜欢将一个大的应用拆分成一个个功能独立单一的小应用,进行快速部署。在这个过程中,后端应用数量必然要大大增加,每个应用都需要运行在一个独立的Web容器里。所以,为了减少资源消耗,我们希望Web容器也尽可能消耗少的CPU和内存资源。而Tomcat就是一个轻量级且稳定的Web容器。同时,Tomcat本身也是Spring Boot默认的内嵌Web容器,直接由应用本身就能用快速启动容器运行。

Servlet规范

刚刚说到Tomcat实现了Servlet规范,那我们在看Tomcat源码前,得先了解一下Servlet规范是什么。

抛开Servlet,如果是我来实现一个Web容器,我会怎么做?

  1. 首先肯定要有个HTTP解析模块帮我们将HTTP请求转换成Java类,比如Request, Response

  2. 再来个模块处理这些Request,根据不同Request内容返回不同的Response。最简单的方式就是:

public Response handleRequest(String url) {
    
    if ("/mogujun/handsome/get".equals(request.getUrl())) {
        return noFace();
    }
    else if (
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值