tomcat中如何寻找main函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
每一个做java web的同学,从入行第一天起就会听到tomcat的名字, 直到现在工作数年之后,依旧是天天离不开tomcat , 只不过是用的形式发生了变化,记得最开始用tomcat时,还要去server.xml里面改一个端口号,现在代码中基不上看不到tomcat的影子了,但不可否认,我们的web程序依旧是用tomcat运行起来的。
记得有一次面试时,面试官问:tomcat有main函数吗?当时我就想着,运行tomcat都是配置tomcat的目录,然后点个运行就不用管了,哪有平时写java程序那样,还有有个main函数,右键运行/调试之类的。如下图是在idea中配置tomcat.然后就答了一个没有main函数,然后,,就回家等通知了,,
启动tomcat
通过上面回家等通知我们可以推断出, tomcat是有main函数的,那main函数在哪里呢?我们从启动tomcat开始找(以下分析基于9.0.12)。启动时是找bin目录下的startup.bat/startup.sh,圈重点了!!下面这三个圈圈是重点
先点开startup.sh,感觉他好像并没有做什么事,只是执行了catalina.sh
那我们就顺着走进catalina.sh里面看看,这一看不得了,600多行脚本,从何看起,,当然,本文也不会从头一行一行的去讲这些,今天我们只是去寻找main函数,那我们在这里面就要去寻找java命令。
在这个脚本中,我们会看到大量的这样的脚本:
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`
CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`
CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
fi
if [ -z "$JSSE_OPTS" ] ; then
JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
fi
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"
从if then关键字不难猜出,这是根据系统情况,来给tomcat的运行拼接不同的参数。我们跳过这些代码继续往下走,如下图所示,与startup.sh 最后的start 命令相对应,然后开始我们熟悉的java程序启动命令:nohup java -jar xxxxx.jar > log.log &
.
在460行可以看到,启动的是org.apache.catalina.startup.Bootstrap
类。不出意外的话这里面应该就有我们要找的Main函数,我们在idea中找到这个类,没错!Main函数就在这里面!!
看完上述内容,你们掌握tomcat中如何寻找main函数的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。