您好,欢迎访问三七文档
当前位置:首页 > 法律文献 > 理论/案例 > Tomcat源码研究
Tomcat源码研究作者:ss1做最棒的软件开发交流社区第1/76页本书由JavaEye提供的电子书DIY功能自动生成于2009-11-06目录1.Tomcat源码研究1.1Catalina.bat脚本解析...............................................................31.2Tomcat启动遇到的常见问题.........................................................111.3Tomat6架构探讨..................................................................141.4Tomat6的整体架构................................................................181.5JMX在Tomcat中的应用(一).......................................................211.6JMX在Tomcat中的应用(二).......................................................231.7JMX在Tomcat中的应用(三).......................................................331.8JMX在Tomcat中的应用(四).......................................................371.9分析Tomcatcatalina.bat脚本......................................................421.10编写批处理文件..................................................................471.11《HowTomcatWorks》读书笔记(二):Connector...................................581.12《HowTomcatWorks》读书笔记(一).............................................621.13《HowTomcatWorks》读书笔记(三):Tomcatdefaultconnector.....................661.14《HowTomcatWorks》读书笔记(四):容器初探...................................701.15《HowTomcatWorks》读书笔记(五):生命周期...................................74页1.1Catalina.bat脚本解析发表时间:2009-11-06当startup脚本完成环境变量的设置后,就开始调用catalina.bat脚本来启动Tomcat。Catalina脚本的主要任务是根据环境变量和不同的命令行参数,拼凑出完整的java命令行,调用Tomcat的主类org.apache.catalina.startup.Bootstrap来启动Tomcat。我们先不解析该脚本,而是写一个简单的测试脚本来调用这个程序,看看测试结果,从而理解该脚本的调用方法。测试脚本如下:rem请将JAVA_HOME环境变量修改到您的JDK安装目录setJAVA_HOME=C:\ProgramFiles\Java\jdk1.5.0_09rem请将CATALINA_HOME环境变量修改到您的Tomcat安装目录setCATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28rem开始调用catalina.bat文件call%CATALINA_HOME%\bin\catalina.bat我们把上面的脚本保存为start_tomcat_nothing.bat文件,然后在MS-DOS下执行,我们将看到如下的执行结果。这个脚本并没有成功启动Tomcat,但是它给我们提供调用catalina.bat脚本的方法,请阅读上面窗口中的加亮部分。Catalina.bat的调用方法为catalina后面加上具体命令参数,这个命令参数有以下9种。具体解释如下:debug在调试器中启动Tomcatdebug-security带有安全管理器的调试器中,调用catalina脚本来启动Tomcatjpdastart调用catalina脚本,在JPDA调试器中启动Tomcatrun在当前窗口内调用catalina脚本来启动Tomcat(不切换窗口)run-security带有安全管理的情况下,在当前窗口内调用catalina脚本来启动Tomcat(不切换窗口)start开始一个新的DOS窗口,并在其中启动Tomcat(切换至新窗口)start-security带有安全管理的情况下,在新的DOS窗口中启动Tomcat(切换至新窗口)stopcatalina脚本执行停止命令来关闭Tomcat页version您使用的Tomcat版本看完上面的解释,我们对Tomcat的启动参数有所了解。好,咱们写一个最简单的脚本来测试一下,拷贝刚才start_tomcat_nothing.bat脚本,将它重新命名为start_tomcat_version.bat,该脚本的内容和start_tomcat_nothing.bat脚本几乎一致,只是最后一行多加了一个version命令,start_tomcat_version.bat脚本全部内容如下:rem请将JAVA_HOME环境变量修改到您的JDK安装目录setJAVA_HOME=C:\ProgramFiles\Java\jdk1.5.0_09rem请将CATALINA_HOME环境变量修改到您的Tomcat安装目录setCATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28rem开始调用catalina.bat文件call%CATALINA_HOME%\bin\catalina.batversion我们可以在DOS下观察该脚本的执行结果。该脚本顺利执行,执行的结果告诉我们当前Tomcat的版本号为5.0.28。有兴趣的读者朋友可以试试其它的8个命令参数,这些命令参数有时对我们非常有用。举例来说,有时候我们正常启动Tomcat时,Tomcat弹出一个DOS窗口,但是瞬间消失,我们看不出到底哪里出了问题,也无任何启动日志可看。在这种情况下,我们可以使用run命令在同一个窗口内启动Tomcat,不让Tomcat弹出新的DOS窗口,好让我们看看Tomcat到底为什么没有启动。测试这个问题的简单方法如下。首先,请到Tomcat安装目录下的bin子目录,把Tomcat的启动jar文件bootstrap.jar重命名为bootstrap_1.jar,然后点击startup.bat文件启动,我们会看到一个小黑窗口闪了一下,但是Tomcat并没有正常启动,这是因为startup.bat执行的是Tomcat的缺省命令start,该命令将在开始一个新的DOS窗口,并在其中启动Tomcat。在这种情况下,我们就要借重于run命令了,我们改以下我们上面的start_tomcat_version.bat脚本,将version命令改为run命令,然后另存为start_tomcat_run.bat,该脚本全部内容如下:rem请将JAVA_HOME环境变量修改到您的JDK安装目录setJAVA_HOME=C:\ProgramFiles\Java\jdk1.5.0_09rem请将CATALINA_HOME环境变量修改到您的Tomcat安装目录setCATALINA_HOME=C:\carl\it\tomcat_research\jakarta-tomcat-5.0.28rem开始调用catalina.bat文件call%CATALINA_HOME%\bin\catalina.batrun脚本的执行结果如下:页请观察上面窗口中的加亮部分,这部分向我们清楚地展示Tomcat的启动错误,没有找到Tomcat的启动主类Bootstrap。这是因为我们人为地把Tomcat的启动jar文件包从bootstrap.jar重命名为bootstrap_1.jar,这个bootstrap.jar文件既然不存在,那包含在这个文件的Bootstrap.class文件当然也就找不到了。现在,我们再回过头看看这个catalina.bat脚本。为简单起见,我们假定该脚本带缺省命令行参数start,看看catalina脚本的执行流程。如果您对catalina的security命令有兴趣,请参考Sun公司的文档;如果您对jpda命令有兴趣,不妨浏览一下文档。让我们打开catalina脚本,首先请注意这个脚本第二行有一个setlocal的命令,这个命令表明catalina中的环境变量只在本脚本中起作用,对其它程序和命令不起作用,这就意味着这个脚本中的环境变量是局部变量,不是全局变量,不会影响其它脚本和操作系统环境。然后我们会看到长达34行的注释,这是优秀程序员必须学会的基本功之一。这些注释写得非常简洁明了,详细说明了各个环境变量的意义和用途。紧接着,如果发现CATALINA_HOME变量没有定义,该脚本试图设置该变量,这和startup.bat的第一节完全类似,在此不再赘述。然后该脚本调用setclasspath.bat到JAVA_HOME的bin目录下寻找java.exe、javaw.exe、jdb.exe和javac.exe所在的路径,并把这些exe文件的文件名和路径赋值到相应的环境变量_RUNJAVA、_RUNJAVAW、_RUNJDB和_RUNJAVAC中。再接下来,catalina脚本判断是否定义有环境变量CATALINA_BASE,CATALINA_TMPDIR,如果定义了它们,就执行相应的操作。因为我们在此并没有定义它们,所以执行不到这些操作。然后,catalina脚本将在本窗口内打印出四个环境变量的值,这四个环境变量我们非常熟悉,一旦启动Tomcat,我们必定能看到CATALINA_BASE,CATALINA_HOME,CATALINA_TMPDIR和JAVA_HOME。然后catalina脚本根据其后跟的不同命令,拼凑出完整的JAVA命令行并执行。下面是该脚本的详细注释:Rem获得标准的环境变量,因为setenv.bat不存在,所以下面这两句不执行remGetstandardenvironmentvariablesifexist%CATALINA_HOME%\bin\setenv.batcall%CATALINA_HOME%\bin\setenv.batRem调用setclasspath.bat脚本,获得标准的环境变量remGetstandardJavaenvironmentvariablesifexist%CATALINA_HOM
本文标题:Tomcat源码研究
链接地址:https://www.777doc.com/doc-5835279 .html