关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 2023-02-26    286  

今天在学习用springboot打war包,将打好的war包部署到tomcat中,然后启动访问页面的时候,tomcat窗口报了以下的错误:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 

温馨提示:关于如何在spring boot打war包,可以参考这个视频:https://www.bilibili.com/video/BV1PZ4y1j7QK?p=68

看到这个错误感到很奇怪,不知道原因是什么。首先呢,在打war包之前,我在idea***问过我的地址,确实是能够正常访问的,说明我的代码应该是没有语法错误的。当然了,如果代码有错误也就不会报上面的错误了。我复制这个错误去网上找了一圈,很多人都说应该是缺少编译jsp对应的jar包,但是想不明白的是,解析jsp页面的依赖我在pom文件中都导入了的,而且在打war包之前也测试过页面时可以正常访问的,为什么打war包之后运行就报JSP的错误了呢?

我推测:如果程序没问题的话,那大概率是服务器版本的问题。我部署war包的tomcat的版本是:9.0.30的,我去看下我在pom文件中导入的解析jsp页面的版本是否对得上,如下图所示:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 

进入后发现,这个父工程还有父工程依赖,继续按住ctrl键进入,如下图所示:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 

进入后发现,这个pom文件就是最终管理的我们依赖引入的版本的一个文件,如下图所示,很多依赖的版本:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 

按住ctrl+f键,可以搜索一下导入的解析jsp页面的依赖的版本,如下图所示:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 

可以看到这里引用的是跟tomcat版本一致的依赖,那么这个依赖是多少呢?可以再在搜索框中输入进行查询,如下图所示:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 

可以看到定义的tomcat的版本是:9.0.41。而我在上文说过,我部署war包的tomcat的版本是9.0.30,这就难怪了,应该是我的服务器版本过低导致的编译不了jsp页面导致的报错。在这里呢,解决的方法有两种,第一:下载跟jsp依赖对应的tomcat的版本进行部署;第二种:我们手动将上面的 tomcat.version的版本号改成我们对应的部署服务器的版本号。在这里,我两种方法都演示一遍,不为什么,只是我很有时间,我闲的胃疼。

首先去apache官网下载对应版本的tomcat如下图所示,因为我使用的spring boot的版本是当前最新的,对应的tomcat最新的版本也是9.0.41,如下图所示:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 

 下载完毕后,直接解压在当前的文件夹中,然后在idea中重新打war包,将war包部署到webapp目录下,然后进入tomcat的bin目录,开始启动tomcat,奇怪的是,我一点击启动文件:shutdown.bat 窗口一闪而过,这是怎么回事呢?我去网上搜了一下,参考了别人博文的做法:https://blog.csdn.net/qq904069486/article/details/80909780 决定在shutdown.bat文件的末尾加入pause命令,看下具体的原因,如下图所示:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 再次启动,命令行的信息如下图所示:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 

这回算是明白了,原来是我的环境变量没有配置为当前的tomcat的文件位置,而我又把之前旧的tomcat的文件删除了,另外需要注意的是,如果你配置了tomcat的环境变量,就算你不删除原来的,在你启动其他版本的tomcat的时候记得也要修改环境变量为对应的部署的tomcat的环境变量,否则启动的服务器还是原来的tomcat而不是你当前部署的这个tomcat。举个简单的例子,我原来配置的环境变量为:9.0.30,而我下载了一个9.0.41的,我在9.0.41的bin目录中双击启动文件,没有重新修改环境变量为9.0.41的目录的话,那么启动的还是9.0.30这个服务器的。因为你在环境变量中配置的就是9.0.30这个服务器嘛。

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 所以接上面所说的,我启动tomca一闪而过的原因就是我环境变量没有配对,我需要改成下图的环境变量:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

 然后保存配置,重新启动tomcat,这次窗口就不会一闪而过了,能够正常启动,再次访问jsp的url地址,是可以成功访问到的。第一种方法圆满结束!

————————————————————————————————————————————————————————————————————————————

第一种访问有点麻烦啊,还有重新下载tomcat,如果我配置了tomcat环境变量的话我还要重新修改环境变量,当然了,其实不用配置tomcat环境变量的,这是我初学tomcat的时候配置的环境变量。如果你配置了tomcat环境变量,那么无论你在哪里点击的启动文件,就算你在9.0.41中点击的启动文件,只要环境变量中配置的是9.0.30的,那么启动的服务器还是9.0.30的。

第二种方法就比较简单了,直接在pom文件中更改对应的部署的tomcat的版本即可,如下图所示:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

注意:修改后,及时按ctrl+s键进行保存更改,然后对pom文件重新report一下,确保更改生效了再导包。按照这种方法,重新打完war包,部署到9.0.30的服务器时,也是可以访问到jsp页面的。如此,问题就得到解决了!

其实还有更加简洁的方法,就是直接在当前的pom文件里面修改即可,这样会覆盖父文件的版本号设置,一样能达到目的,如下图所示:

关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法

以上所述是小编给大家介绍的关于springboot打war包部署到tomcat报:org.apache.jasper.JasperException 的错误的原因以及解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:http://www.77isp.com/post/34632.html

=========================================

http://www.77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。