最開始覺得是JDK有問題,最後還真是JDK的問題
因爲裝的是ubuntu,還是裝的桌面操作系統,還不是服務器系統,一開始就發現系統默認安裝的是openjdk11的jre,於是卸載,使用和Win下相同的JDk8運行tomcat,但是偏偏就卸載不了,坑啊,因爲可能有其他的軟件依賴這個JDK,遂不能卸載
之後就浪費時間又查別的問題,如ClassNotFoundException,但是並不是如下這個問題:
OpenJDK中java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException解決辦法
JEECMS在飛騰服務器+OpenJDK環境中啓動時報如下錯誤:
java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException
百度一下,解決辦法有兩種:
1、將標準JDK中的rt.jar加到項目的lib目錄中。
轉自:https://www.cnblogs.com/gradven/p/6323217.html
搜索了一下rt.jar,發現該jar大小在40多MB,這也太大了,不建議此方式。
2、替換jar,將替換jeecms自帶的jcaptcha-1.0.jar 替換成jcaptcha-all-1.0-RC6.jar。
轉自:https://blog.csdn.net/oQiDai123456/article/details/40109029?locationNum=3&fps=1
下載地址:http://www.java2s.com/Code/Jar/j/Downloadjcaptchaall10rc6jar.htm
修改配置文件:
路徑:WEB-INF/config/captcha-context.xml
<bean id="captchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService">
<constructor-arg index="0" ref="imageEngine"/>
<constructor-arg type="int" index="1" value="180"/>
<constructor-arg type="int" index="2" value="100000"/>
<!-- <constructor-arg type="int" index="3" value="75000"/> -->
</bean>
重新部署至服務器中,問題解決。
reflink: https://www.cnblogs.com/xusweeter/p/9667801.html
在發現並修改了注入的問題後,Win下可以,Linux下還是不行,所以又觀察到上邊那個答案更改jar包的問題,所以就懷疑是JDK的版本導致的問題,遂改變執行的JDK!
一,前言
我們都知道,tomcat啓動前需要配置JDK環境變量,如果沒有配置JDK的環境變量,那麼tomcat啓動的時候就會報錯,也就是無法啓動。
但是在我們的工作或者學習過程中,有的時候會出現tomcat需要使用不同的JDK版本。
這個時候要怎麼辦呢?似乎唯一的辦法就是在使用不同版本的JDK的時候,去更改環境變量中的JAVA_HOME變量。
這樣做也確實可行,但是頻繁的更改JAVA_HOME變量,不僅操作起來略顯繁瑣,每一次都要改來改去的,而且假如使用結束後忘記將JAVA_HOME改回來,那麼將會造成一系列的不可預料的問題,例如eclipse啓動不了了。
那麼有沒有一種方法可以在不更改環境變量的情況下,讓tomcat使用我們指定的JDK呢?
答案是:有。
只要在tomcat中添加相關配置即可,在公佈答案之前我們先思考一下,爲什麼tomcat啓動需要JDK或者是JRE?
因爲tomcat啓動的時候需要運行在java虛擬機(JVM)中,或者說要啓動一個虛擬機進程,再簡單一些就是我們的代碼需要JVM來執行,自然需要啓動一個JVM。
其實eclipse啓動的時候也同樣啓動了一個JVM進程,在windows的任務管理器中我們可以看到:
因爲我現在的電腦上正在運行一個eclipse所以這裏有一個Java虛擬機進程。
那麼如何讓tomcat使用指定的JDK呢?首先來看一下不讓tomcat使用指定JDK,即使用電腦的環境變量中配置的JDK的時候是什麼樣的。
二,tomcat使用默認環境變量中的JDK配置
看一下環境變量中我們配置的JDK版本:打開命令行窗口->輸入 java -version->回車
可以看到,我的電腦上環境變量中配置的是JDK10。
啓動tomcat(我使用的tomcat版本是:apache-tomcat-7.0.85):進入bin目錄雙擊startup.bat。
打開瀏覽器,訪問localhost:8080,可以看到tomcat的默認歡迎頁
那麼到底tomcat啓動是時候是不是使用了環境變量中配置的JDK10呢?看一下啓動日誌信息
很明確了,上圖中紅色框框中的部分說明,啓動的tomcat確實是使用我環境變量中配置的JDK10,還將JDK所在的文件目錄打印了出來。
同時在任務管理器中,也可以看到多出了一個java虛擬機進程
三,讓tomcat使用指定JDK
其實特別簡單,只需要在bin目錄中的setclasspath.bat文件前面添加:
set JAVA_HOME=G:\tools\JDK8_64
set JRE_HOME=G:\tools\JDK8_64\jre
如下圖
這裏,我指定tomcat使用JDK1.8來啓動。雙擊startup.bat,訪問localhost:8080,出現了tomcat的默認歡迎頁,說明tomcat啓動成功。
那麼到底有沒有使用JDK1.8呢?看啓動日誌
沒有錯了,就是使用我在setclasspath.bat中配置的JDK1.8。
說完怎麼讓tomcat使用我們指定的JDK,我們再來看看,如果如何修改tomcat使用的JDK的內存大小,請查閱:修改tomcat 使用的JVM的內存
注意:上邊是有問題的,要用下邊的:set改export
export JAVA_HOME=/home/jdk/Java/jdk7/jdk1.7.0_51
export JRE_HOME=/home/jdk/Java/jdk7/jre7
reflink: https://www.cnblogs.com/zhangchengzi/p/9759682.html