项目环境:

jdk1.8.X

内嵌tomcat版本(升级之前):8.5.16

内嵌tomcat版本(升级之后):8.5.51

 

tomcat 升级之后,项目启动都没问题。这个时候访问jsp出现了问题,看图:

报错有点多,姑且截取这么些。

看错误,说是classpath中找不到com.sun.tools.javac.Main 这个类。

这个在哪里呢,想必有的小伙伴,还不知道,其实他就在我们jdk中的lib目录中的tools.jar中。但为什么没有找到呢,环境变量看了一遍又一遍,咱配置的也一点没问题。

网上说把jdk/lib中的tools.jar复制到jdk/jre/lib中,我一看,似又恍然大悟之感,兴高采烈的去做了,然后激动的启动自己的项目。最后一验证。

额.......。

然并卵。

why?

我忍不住去看看源码,到底是哪里有毛病。看图:

 错误栈信息中,最后出现的地方,我这个类,也是事故发生的现场。咱们去瞅瞅这个类的,那个方法。看图:

有点长,我分了三个图,不太美丽大方,咱们凑活着看。

第三张图中的最后一个else中。看那字字英文字符,竟然和报错的信息完全吻合,好神奇,毫无疑问,根据多年的判断,异常就是发生在这里。说咱们的环境变量中没有tools。

走到这最后的else中,说明前面的判断都为false。且不论其他的代码,咱们看第三张图中的,这个 else if (doesModernCompilerExist()) ,方法看图:

 要想这个if为ture,只要不发生异常,顺顺当当的往下走,不用说,就是true。很显然,事与愿违,这里发生了异常。也即是说着找不到 com.sun.tools.javac.Main 这个类。这就回到了刚开始的问题。

环境变量都没问题,怎么会找不到呢,我不信这个邪,于是自己把这段代码,单独写了一个类,看图:

 然后我去cmd,使用java命令运行这个程序,之后你猜怎么找。看图:

这个类是存在,What,当时我就蒙圈了,这怎么回事??然后我各种百度,最后也没找出个所以仍然。

最后灵光一闪,环境变量没问题,出现这个问题,那就是项目自身的问题了,不升级tomcat没这个问题,一升级才出现,这说明极有可能和tomcat有关系。可,本人知识有限,也只能推断出和tomcat有关,但怎么个有关法,无从下手。

后来经过一顿折腾,找到了一个可以解决的方案。

springBoot项目访问jsp,少不了这个jar

 它的版本跟着内嵌的tomcat版本走的,既然之前老版本的可以解析jsp,我试着把这个版本降会原本的版本。

之后打包测试,然后访问jsp。我擦!居然可以访问了!!

到这里,我以为这个版本的是找到了tools.Main。激动的打个断点,看看。结果发现,居然没访问上面出错的那个方法,连那个类都没进来。这!?

这可能是原版本和新版本解析jsp的方式不同。

就目前来看,这个可以解决无法访问jsp的问题,然后tomcat也得到了升级。

但说实话,我不太明白,知识有限,后序需要补充。

 

 

 

~~~~~~~~~~可以忽略~~~~~~~~~~~~~

发现一个不错的chatGPT网站,方便易用。

点击直达

posted on 2021-11-22 15:00  之之小侠  阅读(171)  评论(0编辑  收藏  举报