Tomcat 从眼熟到脸熟

前不久发了一篇分类汇总历史文章的文章(「Tomcat那些事儿」历史热文分类汇总)。

这里面关于Tomcat的文章没有按学习顺序做太细致的划分,后面不少读者反馈过这个问题,今天我们一起来探讨下对于使用Tomcat的不同「角色」,一般需要了解哪些内容,以及我的公众号已发布文章的阅读顺序。

对于 Tomcat 的使用角色,我这里分为两类

  • 实用型

  • 探究型

实用型

什么是实用型角色呢,比如一线运维人员,比如不想关注实现原理和问题细节的开发者。

实用型角色喜欢在遇到问题时直接看到问题的答案。比如启动 Tomcat 时遇到了端口占用,会期待看到「在什么地方修改可以解决端口占用的问题?」

此时可能一篇如何修改 server.xml 中关于 Connector 端口以及 SHUTDOWN 端口,以及「如何了解当前指定端口是被哪个进程占用」就比较符合其预期。

对于实用型为主的朋友,可以重点关注 Tomcat的几个配置文件,

 

  • bin 目录下的 catalina.sh 

  • conf 目录下的 server.xml

  • conf 目录下的 catalina.properties

  • conf 目录下的 logging.properties

记得好早以前看过一本『Apache Tomcat 6 高级编程』,感觉不错,可以对照着看看。初了配置外,记得还会讲一些稍深入的内容。

类似于这种「只讲方式」的文章,我的公众号不太多。一般都是根据某个方面讲具体的原理,以及对应要 Tomcat 中的实现,再解读源码等。

实用型上手文章如下:

  1. 透过Tomcat配置认识其内部组件

  2. Tomcat进程自动退出问题

  3. 如何检测 Tomcat 的状态是 UP 还是 DOWN ?

  4. 如何远程部署应用到Tomcat

  5. 如何避免Manager应用被人利用

  6. 如何不配置应用名访问应用?

  7. Tomcat的Windows服务实现方式分析

  8. Tomcat官方的集群(Cluster)配置说明

  9. Tomcat多虚拟主机配置及原理

  10. Tomcat单点登录配置及源码分析

  11. Tomcat怎样防止跨站请求伪造(CSRF)

  12. 为什么请求总是404?

  13. 如何在Tomcat中部署应用的多个版本

  14. Tomcat与跨域问题

  15. 怎样了解你的线程在干嘛?

  16. 一款功能强大的Tomcat 管理监控工具

  17. Tomcat的Logging(1)

其实对应组件的配置,官方文档真心讲的很细致,配置上有问题可以直接查看对应的属性说明就O了。  当然,如果有具体的问题,也可以在后台给我留言。

前面有不少有疑惑的朋友留言,有通过简短描述解决问题,也有通过提供相关链接资料的方式提供帮忙。留言的朋友, 有时间的情况下,我都会尽力帮忙。

探究型

探究型,主要是指那些对「背后的原理」有兴趣的人。比如看到 Tomcat 停止时, 本地生成了个 SESSION.ser 文件,他就很想了解下什么时候会生成这个文件,有什么作用,是所有信息都能保存么?

再比如部署了多个Web应用, 每个应用里都有 Spring/Hibernate/Log/commons-lang 这一类较通用的类库,他就很想了解下,多个应用间能不能共同使用一套jar呢? 大家同时部署的时候,这些类库是怎样隔离的呢?

一个IDE里启动了多个Web应用,是启动了多个 Tomcat么?他们把应用部署到哪里去了?

经常遇到应用里的乱码,在 Tomcat 内容传递的时候编码乱了吗?怎样保持不乱码呢?

这些满满的疑惑,如果你只是看看配置,是得不到答案的。需要自己部署,跟读代码,多次的 Debug,一点点揭开庐山真面目。

对于探究型的朋友,我也推荐看一下上面提到的书,对于整体的 Tomcat 使用及其内部的组件,有了整体上的认识,再从整体到细节,找自己感兴趣的组件去深入研究。

如果从源码入手,一定要「有抓有放」。一点点看,沿着细节从头跟到尾可能最后反而看不太清,「只缘身在代码中」。

沿着「启动流程」,「请求处理流程」这两个主要流程逐步进行,在启动中了解应用部署,在请求处理中了解参数传递, pattern mapping, Context处理,了解 为什么 Tomcat 能被称为 「Servlet 容器」。

关于源码的阅读, 对于 Tomcat 的学习不得不提的是「How Tomcat Works」,书虽老了点,不过「老当益壮」,原理仍然通用,可以从中一睹Tomcat的设计思路。

了解了 Tomcat 的基础组件之后,可以再从日常开发使用上,了解下在 IDE里或者系统中同时启动多个实例,具体是如何配置的,另外如何配置common class Loader 可以实现应用间的资源共用。应用中使用到的JSP 文件最终又是如何被处理的呢?

你一定不知道IDE里的Tomcat是怎么工作的!

你了解Tomcat是怎样处理Jsp文件的吗?

如果把 Tomcat做为一个独立的 Web Server 来响应静态资源,他内部又是如何做的呢,是否可以 List dir?响应资源是否支持压缩?

  1. Tomcat是如何响应静态资源的?

  2. Tomcat高效响应的秘密(一) Sendfile与Gzip

  3. Tomcat高效响应的秘密(二) keep alive

我的公众号有以下几篇谈源码分析的:

  1. 读源码时,我们到底在读什么?

  2. 怎样阅读源代码?

  3. 怎样调试Tomcat源码

  4. 80%的程序员都不了解的调试技巧

  5. 从源代码构建Tomcat的方式

  6. 当我们谈Debug时,我们在谈什么(Debug实现原理)

通过一段时间源码后,可能一些常见的Web 应用面试题,或者你之前在开发 Web 应用时的困惑会得到解答。

  1. Servlet到底是单例还是多例你了解吗?

  2. WEB-INF目录知多少

  3. Tomcat是如何处理请求参数的?

  4. 深入Tomcat源码分析Session到底是个啥!深度揭秘乱码问题背后的原因及解决方式

  5. 禁用Cookie后,Session怎么样使用?

  6. 快看被错用了这么久的GET和POST方法到底有什么区别

  7. web.xml是怎么被解析的?

  8. 关于重定向和转发,书上和老师都没告诉你的......

  9. 你可能真的不了解的Basic认证

  10. 修改JSP文件实时生效的秘密

  11. 对于过期的session,Tomcat做了什么?

  12. WEB应用是怎么被部署的?

又看一段时间源码,对于互联网中常被提及的Websocket, HTTP2 ,异步Servlet 到底是怎么使用的呢?在容器内又是怎样支持的?

源码中都会出清晰的回答。

Tomcat与HTTP/2

Tomcat的异步Servlet实现原理

再之后,功力精进了几成之后,工作中遇到的问题,你都会通过前面的学习自己给出答案。

  1. Tomcat类加载器以及应用间class隔离与共享

  2. 类加载器与类冲突

  3. 类加载器与类的热替换(Hotswap)

  4. 类路径(classpath)的原理及在Tomcat中的使用

  5. 谁动了我的 class?

  6. Tomcat目录部署与Context描述文件context.xml

  7. Tomcat应用自动重部署与WatchedResources

  8. 一篇文章读懂框架标签(taglib)的工作原理

对于项目的搭建集群的需要时,你已经了解多实例之间的Session 该如何共享数据,如何进行集群间的应用部署。

  1. 详解集群内Session高可用的实现原理

  2. Tomcat官方的集群(Cluster)配置说明

  3. Tomcat集群应用部署功能实现分析

  4. Tomcat的Session持久化策略

对于整体的设计与架构关心的朋友,则从另一个角度,来了解与学习设计模式,规范参考实现等

对于 Tomcat  源码更熟悉之后,可以根据理解,为现有的开源项目提交 PR,将自己的代码提供给更多人使用。

运行时如何变更及保存Tomcat配置?

怎样参与到全世界优秀的开源项目中?

实用型和探究型可能在某些时候、某些阶段也会互相转化。 根据自己当前阶段的真实想法,去和 Tomcat 一起玩耍吧!

觉得本文对你有帮助?请分享给更多人支持一下,谢谢

关注『 Tomcat那些事儿  』 ,发现更多精彩文章!了解各种常见问题背后的原理与答案。深入源码,分析细节,内容原创,欢迎关注。

 

 

更多精彩内容:

一台机器上安装多个Tomcat 的原理(回复001)

监控Tomcat中的各种数据 (回复002)

启动Tomcat的安全机制(回复003)

乱码问题的原理及解决方式(回复007)

Tomcat 日志工作原理及配置(回复011)

web.xml 解析实现(回复 012)

线程池的原理( 回复 014)

Tomcat 的集群搭建原理与实现 (回复 015)

类加载器的原理 (回复 016)

类找不到等问题 (回复 017)

代码的热替换实现(回复 018)

Tomcat 进程自动退出问题 (回复 019)

为什么总是返回404? (回复 020)

...

PS: 对于一些 Tomcat常见问题,在公众号的【常见问题】菜单中,有需要的朋友欢迎关注查看。

  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

chainhou

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值