一個怪問題Springboot啟動成功JSP無法返回HTML

HTML JSP Tomcat CentOS 邢老師IT會 2017-03-28

在使用Spring boot開發一個項目的過程當中,遇到一個很怪異的問題,在Ecplise開發環境下測試正常,打成war包,發佈在centos7.2的生產環境下時,Spring boot 啟動成功,訪問http://112.74.1xx.1xx:8899時,Action是可以訪問到的,也執行到了return "index",但是index.jsp卻始終無法返回正確的HTML頁面,該war在windows環境下執行正常,在另外一臺centos服務器下也執行正常,這時就懷疑這臺cnetos服務器環境有問題。

這臺Centos服務器其實也是剛安裝的Centos7.2,只安裝了tomcat7.0.59、jdk1.8.0_121和MySQL5.7,應該不是安裝軟件本身造成的環境問題,本人對於Centos其實也是一知半解,會一些簡單命令,但是根本不深入。

無意當中啟動了Tomcat7本身,測試在tomcat7下,而不是Spring boot嵌入的tomcat下jsp頁面是否能夠正確返回HTML頁面,第一次測試是成功的,tomcat7的webapp下,建了一個demo的目錄,隨意寫了一個index.jsp頁面,是可以正確返回HTML的,然後就把那個Spring boot打成的war包放在了該tomcat的webapp目錄下,tomcat啟動失敗,也沒仔細看log日誌,刪除該war包及其自動生成的目錄,再次啟動tomcat還是失敗,即使重裝tomcat也是如此,啟動tomcat後,一直卡在“INFO: Deploying web application ,這時明白肯定是Centos7環境出問題了,卻不知道問題出在哪裡。這時連重新安裝Centos7的心都有。

這時,再次百度很多文章,後來找到一篇文章:

文中也遇到了我同樣的問題:

後來看了一篇博文解決了問題.在$JAVA_HOME/jre/lib/security/java.security內,將securerandom.source的內容改為file:/dev/./urandom

原來linux或者部分unix系統提供隨機數設備是/dev/random 和/dev/urandom ,兩個有區別,urandom安全性沒有random高,但random需要時間間隔生成隨機數。

可能在生成隨機數的時候卡住了,導致tomcat啟動不了/

在服務器啟動時也可以加上參數 -Djava.security.egd=file:/dev/./urandom

按照文中提示,解決了tomcat7啟動問題,8080端口可以訪問了,這時再測試那個 Spring boot生成的war文件,也可以訪問了,可以返回正確的HTML頁面了。