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)
この例外とは何か、そしてそれを修正する方法はありますか?
これは、Webアプリにjasper.jar
、jetty.jar
servlet.jar
などのservletcontainer固有のJARファイルが/WEB-INF/lib
に含まれている場合に発生する可能性があります。これは、ターゲットservletcontainer上の異なるバージョンのJARファイルと競合しています。
そのservletcontainer固有のJARファイルをWebアプリケーションの/WEB-INF/lib
から削除します。そこには属していません。これは、servletcontainer自体によってすでに提供されているはずです。
[〜#〜] 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フォルダーから削除します。
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つにバンドルされていました。
上記の回答とは別に、もう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で完全に正常に機能することです。
私は同じ問題に直面し、すべての提案を試しましたが、どれもうまくいきませんでした。私が持っていたように、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を使用するためのソリューションを提供する可能性があります。
私(Jetty 8.1.14)の場合、この正確なエラーメッセージは、実際には同じJettyコンテナ内の別のWebアプリが原因で発生していました。複数のWebアプリを実行していますか?
この行を<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>