如何进入tomcat源码?

Ksh*_*rma 8 java eclipse debugging tomcat

我想学习tomcat操作的内部并理解流程.

为此,我创建了一个servlet -

public class TestServlet extends HttpServlet {
    //Breakpoint set on constructor
    public TestServlet() {
    }
}
Run Code Online (Sandbox Code Playgroud)

我在源查找目录中包含了tomcat源代码,并以调试模式启动了服务器.以下是调试器在断点处停止时的堆栈跟踪 -

Daemon Thread [localhost-startStop-1] (Suspended (entry into method <init> in TestServlet)) 
    owns: StandardWrapper  (id=39)  
    owns: StandardContext  (id=40)  
    TestServlet.<init>() line: 12   
    NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]   
    NativeConstructorAccessorImpl.newInstance(Object[]) line: 39    
    DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27    
    Constructor<T>.newInstance(Object...) line: 513 
    Class<T>.newInstance0() line: 355   
    Class<T>.newInstance() line: 308    
    DefaultInstanceManager.newInstance(String) line: 138    
    StandardWrapper.loadServlet() line: 1144    
    StandardWrapper.load() line: 1088   
    StandardContext.loadOnStartup(Container[]) line: 5123   
    StandardContext.startInternal() line: 5407  
    StandardContext(LifecycleBase).start() line: 150    
    ContainerBase$StartChild.call() line: 1559  
    ContainerBase$StartChild.call() line: 1549  
    FutureTask$Sync.innerRun() line: 303    
    FutureTask<V>.run() line: 138   
    ThreadPoolExecutor$Worker.runTask(Runnable) line: 886   
    ThreadPoolExecutor$Worker.run() line: 908   
    Thread.run() line: 662
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,tomcat启动了一个新的守护程序线程来处理初始化TestServlet.如果我从这个位置退出,它将回溯到最后运行然后停止.但是我想了解主服务器逻辑.我该怎么办才能org.apache.catalina.startup.Bootstrap上课? (或在主启动线程上运行的其他类)

Shi*_*Kai 6

您可以将Tomcat作为远程Java应用程序进行调试.

以下是步骤:

  1. 创建Java项目并将Tomcat源文件复制到项目的源文件夹中.(您可以忽略编译错误.)
  2. 打开Bootstrap.java并在main方法中设置断点.
  3. 创建CATALINA_BASE/bin/setenv.bat(或.sh)文件并将以下行放入该文件中.

    set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y

  4. 使用命令行中的catalina.bat(或.sh)以调试模式启动Tomcat.

    catalina.bat jpda start

  5. 从Eclipse,在Remote Java Application下设置Debug Configuration并连接到Tomcat进程.(运行 - >调试配置 - >远程Java应用程序.)

截图: 使用JPDA_OPTS进行Tomcat调试