tomcat WEB APP在Win下運行沒有問題,到了Linux下出問題

最開始覺得是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

一,前言

我們都知道,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 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章