由于公司需要,在解决开源漏洞的时候需要将Tomcat从9升级到10版本,只是改了pom文件中的版本后发现,程序无法正常运行,提示某些函数不存在。
pom文件修改
10.0.23
org.apache.tomcat.embed
tomcat-embed-core
${tomcat.version}
org.apache.tomcat
tomcat-annotations-api
org.apache.tomcat
tomcat-annotations-api
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-el
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-websocket
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-core
出现的错误
java: 无法访问javax.servlet.ServletException,找不到javax.servlet.ServletException的类文件
具体原因是代码中用了
MissingServletRequestParameterException类,但是找不到了,通过查找源头,发现spring-web的5.3.13版本NestedServletException文件中无法找到
javax.servlet.ServletException。难道是升级带来的问题?!
查看Tomcat官网介绍10版本的更新内容:
servlet的包名有变化
Tomcat 10 已将servlet的包名从javax.servlet更改为jakarta.servlet,所以代码中凡是引入了servlet包的地方都需要修改。如果不修改,有很大的概率会遇到一些莫名其妙的报错。
Java代码中可以通过批量的查找替换进行修改。将javax.servlet替换为jakarta.servlet。
但是Spring Framework的源码我们也改不了啊,难道5.3.13版本没有支持jakarta.servlet?
查看Spring Framework官网内容:
如果项目中使用Spring Framework,实际引用Tomcat的是Spring Framework。所以要去官网或者源码好好看看,Spring Framework那个版本才是真正使用Tomcat10的。
原来从6.0版本开始才支持。
另外,如果升级Spring Framework,还需要升级其他依赖。
所以,升级一定要仔细,先看好新版本内容,升级之后要详细测试。
建议,先不要将Tomcat升级到10版本。