返回列表 发帖

SSH第3版第2章第15节-SERVLET异步处理问题

例子中异步调用SERVLET处理后返回async.jsp页面,该页面执行出错。经查运行request.getAsyncContext().complete()出错,如果将这句注释运行正常,在异步调用监听类中显示异步调用完成,请问有人知道是什么原因,是Tomcat的bug吗?错误信息如下:
2011-8-26 22:29:14 org.apache.catalina.core.ApplicationDispatcher invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: Calling [asyncComplete()] is not valid for a request with Async state [DISPATCHED]
    at org.apache.coyote.AsyncStateMachine.asyncComplete(AsyncStateMachine.java:221)
    at org.apache.coyote.http11.Http11Processor.actionInternal(Http11Processor.java:526)
    at org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:773)
    at org.apache.coyote.Request.action(Request.java:344)
    at org.apache.catalina.core.AsyncContextImpl.complete(AsyncContextImpl.java:89)
    at org.apache.jsp.jsp._02._15.async_jsp._jspService(async_jsp.java:75)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530)
    at org.apache.catalina.core.AsyncContextImpl$1.run(AsyncContextImpl.java:173)
    at org.apache.catalina.core.AsyncContextImpl.doInternalDispatch(AsyncContextImpl.java:314)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:296)
    at org.apache.coyote.http11.AbstractHttp11Processor.asyncDispatch(AbstractHttp11Processor.java:1220)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:511)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

提问赏金:10金币
获奖名单 : 还未派发赏金

应该不是Tomcat的问题。
从错误提示来看,应该是request.getAsyncContext().complete()的时机不对。
提示说:当异步状态处于DISPATCHED时,不能调用request.getAsyncContext().complete()。
生命没有假期!
如果生命只剩下最后一秒,你可会想到我?

TOP

返回列表