1

ページにアクセスできず、次のエラー メッセージが表示されました。

java.lang.NoSuchFieldError: ASYNC
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:505)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)

これは、ページ内のエラー メッセージの一部です。

私の経験では、このエラーは JSTL を使用した間違った参照が原因で発生します。を設定したUserとしControllerます。ユーザー名を表示したい場合は、 を使用します<c:out value="${user.name}"/>。しかし、 を使用する<c:out value="${user.namee}"/>と、このエラーが発生します。

Controllerでは、たくさんのオブジェクトを に設定して、これらのオブジェクトのメッセージをページに表示しているかどうか疑問に思います。エラーの原因を特定するにはどうすればよいですか?

4

1 に答える 1

1

標準の Java EE API では、enumASYNCのフィールドとして認識されます。DispatcherType

この列挙型は Servlet 3.0 で導入されました。したがって、この問題は、webapp の実行時クラスパスが混合サーブレット API バージョンで汚染されていることを示唆しています。たとえば、Servlet 2.5 と Servlet 3.0 が混在しています。実装は Servlet 3.0 以降 (おそらく Jetty 自体) 用にロードされましたが、API は Servlet 2.5 以前 (おそらく webapp 経由) 用にロードされました。

これの最も一般的な原因は、WAR ファイルに誤って Servlet API JAR ファイルまたは Java EE JAR ファイルが含まれていることです/WEB-INF/lib/WEB-INF/libターゲット ランタイム自体 (この場合は Jetty) によって既に提供されているライブラリがWAR に含まれていないことを確認する必要があります。これは、使用するバージョンに関係ありません。バージョンを調整したとしても、サーバー固有のライブラリを webapp と共に提供することは想定されていません。

Maven を使用している場合は、サーバー提供のライブラリを<scope>provided</scope>webapp のとしてマークしますpom.xml。JAR を手動で持ち歩く場合は、サーバー提供のライブラリを/WEB-INF/libフォルダーから物理的に削除するだけです。

これは JSTL とは何の関係もないことに注意してください。

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

于 2016-04-20T09:08:06.237 に答える