| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 如何在Idea中调试最新版本的Tomcat10源代码 -> 正文阅读 |
|
[Java知识库]如何在Idea中调试最新版本的Tomcat10源代码 |
1. 下载源代码可以到Tomcat官网下载源码压缩包,也可以去GitHub仓库Clone。 1.1 下载压缩包前往网址Tomcat官网:Apache Tomcat? - Apache Tomcat 10 Software Downloads 1.2 GitHub下载仓库地址:apache/tomcat: Apache Tomcat (github.com) 如果想在代码中做一些注释,可以fork到自己的账号。执行如下命令,下载10.0.13版本:
2. 采用Maven方式构建Tomcat默认采用的是Ant方式构建,官网中也对用其他方式做了提示:
为了方便调试,我们采用Maven方式在Idea中调试源码。 2.1 创建pom.xml文件首先在下载的代码根目录创建一个Maven的pom.xml文件,添加需要的依赖:
右键点击代码文件夹,选择用Idea打开。或者再Idea中通过File->New->Project from Sources的方式打开代码文件夹: 点击Maven的Reload按钮开始加载依赖: 等待加载完成。 2.2 Build项目点击Build按钮开始构建项目,会提示:“java: 程序包trailers不存在。”和“找不到符号 ResponseTrailers”,两个错误都出现在test文件夹。缺少的文件都在webapps/examples/WEB-INF/classes文件夹, 拷贝文件夹“webapps/examples/WEB-INF/classes/trailers”到“test”文件夹下。 拷贝文件“webapps/examples/WEB-INF/classes/util/CookieFilter.java”到“test/util”文件夹下。 此时再次Build不再出错。 3. 排查启动问题找到文件“java/org/apache/catalina/startup/Bootstrap.java”,其中的main方法是Tomcat的启动起点。 Run这个方法,启动Tomcat,默认地址为“http://localhost:8080/“。 3.1 端口被占用默认会监听8080端口,如图提示被占用,可以去“conf/server.xml”文件中修改:
3.2 提示Jsp相关的如下错误修改“java/org/apache/catalina/startup/ContextConfig.java”文件,在configureStart方法中添加一行代码,位置如下面所示:
再次启动,可以看到熟悉的页面了。 3.3 输出窗口提示找不到“XXXListener”可以看到如下错误: 和2.2中遇到的错误类似,对应的文件还是存在于“webapps/examples/WEB-INF/classes”文件夹中: 而“webapps/examples/WEB-INF/web.xml”中对这几个Listener做了引用。 这个Webapps文件夹就是我们平时正常使用Tomcat的时候,用于放置网站的目录。里面现有的文件也是平时安装Tomcat之后存在的默认网站。出问题的原因是这个默认网站也是源代码状态,未编译,所以导致找不到对应的类。 如果下载Tomcat的安装文件(64-bit Windows zip),对比一下examples文件夹的内容,如下图,左侧为源代码目录,右侧为安装包中的文件目录,可以看到对右侧编译后的文件。 处理这个问题,一种方案是删掉examples文件夹,但这个文件夹其实提供了我们用来调试的样例,想办法利用起来。将右侧的内容拷贝到左侧(文件夹复制,跳过存在的文件),再次运行,问题已解决。 4. 源代码调试上文说到webapp里的examples文件夹即默认网站的examples菜单对应内容. examples提供了一些样例,正好可以用于调试Tomcat源码: 例如我在CoyoteAdapter的service方法中添加了一个断点 点击Hello World后面对应的Execute链接,断点被激活,一个请求的处理就这么开始了。可以根据自己的调试需求去添加断点调试了。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:31:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |