「编程」Tomcat9升级Tomcat10遇到的坑

「编程」Tomcat9升级Tomcat10遇到的坑

经验文章nimo972025-01-11 14:43:1927A+A-

由于公司需要,在解决开源漏洞的时候需要将Tomcat从9升级到10版本,只是改了pom文件中的版本后发现,程序无法正常运行,提示某些函数不存在。

pom文件修改

<!--tomcat版本修改-->
<properties>
    <tomcat.version>10.0.23</tomcat.version>
</properties>
<!--修改依赖版本-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>${tomcat.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-annotations-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-annotations-api</artifactId>
    <version>${tomcat.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-el</artifactId>
    <version>${tomcat.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-websocket</artifactId>
    <version>${tomcat.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

出现的错误

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版本。

点击这里复制本文地址 以上内容由nimo97整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

尼墨宝库 © All Rights Reserved.  蜀ICP备2024111239号-7