有位同事求助,說他的tomcat更改端口不起作用,不管改成什么端口,總是只能以8080端口進行訪問。
1,首先懷疑新的tomcat沒有啟動成功,比如舊的tomcat還在運行。重啟機器之后仍然如些,只能排除這個。
2,懷疑是安裝的tomcat的服務,在windows的服務管理處,將服務進行刪除,仍無解。
3,懷疑tomcat的配置被改動了,下載了一個新的tomcat,更改端口,仍無解。
4,最后分析tomcat的catalina.bat腳本,發現如下代碼
rem Guess CATALINA_HOME if not defined set "CURRENT_DIR=%cd%" if not "%CATALINA_HOME%" == "" goto gotHome set "CATALINA_HOME=%CURRENT_DIR%" if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome cd .. set "CATALINA_HOME=%cd%" cd "%CURRENT_DIR%" :gotHome if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome echo The CATALINA_HOME environment variable is not defined correctly echo This environment variable is needed to run this program goto end :okHome
恍然大悟,到系統環境變量里查看,果然設置了catalina_home變量。所以,每次啟動tomcat,不管是啟動哪個tomcat,實際上運行的都是catalina_home下的tomcat,更改端口不起作用也就不奇怪了。
這是一個很少見的問題,因為一般人都不會配置catalina_home變量。我用了這么多年的tomcat,也從來沒有設置過這個變量,但從來沒有影響過使用。估計會使用這個變量的軟件不是很多,所以這個變量也就不如java_home那么為人所知了。
程序員經常會遇到很多莫名奇妙的問題,但,作為一名程序員,我們要堅決相信,任何bug都是有原因的,只要認真仔細進行分析,總是可以找到原因的。