java.lang.NoSuchMethodError: javax.servlet.ServletContext.setSessionTimeout(I)V

java.lang.NoSuchMethodError: javax.servlet.ServletContext.setSessionTimeout(I)V

我在 tomcat 服务器启动时遇到这个异常。

这里我在我的项目中使用了 javax.servlet-api-4.0.1.jar,我也在运行时包含了它。 但是当我将我的应用程序部署到 tomcat 8.5 时,tomcat 从它的 /lib 文件夹中选择旧的 jar servlet-api。 我知道这个方法 setSessionTimeout 包含在 servlet 4.0 中,但是我如何指示 tomcat 从我项目的 WEB-INF/lib 文件夹而不是 tomcat/lib.

中选择 jar

我尝试将 servlet-api-4.0 jar 放入 tomcat/lib 并删除旧的 jar,然后项目正常启动。但这是正确的方法吗?无法 tomcat 从我的项目的 lib 目录中选择最新的 jar。

请帮忙。

不要自带servletAPIjar.

您声称您使用的是 Tomcat 8.5,它实现了 servlet 规范 3.1。带来一个更新的 jar 不会神奇地让它实现这个更新的规范。

If you want 4.0, use Tomcat 9。并且不要自带 servlet API。 Tomcat 附带的版本非常好。根据您构建的方式,您在构建时需要它的某个版本,但您 不打包它 以供运行时使用(例如,Maven 称它为“已提供”,在 gradle 我看到“编译”或“只编译”)