Java servlet api 3.0 jar中缺少异步方法?

Java servlet api 3.0 jar中缺少异步方法?,java,asynchronous,servlet-3.0,Java,Asynchronous,Servlet 3.0,我正在开发一个Servlet3.0应用程序,它必须异步处理请求 编译失败,出现错误 cannot find symbol symbol : method startAsync(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) location: interface javax.servlet.http.HttpServletRequest 信息 我的pom.xml中有以下依赖项: <

我正在开发一个Servlet3.0应用程序,它必须异步处理请求

编译失败,出现错误

cannot find symbol
symbol  : method startAsync(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
location: interface javax.servlet.http.HttpServletRequest
信息

我的pom.xml中有以下依赖项:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>6.0</version>
</dependency>
我缺少什么?

我假设您以某种方式“设法”引用了位于
javaee web api
之前的类路径中的较旧的
servlet api
库(可能是传递的)。这意味着现有类是从较旧的
servlet api
中获取的,而旧规范中不存在的类是从
javaee web api
中加载的


您可以运行
mvn dependency:tree
查看过期库的引用位置,然后将其排除。

您需要这样做:只需尝试建议的POM,但仍然会得到相同的编译错误,并且ServletRequest接口中仍然缺少异步方法。奇怪:)如果你不移除另一个,可能会有问题。选择哪个
Servlet
spec?我确实删除了以前的依赖项,并将建议的一个放在它的位置上。我需要servlet 3.0,因为在以前的版本中没有异步支持。您使用的是哪个版本的Tomcat或其他容器?谢谢,这确实是原因。Maven中的依赖管理只是试图隐藏复杂性,而不是真正解决它。只要依赖关系存储库的维护和当前一样糟糕(例如,在本例中,Servlet API工件以不同的名称/ID出现在不同的版本中),您就一定会遇到这样的问题。谢谢,它成功了!在我的例子中,是使用jcifs,它添加了ServletAPI2.4
public abstract java.lang.String javax.servlet.ServletRequest.getScheme()
public abstract java.lang.String javax.servlet.ServletRequest.getProtocol()
public abstract javax.servlet.ServletInputStream javax.servlet.ServletRequest.getInputStream() throws java.io.IOException
public abstract int javax.servlet.ServletRequest.getContentLength()
public abstract java.lang.Object javax.servlet.ServletRequest.getAttribute(java.lang.String)
public abstract java.lang.String javax.servlet.ServletRequest.getContentType()
public abstract java.util.Locale javax.servlet.ServletRequest.getLocale()
public abstract java.util.Enumeration javax.servlet.ServletRequest.getAttributeNames()
public abstract java.lang.String javax.servlet.ServletRequest.getCharacterEncoding()
public abstract void javax.servlet.ServletRequest.setCharacterEncoding(java.lang.String) throws java.io.UnsupportedEncodingException
public abstract java.lang.String javax.servlet.ServletRequest.getParameter(java.lang.String)
public abstract java.util.Enumeration javax.servlet.ServletRequest.getParameterNames()
public abstract java.lang.String[] javax.servlet.ServletRequest.getParameterValues(java.lang.String)
public abstract java.util.Map javax.servlet.ServletRequest.getParameterMap()
public abstract java.lang.String javax.servlet.ServletRequest.getServerName()
public abstract int javax.servlet.ServletRequest.getServerPort()
public abstract java.io.BufferedReader javax.servlet.ServletRequest.getReader() throws java.io.IOException
public abstract java.lang.String javax.servlet.ServletRequest.getRemoteAddr()
public abstract java.lang.String javax.servlet.ServletRequest.getRemoteHost()
public abstract void javax.servlet.ServletRequest.setAttribute(java.lang.String,java.lang.Object)
public abstract void javax.servlet.ServletRequest.removeAttribute(java.lang.String)
public abstract java.util.Enumeration javax.servlet.ServletRequest.getLocales()
public abstract boolean javax.servlet.ServletRequest.isSecure()
public abstract javax.servlet.RequestDispatcher javax.servlet.ServletRequest.getRequestDispatcher(java.lang.String)
public abstract java.lang.String javax.servlet.ServletRequest.getRealPath(java.lang.String)
public abstract int javax.servlet.ServletRequest.getRemotePort()
public abstract java.lang.String javax.servlet.ServletRequest.getLocalName()
public abstract java.lang.String javax.servlet.ServletRequest.getLocalAddr()
public abstract int javax.servlet.ServletRequest.getLocalPort()