【问题标题】:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getServletRegistrations()Ljava/util/Map;java.lang.NoSuchMethodError: javax.servlet.ServletContext.getServletRegistrations()Ljava/util/Map;
【发布时间】:2011-11-27 13:52:29
【问题描述】:

我按照 BalusC 在JSF 2.0 File upload 的回答中的步骤进行操作。我采取不同的唯一步骤是答案中的战斧上传链接。链接坏了,所以我从另一个地方得到了 tomahawk-1.1.11。当我尝试从 Eclipse 启动 Tomcat 7.0.14 时,出现以下错误:

java.lang.NoSuchMethodError: 
javax.servlet.ServletContext.getServletRegistrations()Ljava/util/Map;

Tomcat 没有启动。有任何想法吗?此外,链接中的答案是从 3 月开始的。 JSF 2 中的文件上传有什么进展吗?

【问题讨论】:

  • 还有一条信息:当我回到 web.xml 文件中的 2.5 版本,以便我可以处理项目的其他区域时,我收到此错误:java.lang.NoClassDefFoundError : Lorg/apache/myfaces/custom/fileupload/UploadedFile;当我从项目中取出 UploadFile(来自链接中的教程)时,错误消失了。显然我在这里缺少一个或多个罐子,但我不知道是哪一个。任何帮助将不胜感激。

标签: servlets jsf-2


【解决方案1】:

您的 Web 项目的 /WEB-INF/lib 中充斥着不同品牌/版本的容器的特定于 servletcontainer 的库,例如 servlet-api.jarjavaee.jar 等。摆脱它们。

The mentioned method 是在 Servlet 3.0 中引入的,此错误表明您的 /WEB-INF/lib 中有 Servlet 2.5 容器或更早版本的库。如果您已经包含它们以规避 Eclipse 在 javax.servlet.* 导入时的编译错误,那么您应该以不同的方式解决它。即,通过将您实际要使用的 servletcontainer(在您的情况下为 Tomcat 7)集成为 Eclipse 中的目标运行时并将项目与它相关联。

请注意,此问题与 JSF 2.0 无关。你有一个异常指向 javax.servlet 包的方法,而不是 javax.faces 包。

另见:

【讨论】:

  • 好的,谢谢。我在 Tomcat 的库中确实有一个以前的 servlet-api.jar。我删除了它,现在我得到了这个:java.lang.ClassCastException: org.apache.myfaces.renderkit.html.ext.HtmlButtonRenderer cannot be cast to javax.faces.render.Renderer。我认为这意味着我的 myfaces jar 错误?我使用的是 myfaces-api-2.1.3.jar 和 myfaces-impl-2.1.3.jar。我应该使用另一个吗?再次感谢。
  • 这是战斧的一部分。这反过来表明不同版本的 JSF 库对类路径的污染。目前尚不清楚您在类路径中放置了哪些 JAR,但您应该永远更改 JRE/libJRE/lib/extTomcat/lib(除非您知道自己在做什么)。所有特定于您的 web 应用程序的 JAR(上述库尚未提供)都需要放入 /WEB-INF/lib(并且您不应拥有已由上述库在 /WEB-INF/lib 中提供的库的副本)。
  • 好的,我从 Tomcat 库中删除了 myfaces 和 tomahawk jar。我现在在类路径中只有 myfaces jar:myfaces-impl-2.1.3.jar、myfaces-api-2.1.3. 和 tomahawk-1.1.0.jar。当我启动 Tomcat 时,我得到这个:java.lang.NoClassDefFoundError: Lorg/apache/myfaces/custom/fileupload/UploadedFile,由您提供的上传 Bean 使用。看起来它越来越近了:)
  • 所以...我在 Eclipse 中清理了构建路径并启动了 Tomcat。现在我正在点击upload.xhtml 页面,但没有显示输入标签。我看到的只是提交按钮和这个:“警告:页面 /pages/upload.xhtml 声明命名空间 myfaces.apache.org/tomahawk 并使用标签 t:inputFileUpload ,但没有与命名空间关联的 TagLibrary。”任何帮助将不胜感激。
  • 你需要安装 Tomahawk。将 Tomahawk JAR 文件放入 /WEB-INF/lib。如果您的 Eclipse 项目设置正确,则绝对不需要进一步配置。
猜你喜欢
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
相关资源
最近更新 更多