Idea中tomcat启动源码调试进入到tomcat内部进行调试的方法可以通过以下步骤实现:
- 在Idea中配置tomcat启动参数
首先需要在 Ieda 中配置 tomcat 的启动参数,具体方法为:
在Idea侧边栏中找到「Run/Debug Configuration」,点击「+」按钮,选择「Tomcat Server」,然后在「Server」选项中选择已配置好的 tomcat ,在「Configuration」选项中找到 「Before Launch」,添加一个 「Build」 的任务,最后点击 「Apply」 完成。
- 配置Remote Debug
接下来需要配置 Remote Debug,将 Idea 与 Tomcat 的启动过程与调试连接起来,具体方法如下:
在 Ieda 中找到 「Run/Debug Configuration」,并添加一个 Remote Configuration。
在「Name」中取一个有意义的名字,比如「Tomcat Remote Debug」。
在「Host」中输入 tomcat 所在主机 IP 地址,在「Port」中输入 tomcat 的 Remote Debug 端口(默认为 8000)。
最后点击 「Apply」 完成配置。
- 进入 Tomcat 源码调试
启动前先在 tomcat 的 bin 目录下找到 catalina.sh 文件,这个是 tomcat 启动脚本文件,在它的前面添加如下两行:
export JPDA_ADDRESS=8000
export JPDA_TRANSPORT=dt_socket
启动 tomcat:
./catalina.sh jpda run
这样就可以使用 Idea 连接到运行中的 tomcat ,在 tomcat 源码内部进行 Debug。
- 示例 1
比如修改 tomcat DefaultServlet 中 doGet 方法中的一个变量的值。
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doHead(req, resp);
PrintWriter writer = resp.getWriter();
String root = req.getContextPath() == null ? "" : req.getContextPath();
String accept = req.getHeader("accept");
String pathInfo = req.getPathInfo() == null ? "" : RequestUtil.normalize(req.getPathInfo());
boolean isDirectory = false;
String guid = UUID.randomUUID().toString();
...(省略部分代码)...
writer.println("<input id=\"guid\" type=\"hidden\" value=\"" + guid + "\"/>");
}
对输出内容的 guid
添加日志输出:
writer.println("<input id=\"guid\" type=\"hidden\" value=\"" + guid + "\"/>");
System.out.println("guid: " + guid);
在 Idea 中启动 Remote Debug 连接 tomcat 之后,按下 jsp 页面中的 F5 刷新。
在 tomcat 控制台中将看到输出的日志:
guid: 393fb527-2c45-4217-b242-d23cbe23b3e5
- 示例 2
以调试 tomcat 运行的 Manager 应用为例,进入方法源码调试:
在 tomcat 的 conf 目录下找到 tomcat-users.xml 文件,在其中添加一个具有 manager-gui 权限的用户账号:
平台管理 帐号及密码
<role rolename="manager-gui"/>
<user username="Tomcat" password="tomcat" roles="manager-gui"/>
在 tomcat 的 conf 目录下找到 context.xml 文件,启用一个 Manager 应用:
<Context path="/manager" docBase="${catalina.home}/webapps/manager" privileged="true" antiResourceLocking="false" antiJARLocking="false">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="^.*$" valveClass="org.apache.catalina.valves.RemoteIpValve"/>
<Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
使用 manager 账号登录 Manage 应用:
访问地址:http://localhost:8080/manager/html ,输入 tomcat 的 manager-gui 权限的用户名和密码登陆管理页。
在 Ieda 中打开 tomcat-manager webapp 的 Servlet 源代码,比如用户列表页面“List users”:
文件路径:$TOMCAT_ROOT/webapps/manager/WEB-INF/classes/org/apache/catalina/manager/UsersServlet.java
通过 Idea Remote Debug Maven 引用 tomcat 的源代码,即可在自己电脑的 Idea 窗口中调试 tomcat 的 Manager 应用。
以上就是通过 Idea 中 tomcat 启动源码调试进入到 tomcat 内部进行调试的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Idea中tomcat启动源码调试进入到tomcat内部进行调试的方法 - Python技术站