关于servlet 3的异步时报错

本文介绍了在使用Servlet 3.0时遇到startAsync方法抛出IllegalStateException异常的原因及解决方案,包括检查配置、JDK版本、编译级别等,并提供了一个有效的方法来开启Tomcat的异步支持。

经常在startAsync时报错,IllegalStateException: Not supported.


使用servlet3.0的前提条件:
1.使用servlet3.0新标准jar包;
2.JDK必须在1.6以上版本;
3.编译器的编译级别为6.0
4.在web.xml文件中,使用3.0规范
5.使用支持servlet3.0特性的web容器,比如tomcat7



经过测试,如果做一个简单的web项目war丢到tomcat/下面webapps里面,一般是能跑的,在项目测试的时候报这个错,在保证了前提条件下如果还报错,可以试着打开tomcat的异步开关,request.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);在bing里搜illegalstateexception not supported startasync

,一堆答案,但没有一个好使的。特意上tomcat的网站看了一下,才找到这个,经过测试,有效,其它容器不会出类似的问题。



rg.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to flush: java.io.IOException: Broken pipe at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:320) ~[spring-web-6.1.5.jar!/:6.1.5] at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.flush(StandardServletAsyncWebRequest.java:392) ~[spring-web-6.1.5.jar!/:6.1.5] at org.springframework.util.StreamUtils.copy(StreamUtils.java:135) ~[spring-core-6.1.5.jar!/:6.1.5] at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:128) ~[spring-web-6.1.5.jar!/:6.1.5] at org.springframework.http.converter.StringHttpMessageConverter.writeInternal(StringHttpMessageConverter.java:44) ~[spring-web-6.1.5.jar!/:6.1.5] at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:235) ~[spring-web-6.1.5.jar!/:6.1.5] at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitterReturnValueHandler$HttpMessageConvertingHandler.sendInternal(ResponseBodyEmitterReturnValueHandler.java:221) ~[spring-webmvc-6.1.5.jar!/:6.1.5] at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitterReturnValueHandler$HttpMessageConvertingHandler.send(ResponseBodyEmitterReturnValueHandler.java:212) ~[spring-webmvc-6.1.5.jar!/:6.1.5] at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.sendInternal(ResponseBodyEmitter.java:234) ~[spring-webmvc-6.1.5.jar!/:6.1.5] at org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter.send(ResponseBodyEmitter.java:225) ~[spring-webmvc-6.1.5.jar!/:6.1.5] at org.springframework.web.servlet.mvc.method.annotation.SseEmitter.send(SseEmitter.java:135) ~[spring-webmvc-6.1.5.jar!/:6.1.5] at com.example.myapp.user.controller.WorkFlowController.lambda$simpleRequest$1(WorkFlowController.java:110) ~[!/:0.0.1-SNAPSHOT] at com.dtflys.forest.http.ForestSSE.doOnReceiveEventSource(ForestSSE.java:617) ~[forest-core-1.7.1.jar!/:1.7.1] at com.dtflys.forest.http.ForestSSE.readMultiLines(ForestSSE.java:775) ~[forest-core-1.7.1.jar!/:1.7.1] at com.dtflys.forest.http.ForestSSE.decodeLinesWithAutoMode(ForestSSE.java:742) ~[forest-core-1.7.1.jar!/:1.7.1] at com.dtflys.forest.http.ForestSSE.decodeLines(ForestSSE.java:699) ~[forest-core-1.7.1.jar!/:1.7.1] at com.dtflys.forest.http.ForestSSE.lambda$listen$12(ForestSSE.java:882) ~[forest-core-1.7.1.jar!/:1.7.1] at com.dtflys.forest.http.ResultGetter.openStream(ResultGetter.java:128) ~[forest-core-1.7.1.jar!/:1.7.1] at com.dtflys.forest.http.ForestSSE.listen(ForestSSE.java:881) ~[forest-core-1.7.1.jar!/:1.7.1] at com.dtflys.forest.http.ForestSSE.lambda$asyncListen$13(ForestSSE.java:912) ~[forest-core-1.7.1.jar!/:1.7.1] at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[na:na] at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760) ~[na:na] at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[na:na] at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[na:na] at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[na:na] at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[na:na] at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[na:na] 分析一下
最新发布
09-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值