12

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

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)

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

4

7 に答える 7

11

これは、なんらかの理由で webappjasper.jarjetty.jar servlet.jar、 などのサーブレットコンテナ固有の JAR ファイルが含まれている場合に発生する可能性があります/WEB-INF/lib。これは、ターゲット servletcontainer 上の別のバージョンの JAR ファイルと競合しています。

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

以下も参照してください。

于 2012-09-12T16:45:41.123 に答える
5

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>

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

Mavenを使用していない場合は、競合する jar (サーブレットとジェット) を開発コンテナーの lib フォルダーに移動し、アプリケーションの WEB-INF/lib フォルダーから削除する必要があります。

于 2012-09-19T13:31:35.813 に答える
4

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

于 2013-09-23T13:12:53.223 に答える
0

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

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

Spring Boot を削除すると、問題が解決します。この回答は、Spring Boot + Maven + Tomcat 8 を使用するためのソリューションを提供できます。

于 2014-11-09T15:11:39.507 に答える