Tomcat学习笔记(1)Tomcat源码下载与编译运行

1.习惯写个序~
做为一名JavaWeb开发,几乎天天要跟Tomcat打交道,但是一直以来对它的理解都是很模糊的,对于Web框架,我都只是知道大概怎么用,背后的原理也是一无所知,脑海里都没有一个完整的体系图,刚好趁武汉疫情这段时间,订阅了一个这方面的课程,准备把这方面的知识好好补习一下~ 这是我的第二篇博客,希望通过博客把我的学习思路分享给同样想补习这方面知识的小伙伴们,同时也是对自己学习过程的一个记录,要是我的理解方向有不对的地方,欢迎大家在评论下方帮我指正哟!
好啦废话不多说,首先把源码搞到手!

2.源码下载
直接在官网下载就好,百度or谷歌:Tomcat,妹子的天性让我果断选了最新版哈哈~

因为博主是mac系统所以选的tar.gz压缩包,Windows选tar.gz跟zip都可以解压
Tomcat学习笔记(1)Tomcat源码下载与编译运行_第1张图片

3.源码目录介绍
下完解压后的目录结构:
Tomcat学习笔记(1)Tomcat源码下载与编译运行_第2张图片
/bin:存放 Windows 或 Linux 平台上启动和关闭 Tomcat 的脚本文件;
/conf:存放 Tomcat 的各种全局配置文件,其中最重要的是server.xml;
/lib:存放 Tomcat 以及所有 Web 应用都可以访问的 JAR 文件;
/logs:存放 Tomcat 执行时产生的日志文件;
/work:存放 JSP 编译后产生的 Class 文件;
/webapps:Tomcat 的 Web 应用目录,默认情况下把 Web 应用放在这个目录下。

4.Maven形式导入Tomcat工程
Tomcat学习笔记(1)Tomcat源码下载与编译运行_第3张图片

5.启动Tomcat
直接运行org.apache.catalina.startup 包下的Bootstrap类的main方法
Tomcat学习笔记(1)Tomcat源码下载与编译运行_第4张图片
嗯。。很好,报错
Tomcat学习笔记(1)Tomcat源码下载与编译运行_第5张图片
但是!!
Tomcat学习笔记(1)Tomcat源码下载与编译运行_第6张图片
6.启动问题汇总
经过一番折腾发现启动有很多问题,在这里汇总记录下

  • 第一次启动报错:程序包trailers不存在
    解决方案:去webapps/examples/WEB_INF/classes/trailers 目录下可以找到这个类,把它复制到test包下
    Tomcat学习笔记(1)Tomcat源码下载与编译运行_第7张图片
    Tomcat学习笔记(1)Tomcat源码下载与编译运行_第8张图片

  • TestCookieFilter类不存在,同样可以在webapps/examples/WEB_INF/classes/util目录下找到,复制到test下
    Tomcat学习笔记(1)Tomcat源码下载与编译运行_第9张图片
    Tomcat学习笔记(1)Tomcat源码下载与编译运行_第10张图片

  • 再次启动之后发现又报了这个:ClassNotFoundException:listeners.ContextListener
    Tomcat学习笔记(1)Tomcat源码下载与编译运行_第11张图片
    解决方案:删除webapps下的examples文件夹

  • 启动没报错,但是打开本地tomcat地址localhost:8080后显示500
    Tomcat学习笔记(1)Tomcat源码下载与编译运行_第12张图片
    去控制台看其实是由空指针引起的:
    Tomcat学习笔记(1)Tomcat源码下载与编译运行_第13张图片
    解决方案:找到org.apache.catalina.startup.ContextConfig文件的configureStart()方法,添加初始化JSP解析器的代码

context.addServletContainerInitializer(new JasperInitializer(), null);

Tomcat学习笔记(1)Tomcat源码下载与编译运行_第14张图片

  • 乱码问题

细心的同学们可以发现,控制台报错都是乱码,像我这种强迫症患者是不能忍受的
解决方案:修改vm options, 将环境设置为美国-英文:

-Duser.language=en -Duser.region=US -Dfile.encoding=UTF-8

Tomcat学习笔记(1)Tomcat源码下载与编译运行_第15张图片
Tomcat学习笔记(1)Tomcat源码下载与编译运行_第16张图片
看到这个界面代表启动成功啦

之后就可以根据这套源码来深入了解Tomcat背后的原理,之后会跟着学习进度继续更新~

你可能感兴趣的:(Tomcat,tomcat,java,web)