最开始觉得是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