web-dev-qa-db-ja.com

org.Apache.jasper.el.E​​LContextImplをorg.Apache.jasper.runtime.ELContextImplにキャストすることはできません

Javaに実装されたWebサービスプロジェクトがあり、jspページも含まれています。マシンのjetty 8.1.5にデプロイし、正常に動作します。ただし、Windows Server2003にデプロイするとJetty 8.1.3では、次の例外が発生します。

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

これは完全なトレースです:

Java.lang.ClassCastException: org.Apache.jasper.el.ELContextImpl cannot be cast to org.Apache.jasper.runtime.ELContextImpl
    at org.Apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.Java:1002)
    at org.Apache.jsp.home.index_jsp._jspService(org.Apache.jsp.home.index_jsp:52)
    at org.Apache.jasper.runtime.HttpJspBase.service(HttpJspBase.Java:111)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:848)
    at org.Apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.Java:403)
    at org.Apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.Java:492)
    at org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:378)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:848)
    at org.Eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.Java:598)
    at org.Eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.Java:486)
    at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:119)
    at org.Eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.Java:542)
    at org.Eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.Java:233)
    at org.Eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.Java:1065)
    at org.Eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.Java:413)
    at org.Eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.Java:192)
    at org.Eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.Java:999)
    at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:117)
    at org.Eclipse.jetty.server.Dispatcher.forward(Dispatcher.Java:271)
    at org.Eclipse.jetty.server.Dispatcher.forward(Dispatcher.Java:98)
    at org.Eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.Java:557)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:735)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:848)
    at org.Eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.Java:598)
    at org.Eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.Java:486)
    at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:119)
    at org.Eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.Java:499)
    at org.Eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.Java:233)
    at org.Eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.Java:1065)
    at org.Eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.Java:413)
    at org.Eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.Java:192)
    at org.Eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.Java:999)
    at org.Eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.Java:117)
    at org.Eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.Java:250)
    at org.Eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.Java:149)
    at org.Eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.Java:111)
    at org.Eclipse.jetty.server.Server.handle(Server.Java:350)
    at org.Eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.Java:454)
    at org.Eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.Java:890)
    at org.Eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.Java:944)
    at org.Eclipse.jetty.http.HttpParser.parseNext(HttpParser.Java:630)
    at org.Eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.Java:230)
    at org.Eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.Java:77)
    at org.Eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.Java:606)
    at org.Eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.Java:46)
    at org.Eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.Java:603)
    at org.Eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.Java:538)
    at Java.lang.Thread.run(Unknown Source)

この例外とは何か、そしてそれを修正する方法はありますか?

12
Sami

これは、Webアプリにjasper.jarjetty.jarservlet.jarなどのservletcontainer固有のJARファイルが/WEB-INF/libに含まれている場合に発生する可能性があります。これは、ターゲットservletcontainer上の異なるバージョンのJARファイルと競合しています。

そのservletcontainer固有のJARファイルをWebアプリケーションの/WEB-INF/libから削除します。そこには属していません。これは、servletcontainer自体によってすでに提供されているはずです。

参照:

11
BalusC

[〜#〜] if [〜#〜] mavenを使用している場合(応答なしでコメントを求めました)、「提供された」スコープを使用して競合するjarを回避できます。本番環境にデプロイする場合、jarは含まれません。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>

桟橋の瓶についてはよくわかりませんが、おそらく同じです。

[〜#〜] if [〜#〜]あなたは[〜#〜] not [〜#〜] Mavenを使用している場合は、競合するjar(servletsとjetty)を開発用コンテナのlibフォルダーに移動し、アプリケーションのWEB-INF/libフォルダーから削除します。

5
jpaoletti

Webアプリケーションのフォルダー/ WEB-INF/libにjasper.jarが含まれていない場合(BalusCの回答を参照)、コンテナーで別のWebアプリが実行されているかどうかを確認してください。次に、そのWebアプリのフォルダー/ WEB-INF/libにjasper.jarが含まれているかどうかを確認します。これは私たちに起こりました。それらのwebappsからjasper.jarを削除することで(原文ママ!)、問題は解決できます。明らかに、webappsは、本来あるべき他のmeachのためにそれほど分離されていません。この問題は、Tomcat6からTomcat7に切り替えたときに発生し、jasper.jar(バージョン6)が誤ってWebアプリケーションの1つにバンドルされていました。

4
rwitzel

上記の回答とは別に、もう1つ注意してください。 WEB-INF/libの下にjsp-2.1-6.0.2.jarがある同じTomcat7.0.42インスタンスの下に別の戦争が展開されました。このjarには、org.Apache.jasper.runtime.ELContextImplクラスがあります。

私の理解では、各Webアプリには独自のクラスローダーがあり、1つのWebアプリによってロードされたクラスファイルは他のWebアプリには表示されません。それでも何も機能していなかったので、そのjsp.jarを持っていた他の戦争を削除し、Tomcatを再起動しましたが、驚いたことに、例外はもう発生していませんでした。どういうわけか、このクラスが読み込まれ、問題が発生していました。

興味深いのは、これらの戦争の両方がTomcat6.xで完全に正常に機能することです。

3
saurabh

私は同じ問題に直面し、すべての提案を試しましたが、どれもうまくいきませんでした。私が持っていたように、TomcatバージョンをオーバーライドするSpringBootを使用した後に問題が発生したことが最終的にわかりました

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.0.M2</version>

Spring Bootを取り外すと、問題が解決します。 This 回答は、Spring Boot + Maven + Tomcat8を使用するためのソリューションを提供する可能性があります。

0
Saeed

私(Jetty 8.1.14)の場合、この正確なエラーメッセージは、実際には同じJettyコンテナ内の別のWebアプリが原因で発生していました。複数のWebアプリを実行していますか?

0
Mr Auni

この行を<context>に追加します。

<Loader delegate="true" />

この問題は、applicationsタグ内の競合するjarに関連しています。これは次のようになります。

<?xml version='1.0' encoding='utf-8'?>
<!-- The contents of this file will be loaded for each web application -->
<Context>

  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
  <Loader delegate="true" /> <!--this line-->
  <!-- Uncomment this to disable session persistence across Tomcat restarts -->
  <!--
      <Manager pathname="" />
    -->

  <!-- Uncomment this to enable Comet connection tacking (provides events on session expiration as well as webapp lifecycle) -->
  <!--
      <Valve className="org.Apache.catalina.valves.CometConnectionManagerValve" />
    -->

</Context>
0
leandro lion