zoukankan      html  css  js  c++  java
  • 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处理,就会抛出异常,问题初步解决。

    作者:hackem
             
    本文版权归原作者所有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    【内网穿透】【natapp】web服务映射
    【javascript】日期转字符串
    【springcloud】Transaction rolled back because it has been marked as rollback-only
    MySQL 快速创建索引
    MySQL 快速导入大量数据 资料收集
    基于WinCE的JSON 类库 源码
    C# 模拟提交 Form表单的数据
    git恢复删除的分支及内容
    js数组push方法使用注意
    mint-ui的search组件如何在键盘显示搜索按钮
  • 原文地址:https://www.cnblogs.com/hackem/p/3190175.html
Copyright © 2011-2022 走看看