tomcat启动分析(2)
生活随笔
收集整理的這篇文章主要介紹了
tomcat启动分析(2)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
1 - 概述
腳本catalina.sh用于啟動和關(guān)閉tomcat服務(wù)器,是最關(guān)鍵的腳本
另外的腳本startup.sh和shutdown.sh都是使用不同的參數(shù)調(diào)用了該腳本
該腳本的使用方法如下(引自該腳本本身):
2 - 腳本分析
#!/bin/sh#?============================================================= #?該腳本設(shè)置正確的環(huán)境變量和系統(tǒng)信息,然后啟動或者停止tomcat?server #?具體的操作是: #?使用命令行參數(shù)作為args的實參,調(diào)用org.apache.catalina.startup.Bootstrap.main(String[]) #?==============================================================#?----------------------------------------------------------------------------- #?Start/Stop?Script?for?the?CATALINA?Server # #?Environment?Variable?Prequisites # #???CATALINA_HOME???May?point?at?your?Catalina?"build"?directory. # #???CATALINA_BASE???(Optional)?Base?directory?for?resolving?dynamic?portions #???????????????????of?a?Catalina?installation.??If?not?present,?resolves?to #???????????????????the?same?directory?that?CATALINA_HOME?points?to. # #???CATALINA_OPTS???(Optional)?Java?runtime?options?used?when?the?"start", #???????????????????"stop",?or?"run"?command?is?executed. # #???CATALINA_TMPDIR?(Optional)?Directory?path?location?of?temporary?directory #???????????????????the?JVM?should?use?(java.io.tmpdir).??Defaults?to #???????????????????$CATALINA_BASE/temp. # #???JAVA_HOME???????Must?point?at?your?Java?Development?Kit?installation. # #???JAVA_OPTS???????(Optional)?Java?runtime?options?used?when?the?"start", #???????????????????"stop",?or?"run"?command?is?executed. # #???JPDA_TRANSPORT??(Optional)?JPDA?transport?used?when?the?"jpda?start" #???????????????????command?is?executed.?The?default?is?"dt_socket". # #???JPDA_ADDRESS????(Optional)?Java?runtime?options?used?when?the?"jpda?start" #???????????????????command?is?executed.?The?default?is?8000. # #???JSSE_HOME???????(Optional)?May?point?at?your?Java?Secure?Sockets?Extension #???????????????????(JSSE)?installation,?whose?JAR?files?will?be?added?to?the #???????????????????system?class?path?used?to?start?Tomcat. # #???CATALINA_PID????(Optional)?Path?of?the?file?which?should?contains?the?pid #???????????????????of?catalina?startup?java?process,?when?start?(fork)?is?used #?-----------------------------------------------------------------------------#?OS?specific?support.??$var?_must_?be?set?to?either?true?or?false.cygwin=false case?"`uname`"?in CYGWIN*)?cygwin=true;; esac#?PRG是被執(zhí)行的腳本的名稱,可以認(rèn)為PRG=="catalina.sh",也可能是某個符號鏈,指向該腳本。PRG="$0"#?處理了一下PRG,等循環(huán)跳出之后PRG成為?????while?[?-h?"$PRG"?];?dols=`ls?-ld?"$PRG"`link=`expr?"$ls"?:?'.*->?/(.*/)$'`if?expr?"$link"?:?'.*/.*'?>?/dev/null;?thenPRG="$link"elsePRG=`dirname?"$PRG"`/"$link"fi done#?PRGDIR是PRG的目錄路徑名稱PRGDIR=`dirname?"$PRG"`#?執(zhí)行$CATALINA_HOME/BIN/setenv.sh來設(shè)置環(huán)境變量 #?[?-r?filename?]?是判斷是否文件存在且可讀CATALINA_HOME=`cd?"$PRGDIR/.."?;?pwd` if?[?-r?"$CATALINA_HOME"/bin/setenv.sh?];?then.?"$CATALINA_HOME"/bin/setenv.sh fi#?For?Cygwin,?確保所有的路徑名都符合UNIX格式if?$cygwin;?then[?-n?"$JAVA_HOME"?]?&&?JAVA_HOME=`cygpath?--unix?"$JAVA_HOME"`[?-n?"$CATALINA_HOME"?]?&&?CATALINA_HOME=`cygpath?--unix?"$CATALINA_HOME"`[?-n?"$CATALINA_BASE"?]?&&?CATALINA_BASE=`cygpath?--unix?"$CATALINA_BASE"`[?-n?"$CLASSPATH"?]?&&?CLASSPATH=`cygpath?--path?--unix?"$CLASSPATH"`[?-n?"$JSSE_HOME"?]?&&?JSSE_HOME=`cygpath?--path?--unix?"$JSSE_HOME"` fi#?設(shè)置用來初始化SystemClassLoader的CLASSPATH變量:通過執(zhí)行腳本setclasspath.sh完成 #?注意:腳本setclasspath.sh改變了原來的$CLASSPATH變量,而把它設(shè)為: #?CLASSPATH=$CATALINA_HOME/bin/bootstrap.jar:$JAVA_HOME/lib/tools.jar #?其中bootstrap.jar是package?org.apache.catalina.startup的打包文件, #?含有啟動方法org.apache.catalina.startup.Bootstrap.main(String[]?args) #?tools.jar含有javac編譯器,用來把jsp文件編譯成為servlet?classif?[?-r?"$CATALINA_HOME"/bin/setclasspath.sh?];?thenBASEDIR="$CATALINA_HOME".?"$CATALINA_HOME"/bin/setclasspath.sh elseecho?"Cannot?find?$CATALINA_HOME/bin/setclasspath.sh"echo?"This?file?is?needed?to?run?this?program"exit?1 fi#?在CLASSPATH環(huán)境變量后面補(bǔ)上一些JAR文件 #?[?-n?string?]?判斷字符串是否長度非0;[?-z?string?]?判斷字符串是否長度為0 #?它們可以用來判斷是否某個環(huán)境變量已經(jīng)被設(shè)置if?[?-n?"$JSSE_HOME"?];?thenCLASSPATH="$CLASSPATH":"$JSSE_HOME"/lib/jcert.jar:"$JSSE_HOME"/lib/jnet.jar:"$JSSE_HOME"/lib/jsse.jar fi CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/bin/bootstrap.jar#?指定CATALINA_BASE變量 #?如果CATALINA_BASE沒有值,就讓CATALINA_BASE=$CATALINA_HOMEif?[?-z?"$CATALINA_BASE"?]?;?thenCATALINA_BASE="$CATALINA_HOME" fi#?指定CATALINA_TMPDIR變量 #?如果CATALINA_TMPDIR沒有值,就讓CATALINA_TMPDIR=$CATALINA_BASE/tempif?[?-z?"$CATALINA_TMPDIR"?]?;?then#?Define?the?java.io.tmpdir?to?use?for?CatalinaCATALINA_TMPDIR="$CATALINA_BASE"/temp fi#?For?Cygwin,?在執(zhí)行java程序前把路徑名轉(zhuǎn)換成WINDOWS格式if?$cygwin;?thenJAVA_HOME=`cygpath?--path?--windows?"$JAVA_HOME"`CATALINA_HOME=`cygpath?--path?--windows?"$CATALINA_HOME"`CATALINA_BASE=`cygpath?--path?--windows?"$CATALINA_BASE"`CATALINA_TMPDIR=`cygpath?--path?--windows?"$CATALINA_TMPDIR"`CLASSPATH=`cygpath?--path?--windows?"$CLASSPATH"`JSSE_HOME=`cygpath?--path?--windows?"$JSSE_HOME"` fi#?顯示信息,然后執(zhí)行命令 echo?"Using?CATALINA_BASE:???$CATALINA_BASE" echo?"Using?CATALINA_HOME:???$CATALINA_HOME" echo?"Using?CATALINA_TMPDIR:?$CATALINA_TMPDIR" echo?"Using?JAVA_HOME:???????$JAVA_HOME"#?......當(dāng)執(zhí)行catalina.sh的參數(shù)是jpda的時候......if?[?"$1"?=?"jpda"?]?;?thenif?[?-z?"$JPDA_TRANSPORT"?];?thenJPDA_TRANSPORT="dt_socket"fiif?[?-z?"$JPDA_ADDRESS"?];?thenJPDA_ADDRESS="8000"fiif?[?-z?"$JPDA_OPTS"?];?thenJPDA_OPTS="-Xdebug?-Xrunjdwp:transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=n"fiCATALINA_OPTS="$CATALINA_OPTS?$JPDA_OPTS"shift fi#?......當(dāng)執(zhí)行catalina.sh的參數(shù)是debug的時候......if?[?"$1"?=?"debug"?]?;?thenshiftif?[?"$1"?=?"-security"?]?;?thenecho?"Using?Security?Manager"shiftexec?"$_RUNJDB"?$JAVA_OPTS?$CATALINA_OPTS?/-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"?-classpath?"$CLASSPATH"?/-sourcepath?"$CATALINA_HOME"/../../jakarta-tomcat-4.0/catalina/src/share?/-Djava.security.manager?/-Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy?/-Dcatalina.base="$CATALINA_BASE"?/-Dcatalina.home="$CATALINA_HOME"?/-Djava.io.tmpdir="$CATALINA_TMPDIR"?/org.apache.catalina.startup.Bootstrap?"$@"?startelseexec?"$_RUNJDB"?$JAVA_OPTS?$CATALINA_OPTS?/-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"?-classpath?"$CLASSPATH"?/-sourcepath?"$CATALINA_HOME"/../../jakarta-tomcat-4.0/catalina/src/share?/-Dcatalina.base="$CATALINA_BASE"?/-Dcatalina.home="$CATALINA_HOME"?/-Djava.io.tmpdir="$CATALINA_TMPDIR"?/org.apache.catalina.startup.Bootstrap?"$@"?startfi#?......當(dāng)執(zhí)行catalina.sh的參數(shù)是embedded的時候......elif?[?"$1"?=?"embedded"?]?;?thenshiftecho?"Embedded?Classpath:?$CLASSPATH"exec?"$_RUNJAVA"?$JAVA_OPTS?$CATALINA_OPTS?/-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"?-classpath?"$CLASSPATH"?/-Dcatalina.base="$CATALINA_BASE"?/-Dcatalina.home="$CATALINA_HOME"?/-Djava.io.tmpdir="$CATALINA_TMPDIR"?/org.apache.catalina.startup.Embedded?"$@"#?+----------------------------------------------------+ #?|??......當(dāng)執(zhí)行catalina.sh的參數(shù)是run的時候......????| #?|??在當(dāng)前窗口中啟動tomcat服務(wù)器!!!????????????????| #?+----------------------------------------------------+elif?[?"$1"?=?"run"?];?then#?把參數(shù)run去掉shift??#?如果參數(shù)是run?-security,則啟動Security?Managerif?[?"$1"?=?"-security"?]?;?thenecho?"Using?Security?Manager"shiftexec?"$_RUNJAVA"?$JAVA_OPTS?$CATALINA_OPTS?/-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"?-classpath?"$CLASSPATH"?/-Djava.security.manager?/-Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy?/-Dcatalina.base="$CATALINA_BASE"?/-Dcatalina.home="$CATALINA_HOME"?/-Djava.io.tmpdir="$CATALINA_TMPDIR"?/org.apache.catalina.startup.Bootstrap?"$@"?start??????#?如果參數(shù)是孤單的run,則在本窗口中啟動tomcat服務(wù)器#?在本窗口中啟動的方法是使用exec,讓當(dāng)前進(jìn)程fork一個新進(jìn)程來啟動tomcat,當(dāng)前進(jìn)程是tomcat的父進(jìn)程#?啟動tomcat的類是org.apache.catalina.startup.Bootstrap.main("start");elseexec?"$_RUNJAVA"?$JAVA_OPTS?$CATALINA_OPTS?/-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"?-classpath?"$CLASSPATH"?/-Dcatalina.base="$CATALINA_BASE"?/-Dcatalina.home="$CATALINA_HOME"?/-Djava.io.tmpdir="$CATALINA_TMPDIR"?/org.apache.catalina.startup.Bootstrap?"$@"?startfi#?+----------------------------------------------------+ #?|??......當(dāng)執(zhí)行catalina.sh的參數(shù)是start的時候......??| #?|??在新窗口中啟動tomcat服務(wù)器!!!??????????????????| #?+----------------------------------------------------+elif?[?"$1"?=?"start"?]?;?then#?把參數(shù)start去掉shift??#?創(chuàng)建一個文件(如果文件不存在的話)$CATALINA_BASE/logs/catalina.out??touch?"$CATALINA_BASE"/logs/catalina.out#?如果參數(shù)是start?-security,則啟動Security?Managerif?[?"$1"?=?"-security"?]?;?thenecho?"Using?Security?Manager"shift"$_RUNJAVA"?$JAVA_OPTS?$CATALINA_OPTS?/-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"?-classpath?"$CLASSPATH"?/-Djava.security.manager?/-Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy?/-Dcatalina.base="$CATALINA_BASE"?/-Dcatalina.home="$CATALINA_HOME"?/-Djava.io.tmpdir="$CATALINA_TMPDIR"?/org.apache.catalina.startup.Bootstrap?"$@"?start?/>>?"$CATALINA_BASE"/logs/catalina.out?2>&1?&if?[?!?-z?"$CATALINA_PID"?];?thenecho?$!?>?$CATALINA_PIDfi??????#?如果參數(shù)是孤單的start,那么在新窗口中啟動tomcatelse"$_RUNJAVA"?$JAVA_OPTS?$CATALINA_OPTS?/-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"?-classpath?"$CLASSPATH"?/-Dcatalina.base="$CATALINA_BASE"?/-Dcatalina.home="$CATALINA_HOME"?/-Djava.io.tmpdir="$CATALINA_TMPDIR"?/org.apache.catalina.startup.Bootstrap?"$@"?start?/>>?"$CATALINA_BASE"/logs/catalina.out?2>&1?&if?[?!?-z?"$CATALINA_PID"?];?thenecho?$!?>?$CATALINA_PIDfi??????fi#?+----------------------------------------------------+ #?|??......當(dāng)執(zhí)行catalina.sh的參數(shù)是stop的時候......???| #?|??關(guān)閉tomcat服務(wù)器!!!????????????????????????????| #?+----------------------------------------------------+elif?[?"$1"?=?"stop"?]?;?then#?把參數(shù)stop去掉shift??#?關(guān)閉tomcat服務(wù)器的類是org.apache.catalina.startup.Bootstrap->main("stop");#?注意:java?-D?是設(shè)置系統(tǒng)屬性??exec?"$_RUNJAVA"?$JAVA_OPTS?$CATALINA_OPTS?/-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS"?-classpath?"$CLASSPATH"?/-Dcatalina.base="$CATALINA_BASE"?/-Dcatalina.home="$CATALINA_HOME"?/-Djava.io.tmpdir="$CATALINA_TMPDIR"?/org.apache.catalina.startup.Bootstrap?"$@"?stop#?+----------------------------------------------------+ #?|??......當(dāng)執(zhí)行catalina.sh的參數(shù)不可辨認(rèn)的時候......?| #?|??打印幫助信息,由此查看各種參數(shù)代表的意義!!!????| #?+----------------------------------------------------+elseecho?"Usage:?catalina.sh?(?commands?...?)"echo?"commands:"echo?"??debug?????????????Start?Catalina?in?a?debugger"echo?"??debug?-security???Debug?Catalina?with?a?security?manager"echo?"??embedded??????????Start?Catalina?in?embedded?mode"echo?"??jpda?start????????Start?Catalina?under?JPDA?debugger"echo?"??run???????????????Start?Catalina?in?the?current?window"echo?"??run?-security?????Start?in?the?current?window?with?security?manager"echo?"??start?????????????Start?Catalina?in?a?separate?window"echo?"??start?-security???Start?in?a?separate?window?with?security?manager"echo?"??stop??????????????Stop?Catalina"exit?1fi轉(zhuǎn)載于:https://my.oschina.net/u/1170536/blog/373367
總結(jié)
以上是生活随笔為你收集整理的tomcat启动分析(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SVG图片背景透明
- 下一篇: io.js 1.0.x发布