图说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函数就在这里面!!

总结

有些程序/代码看起来毫无头绪,但只要我们跟着入口,一步一步走下去,一定可以看到其庐山真面目的!!

                                      啦

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值