0

我在 tomcat 7.0.42 中有一个例外。我唯一要做的就是在 webapps 目录中部署一个 grails 应用程序。我在配置中没有改变任何东西......直到最近,tomcat 工作正常。

我真的没有找到在我的战争和 tomcat 之间制造麻烦的原因。

我在档案中搜索,发现一些罐子可能会发生冲突。我发现 WEB-INF 中存在的 jetty.jar 和 servlet.jar 可能是冲突的来源,但在我的 WEB-INF 目录中没有找到它们中的任何一个......

这是我的堆栈跟踪:

org.apache.jasper.JasperException: java.lang.ClassCastException: org.apache.jasper.el.ELContextImpl cannot be cast to org.apache.jasper.el.ELContextImpl
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

如果不是由于罐子冲突,这里有人知道这个问题的原因吗?

4

1 回答 1

0

在类路径中搜索org.apache.jasper.el.ELContextImpl类。我很确定你会发现不止一个条目。该类也可能位于 tomcat libs 目录中。如果没有找到,也要检查那里。

下面列出了一些可以帮助您分析类路径的工具。其中一些需要Maven。

http://www.jboss.org/tattletale

http://mojo.codehaus.org/extra-enforcer-rules/banDuplicateClasses.html

https://github.com/ning/maven-duplicate-finder-plugin

希望这有助于追踪您的问题。

运行时的另一个选项是执行以下操作:

使用 jvm 选项启动 tomcat -verbose:class。这将打印出所有已加载的类以及它们来自的 jar。grepELContextImpl找出罐子。取出罐子,看看它是否再次工作。

于 2013-11-14T14:03:32.377 回答