java.lang.NoSuchMethodError: javax.servlet.http.Cookie.setHttpOnly(Z)V

java.lang.NoSuchMethodError: javax.servlet.http.Cookie.setHttpOnly(Z)V

我正在使用 weblogic 10.3.6.0 应用程序服务器来部署应用程序。后 部署其中一个使用 JDK8 的应用程序。在 运行 的时候我得到了以下错误。

java.lang.NoSuchMethodError: javax.servlet.http.Cookie.setHttpOnly(Z)V

dependencies.gradle文件内容如下

providedCompile 'javax.servlet:javax.servlet-api:3.0.1'

此错误背后的原因是什么?

Cookie.setHttpOnly() 从 Servlet 3.0 开始可用。您正在部署到仅提供 Servlet 2.5 的 WebLogic 10。

请注意,您的项目是针对 API 依赖项而不是实际的运行时实现进行编译的。这是正确的项目设置,不要更改它。但是,您必须确保通过部署到正确的服务器在运行时提供您选择编译的 API。

正如其他人所说,您针对您的 weblogic 版本针对错误的 servlet jar 进行编译。如果您想继续使用 weblogic 10,那么您应该更改为

providedCompile 'javax.servlet:javax.servlet-api:2.5'

一旦你这样做了,我猜你会得到 Cookie.setHttpOnly().

的编译错误

出于兴趣,你为什么要使用 weblogic?有许多免费/开源的 servlet 容器比 weblogic 好得多。 Weblogic 不符合与其余 servlet 容器相同的标准。