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 

发布了207 篇原创文章 · 获赞 13 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/lc11535/article/details/103461414