spring项目发布到linux上遇到的错

  在将一个spring项目部署到linux上的tomcat中时遇到了以下错误。(以下所有错误的前提都是项目在idea中正常运行)

1. tomcat10

  一直报错。第一个错误是无法将  org.springframework.web.filter.CharacterEncodingFilter 转换为  jakarta.servlet.Filter 这个是tomcat中的filter。而CharacterEncodingFilter 实现的是javax.servlet.Filter。这个问题我一直找不到,后来发现从tomcat8以后,tomcat的request默认采用UTF-8格式进行编码,也就是不必要在web.xml中添加CharacterEncodingFilter 。

  然后我将CharacterEncodingFilter 去除了,不报这个错了。但是又报了dispatchservlet无法转换为jakarta.servlet.Servlet(还是tomcat的servlet)。

  

 没办法,我试过将 javax.servlet-api 的scop改为provided,依然不行。我觉得可能是tomat10这个服务器有什么问题未解决,或者想换的错误案例较少,所以我更换成了tomcat8。果然这个错误不再发生了。

2. tomca8

  tomcat8启动找不到mybaits.yml文件,这个文件是在我的dao 模块中的resources文件家下,也就是mybatis.yml在dao的jar类路径下,然后我在dao 模块中使用@configuration完成bena的注册。这个bena的注册在idea中是可以正常获取实例的(可以找到mybatis.yml资源),但是在tomcat8中(和tomcat8无关)提示找不到,因为我之前是用的classloader.getresources方法获取资源,因为改方法不支持classpath*模糊查找,所以我更换为PathMatchingResourcePatternResolver,这个类在spring中支持查找classpath*,即在全项目路径中查找资源,这个类帮助我在idea中找到了jar包中的资源,但是在tomcat中这个类也无法正确的找到mybatis.yml这个资源,所以我将所有的属性配置文件全部放在了war包模块的resources文件夹下,这个问题先暂时以这种方式解决,后续有解决方案的时候再来解决。

  这个问题解决了,此时又报了另一个错误,如下图:

   看了这个文章:https://www.cnblogs.com/qianzf/p/7753737.html,我觉得应该是同样的问题,即tomcat对于不同保本的jar选取版本低的加载。我觉得这个DEFAULT属性应该是在低版本中无法找到对于的类。

所以我将core依赖给注释掉了。至此,问题全部解决,部分问题后修解决。

posted @ 2020-03-17 12:31  永不熄灭的火  阅读(356)  评论(1编辑  收藏  举报