java.lang.NoSuchFieldError:ASYNC

时间:2016-04-20 08:25:53

标签: jsp servlets jstl nosuchfieldexception

无法访问该页面并显示以下错误消息:

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中设置了很多对象,并在页面上显示了这些对象的消息。如何找到哪一个导致错误?

1 个答案:

答案 0 :(得分:1)

在标准Java EE API中,ASYNC可被识别为DispatcherType enum的字段。

这个枚举是在Servlet 3.0中引入的。因此,这个问题表明webapp的运行时类路径被混合的Servlet API版本污染。例如。 Servlet 2.5和Servlet 3.0混合使用。实现是为Servlet 3.0或更新版本(可能是Jetty本身)加载的,但API已加载到Servlet 2.5或更早版本(可能通过webapp)。

最常见的原因是WAR文件错误地包含Servlet API JAR文件,甚至包含/WEB-INF/lib中的Java EE JAR文件。您应确保WAR /WEB-INF/lib不包含目标运行时本身已提供的任何库(在您的情况下为Jetty)。这与使用的版本无关。即使你对齐版本,你也不应该提供特定于服务器的库以及webapp。

当您使用Maven时,请在webapp&#39; <scope>provided</scope>中将服务器提供的库标记为pom.xml。当您手动携带JAR时,只需从/WEB-INF/lib文件夹中物理删除服务器提供的库。

请注意,这与JSTL无关。

另见: