【问题标题】:java.lang.NoSuchMethodError: javax.servlet.http.Cookie.setHttpOnly(Z)Vjava.lang.NoSuchMethodError: javax.servlet.http.Cookie.setHttpOnly(Z)V
【发布时间】:2019-03-28 08:10:39
【问题描述】:

我正在使用 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'

这个错误背后的原因是什么?

【问题讨论】:

  • 可能是 servlets.jar 的版本问题
  • 如何知道我的 weblogic 使用的是哪个 servlet jar?
  • 如果你的 weblogic 是 v10.0,servlet 版本是 2.5。更多详情请参考en.wikipedia.org/wiki/Oracle_WebLogic_Server
  • 如果您特别需要 servlet 3.0.1,您可能需要 WLS 12cR1
  • 是的,帕万。以下@Karol Dowbecki 的回答清楚地解释了这个问题。

标签: java gradle weblogic-10.x


【解决方案1】:

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

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

【讨论】:

  • 正确的服务器意味着我必须升级到 weblogic 12+ 版本对吗?
  • @PawanPatil 是的,或者为使用 API 3.0 的其他一些 servlet 容器放弃 WebLogic
【解决方案2】:

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

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

一旦你这样做了,我猜你会收到Cookie.setHttpOnly() 的编译错误。

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

【讨论】:

  • 选择 Weblogic 而不是其他 servlet 容器是我公司的决定。
  • 创建 weblogic 的人说这是他最大的错误! bbc.co.uk/news/business-11944966
  • 他提到了 IBM 产品 Websphere 和 Oracle 产品 WebLogic,请再次阅读该消息。
  • 啊,我把这两个弄糊涂了。我只对 Websphere 有过(负面)经验。没接触过weblogic
  • 通常首选 WebLogic,因为 Oracle 提供企业级支持。 JBoss 也是 Redhat 提供的一个很好的企业级支持。对于开源 Glassfish,它是首选,因为它是最古老的并且可以通过 Internet 获得大量文档。我对 WebSphere 完全没有任何想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 2016-11-19
  • 2020-06-08
  • 2016-07-26
  • 2011-06-03
  • 2021-09-24
相关资源
最近更新 更多