【问题标题】:jars shipped in war conflicting with jetty [duplicate]在战争中运送的罐子与码头冲突[重复]
【发布时间】:2012-09-13 13:12:50
【问题描述】:

可能重复:
org.apache.jasper.el.ELContextImpl cannot be cast to org.apache.jasper.runtime.ELContextImpl

我从 Eclipse 中将一个 web 服务项目(包含 jsp 页面)导出到一个 war 文件中,并将其部署在 Jetty 8.1.5 中。它在我的机器上运行良好。但是在另一台机器(windows server 2003)上的 Jetty 8.1.3 上部署相同的 war 文件后,当我转到 index.jsp 页面时,它会给出 HTTP 错误 500 和以下异常:

org.apache.jasper.el.ELContextImpl cannot be cast to org.apache.jasper.runtime.ELContextImpl

我在两天前发布的this question 中的完整跟踪和更多详细信息。而我在WEB_INF/lib 中的所有罐子都在这两个屏幕截图中提供:

两天在互联网上寻找解决方案导致知道问题是由战争文件中运送的罐子和其他罐子(我猜是码头罐子)之间的冲突引起的。

问题是:如何找出导致问题的 jar?我尝试浏览这些 jar 的内容以寻找 ElContextImpl 类但没有找到任何东西? 有什么想法吗?


编辑:

我尝试将我的本地整个 Jetty 8.1.5 复制到服务器并从那里启动码头..但仍然没有成功。

【问题讨论】:

  • 您是否尝试使用 jetty--8.1.3 依赖项而不是 jetty--8.1.5 依赖项重建您的战争,然后将其重新部署到 jetty 8.1.3 上?
  • @Stephan 现在正在尝试.. 但在本地机器上部署了 war,因为它在 jetty 8.1.3(与服务器上的版本相同)中,它工作正常。但仍然没有在服务器上。
  • @Stephan 刚刚尝试过.. 还是一样的异常
  • 您能否在原始问题中发布更新,例如上面的屏幕截图。我们希望您使用额外的问题来提供额外的信息。谢谢。

标签: java jsp jar jetty


【解决方案1】:

您的 WAR 文件包含一些不必要的 JAR,例如 servlet-api-2.4.jar,它们应该是 Jetty 安装的一部分(可能在另一个版本中)。

乍一看你应该删除所有jetty-*.jarservlet-api-2.4.jarjavax.servlet.*.jar。如果您从 8.1.5 Jetty 安装中获取这些内容,则可能会与您的 8.1.3 安装发生冲突。

【讨论】:

  • 我刚刚在本地完成了这项工作,我的机器上的部署(以前可以正常工作)现在被破坏了,它给出了许多关于码头缺失类的例外情况,例如:java.lang.NoClassDefFoundError: org/eclipse/jetty/util/component/AbstractLifeCycle 我得到了 HTTP浏览器出现错误 503。
  • 也许您应该重新安装新的 Jetty。在我的安装中,这个类包含在lib/jetty-util-8.1.5.v20120716.jar 中。如果你正确启动了 Jetty,那么这个类应该存在。
  • 我可以在码头的lib/文件夹中看到库。我首先进入码头目录并输入java -jar start.jar。这个命令有什么问题吗?
  • jetty-servlets-*.jar(注意末尾的额外“s”)和jetty-websockets-*.jar 都对WEB-INF/lib/ 有效,因为它们是用户空间依赖项。其余的(比如jetty-utiljetty-io 只是来搭便车)。不用担心 WEB-INF/lib 中的 jetty-*.jar,因为它们在自己的 WebAppClassLoader 中被隔离,不会与服务器 jar 冲突。
猜你喜欢
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多