java.lang.NoSuchFieldError: ASYNC
java.lang.NoSuchFieldError: ASYNC
无法访问该页面并显示以下错误消息:
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的错误引用引起的。假设我在 Controller
中设置了 User
。如果我想显示用户名,我使用 <c:out value="${user.name}"/>
。但是如果我使用<c:out value="${user.namee}"/>
,就会出现这个错误。
所以我想知道我是否在 Controller
中设置了很多对象,并在页面上显示了这些对象的消息。我怎样才能找到导致错误的原因?
在标准 Java EE API, ASYNC
is recognizable as a field of DispatcherType
enum.
这个枚举是在 Servlet 3.0 中引入的。因此,这个问题表明 webapp 的运行时类路径被混合 Servlet API 版本污染。例如。 Servlet 2.5 和 Servlet 3.0 混合使用。该实现是为 Servlet 3.0 或更新版本(可能是 Jetty 本身)加载的,但是 API 是为 Servlet 2.5 或更早版本加载的(可能是通过 webapp)。
最常见的原因是 WAR 文件在 /WEB-INF/lib
中错误地包含了一个 Servlet API JAR 文件甚至 Java EE JAR 文件。您应该确保 WAR 的 /WEB-INF/lib
不包含目标运行时本身(在您的情况下为 Jetty)已经提供的任何库。这与使用的版本无关。即使您调整了版本,您也不应该与 webapp 一起提供特定于服务器的库。
当您使用 Maven 时,在 webapp 的 pom.xml
中将服务器提供的库标记为 <scope>provided</scope>
。当您手动携带 JAR 时,只需从 /WEB-INF/lib
文件夹中物理删除服务器提供的库。
请注意,这与 JSTL 无关。
另请参阅:
- How do I import the javax.servlet API in my Eclipse project?
无法访问该页面并显示以下错误消息:
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的错误引用引起的。假设我在 Controller
中设置了 User
。如果我想显示用户名,我使用 <c:out value="${user.name}"/>
。但是如果我使用<c:out value="${user.namee}"/>
,就会出现这个错误。
所以我想知道我是否在 Controller
中设置了很多对象,并在页面上显示了这些对象的消息。我怎样才能找到导致错误的原因?
在标准 Java EE API, ASYNC
is recognizable as a field of DispatcherType
enum.
这个枚举是在 Servlet 3.0 中引入的。因此,这个问题表明 webapp 的运行时类路径被混合 Servlet API 版本污染。例如。 Servlet 2.5 和 Servlet 3.0 混合使用。该实现是为 Servlet 3.0 或更新版本(可能是 Jetty 本身)加载的,但是 API 是为 Servlet 2.5 或更早版本加载的(可能是通过 webapp)。
最常见的原因是 WAR 文件在 /WEB-INF/lib
中错误地包含了一个 Servlet API JAR 文件甚至 Java EE JAR 文件。您应该确保 WAR 的 /WEB-INF/lib
不包含目标运行时本身(在您的情况下为 Jetty)已经提供的任何库。这与使用的版本无关。即使您调整了版本,您也不应该与 webapp 一起提供特定于服务器的库。
当您使用 Maven 时,在 webapp 的 pom.xml
中将服务器提供的库标记为 <scope>provided</scope>
。当您手动携带 JAR 时,只需从 /WEB-INF/lib
文件夹中物理删除服务器提供的库。
请注意,这与 JSTL 无关。
另请参阅:
- How do I import the javax.servlet API in my Eclipse project?