Servlet3.0提供的异步处理

用属性asyncSupported=true开启Servlet对异步的支持。

在请求时,在request.startAsync()抛java.lang.IllegalStateException: Not supported.的异常。

原因是同一个Web应用中其他地方定义了Filter,且没有指定asyncSupported=true ,导致该异常。必须为此应用中所有Filter指定asyncSupported=true。

 

------2014年06月08日重新运行情况:

 1 六月 08, 2014 12:20:54 上午 org.apache.catalina.core.StandardWrapperValve invoke

 2 严重: Servlet.service() for servlet [com.hackem.testweb.asyncservlet.AsyncServlet] in context with path [/testweb] threw exception

 3 java.lang.IllegalStateException: Not supported.

 4     at org.apache.catalina.connector.Request.startAsync(Request.java:1658)

 5     at org.apache.catalina.connector.Request.startAsync(Request.java:1651)

 6     at org.apache.catalina.connector.RequestFacade.startAsync(RequestFacade.java:1022)

 7     at com.hackem.testweb.asyncservlet.AsyncServlet.doGet(AsyncServlet.java:47)

 8     at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)

 9     at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

10     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)

11     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

12     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

13     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

14     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

15     at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)

16     at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)

17     at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)

18     at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:389)

19     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

20     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

21     at com.hackem.testweb.filter.LogFilter.doFilter(LogFilter.java:57)

22     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

23     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

24     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

25     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

26     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)

27     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

28     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

29     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)

30     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

31     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)

32     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)

33     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)

34     at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2442)

35     at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2431)

36     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

37     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

38     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

39     at java.lang.Thread.run(Thread.java:745)

查看源码注释发现:

* @throws IllegalStateException if this request is within the scope of
* a filter or servlet that does not support asynchronous operations
* (that is, {@link #isAsyncSupported} returns false),
* or if this method is called again without any asynchronous dispatch
* (resulting from one of the {@link AsyncContext#dispatch} methods),
* is called outside the scope of any such dispatch, or is called again
* within the scope of the same dispatch, or if the response has
* already been closed

 

写得很清楚,如果此Servlet请求经过不支持异步的Filter处理,就会抛出异常,问题初步解决。

你可能感兴趣的:(servlet3.0)