idea启动tomcat很慢_一文深入理解Tomcat原理:阿里高级技术专家带你玩转Tomcat

前言

本文开始Tomcat源码分析之旅,我将详细的分析Tomcat的启动过程及运行原理。本文将是最基础的一节课,也就是本地编译好Tomcat源码,为后面的分析做基础!

2编译Tomcat源码

2.1下载Tomcat源码

我们去Tomcat官网下载最新的Tomcat源码包,目前最新的版本为9.0.26,我们下载其source源码包tar.gz版本,如下图:

56a22fa907dbe08684eb11e8d7bb11d1.png

2.2 解压源码包apache-tomcat-9.0.26-src.tar.gz

解压源码包apache-tomcat-9.0.26-src.tar.gz之后得到的内容为:

63716ea2bf46ea9cdc11f6ef60f835ce.png

2.3 解压后的文件夹中添加pom.xml

因为要使用Maven的方式导入Tomcat项目,故需要添加相应的maven依赖,此处添加pom.xml文件,该文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>4.0.0com.github.sources source-tomcat 9.0.26source-tomcatjunit junit 4.12testorg.easymock easymock 3.5.1org.apache.ant ant 1.10.1wsdl4j wsdl4j 1.6.2javax.xml jaxrpc 1.1org.eclipse.jdt org.eclipse.jdt.core 3.18.0org.eclipse.jdt.core.compiler ecj 4.6.1Tomcat9.0javatestjavatestorg.apache.maven.plugins maven-compiler-plugin 3.6.1UTF-81.81.8

2.4 IDEA导入tomcat源码工程

使用IDEA开发工具,以Maven的方式导入tomcat工程,导入之后工程结构如下:

0d6d3d6ca30046e8b9118770cd7db39d.png

2.5 启动Tomcat工程

运行org.apache.catalina.startup包下的Bootstrap类的main方法

47baeea1ae4ad48a3b6f5d326653b3c2.png

此时,我们发现了一些错误,下面我们来解决这些错误。

3 异常问题解决

3.1 trailers.ResponseTrailers不存在

我们可以去webapps/examples/WEB_INF/classes/trailers 目录下找到该类,我们将这个类复制一份到test下:

38611044f5c6866b16aa1d37c316b04c.png

拷贝完成之后的情况如下:

48dcfa75a0b0bf670a6d41e4e9b555e0.png

3.2 CookieFilter不存在

同样,我们去将homewebappsexamplesWEB-INFclassesutilCookieFilter.java 文件拷贝到 testutil 目录下:

bcf474624a7ffc5e61acbd89478a41db.png

3.3 FileNotFoundException: /Library/ApacheTomcat/source/test/source-tomcat/conf/server.xml (No such file or directory)

在解决上述3.1和3.2的问题之后,又出现了下图所示的问题:

4a6635ea0b334e401136800e7c0a01c2.png
  • 解决方案: 在启动的配置中,添加VM options的参数,添加项目路径,本机为/Library/ApacheTomcat/source/test/apache-tomcat-9.0.26-src,故而添加参数内容为: -Dcatalina.home=/Library/ApacheTomcat/source/test/apache-tomcat-9.0.26-src, 如下图所示:
48e9ce410b82c281654cf2c6a0836ad6.png

3.4 java.lang.ClassNotFoundException: listeners.ContextListener

在解决上述3.3问题之后,再次启动Bootstrap类的main方法,程序出现以下错误信息:

b55f0f39baf42d71097c6c89f2a84211.png
  • 解决方案: 删除 webapps 下的 examples 文件夹!程序再次运行不报此错误!

3.5 Servlet.service() for servlet [jsp] in context with path [] threw exception [org.apache.jasper.JasperException: Unable to compile class for JSP] with root cause

在解决上述问题之后,启动Bootstrap类的main方法,程序正常启动,此时我们在浏览器访问127.0.0.1:8080, 程序出现以下错误信息:

bda7097b343bac1e52d857d4ac7b9875.png
6b991ba65c3c257ae1948ca4b34657f0.png
  • 解决方案:编辑 org.apache.catalina.startup.ContextConfig 文件的 configureStart() 方法,添加初始化 JSP 解析器的代码:
context.addServletContainerInitializer(new JasperInitializer(), null);
aa8459e0995e779872b37ce758d37bd2.png

添加之后,再次启动main方法,浏览器输入127.0.0.1:8080得到的结果为Tomcat的界面:

baf254573ad48fda82f232b614b8b0ad.png

3.6 日志乱码

启动的日志中含有很多的乱码,虽然对程序整体并不影响,但是在之后查看日志时,还是影响比较大的,先看下日志乱码的情况:

d70c044532156857d7f0c993641e7f15.png
  • 解决方案: 修改vm options 内容,将环境设置为美国-英文,设置内容如下:
-Duser.language=en -Duser.region=US -Dfile.encoding=UTF-8
5881ae5bd8fefe8666b1e1d3d9422f2c.png

再次运行main方法,程序日志正常显示:

c2cf74d989c81ec91b91620f28470998.png

至此,我们已经将Tomcat的源码导入到IDEA的工具中,也解决了一些问题,之后,我们将利用这份源码来分析Tomcat的启动及运行原理。

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页