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 的错误引用引起的。假设我设置了一个Userin Controller。如果我想显示用户名,我使用<c:out value="${user.name}"/>. 但是如果我使用<c:out value="${user.namee}"/>,就会出现这个错误。

所以我想知道我是否在 中设置了很多对象Controller,并在页面上显示了这些对象的消息。如何找到导致错误的原因?

4

1 回答 1

1

在标准 Java EE API 中,ASYNC可识别为DispatcherTypeenum的一个字段。

这个枚举是在 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. 您应该确保 WAR/WEB-INF/lib不包含目标运行时本身(在您的情况下为 Jetty)已经提供的任何库。这与使用的版本无关。即使您调整了版本,您也不应该与 webapp 一起提供特定于服务器的库。

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

请注意,这与 JSTL 无关。

也可以看看:

于 2016-04-20T09:08:06.237 回答