Spring MVC 项目在使用 DeferredResult 实现异步接口时出现错误。

完整错误信息如下:

十一月 03, 2017 8:59:53 上午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [SpringMVC] in context with path [/smarthome] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Async support must be enabled on a servlet and for all filters involved in async request processing. This is done in Java code using the Servlet API or by adding "<async-supported>true</async-supported>" to servlet and filter declarations in web.xml.] with root cause
java.lang.IllegalStateException: Async support must be enabled on a servlet and for all filters involved in async request processing. This is done in Java code using the Servlet API or by adding "<async-supported>true</async-supported>" to servlet and filter declarations in web.xml.at org.springframework.util.Assert.state(Assert.java:385)at org.springframework.web.context.request.async.StandardServletAsyncWebRequest.startAsync(StandardServletAsyncWebRequest.java:104)at org.springframework.web.context.request.async.WebAsyncManager.startAsyncProcessing(WebAsyncManager.java:431)at org.springframework.web.context.request.async.WebAsyncManager.startDeferredResultProcessing(WebAsyncManager.java:409)at org.springframework.web.servlet.mvc.method.annotation.DeferredResultMethodReturnValueHandler.handleReturnValue(DeferredResultMethodReturnValueHandler.java:51)at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:71)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:122)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:690)at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at com.wanyu.frame.base.AuthFilter.doFilter(AuthFilter.java:97)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1524)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1480)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:745)

在错误信息中,唯一涉及到自己写的代码的信息只有一行:

com.wanyu.frame.base.AuthFilter.doFilter(AuthFilter.java:97)

相关代码如下:

  @Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse res = (HttpServletResponse) response;String requestURI = req.getRequestURI().substring(req.getRequestURI().indexOf("/", 1),req.getRequestURI().length());System.out.println("requestURI=" + requestURI);// 如果没有登录if (p == null) { // &&// !requestURI.equals("/controller/personal/login.do"),不使用此验证,把不需要登录的都映射为:/publicResponseUtils.outFailureJson(res, BaseCodeMessage.personal_10000);} else {req.setAttribute(ConstantDict.SESSION_USER, p);// 继续访问其他资源chain.doFilter(req, res); //这里为发生错误的语句}}

解决方法

这个问题怎么解决呢?

其实错误提示中已经写的很清楚了:

java.lang.IllegalStateException: Async support must be enabled on a servlet and for all filters involved in async request processing. This is done in Java code using the Servlet API or by adding "<async-supported>true</async-supported>" to servlet and filter declarations in web.xml.

需要在 web.xml 文件中的 filter 和 servlet 定义中添加:"<async-supported>true</async-supported>"

以下是完整的 web.xml,请参考"<async-supported>true</async-supported>"出现的位置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><display-name>Archetype Created Web Application</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mybatis.xml</param-value></context-param><context-param><param-name>spring.profiles.active</param-name><param-value>dev</param-value></context-param><context-param><param-name>spring.profiles.default</param-name><param-value>dev</param-value></context-param><context-param><param-name>spring.liveBeansView.mbeanDomain</param-name><param-value>dev</param-value></context-param><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><async-supported>true</async-supported><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 不管是在前面还是在最后,都无法使用@Autowired和@Resource --><filter><filter-name>AuthFilter</filter-name><filter-class>com.wanyu.frame.base.AuthFilter</filter-class><async-supported>true</async-supported></filter><filter-mapping><filter-name>AuthFilter</filter-name><url-pattern>/page/*</url-pattern></filter-mapping><filter-mapping><filter-name>AuthFilter</filter-name><url-pattern>/webapi/*</url-pattern></filter-mapping><filter-mapping><filter-name>AuthFilter</filter-name><url-pattern>/mobileapi/*</url-pattern></filter-mapping><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener><servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping><welcome-file-list><welcome-file>/index.jsp</welcome-file></welcome-file-list><error-page><error-code>404</error-code><location>/static/error/404.html</location></error-page><error-page><error-code>500</error-code><location>/static/error/500.html</location></error-page>
</web-app>

java.lang.IllegalStateException: Async support must be enabled on a servlet and for all filters invo相关推荐

  1. java.lang.IllegalStateException: Calling [asyncError()] is not valid for a request with Async state

    1.这个问题是在搭建spring-admin监控的时候发现的, 版本如下 spring-boot: 2.1.7.RELEASE spring-boot-admin:2.1.5 问题的相关描述看这里 h ...

  2. springboot集成logback,报错java.lang.IllegalStateException: Logback configuration error detected:

    最近需要将一个springboot项目部署到一台新服务器上.而且新服务器是完全copy了旧服务器的环境与项目.但是在新服务器上启动该springboot项目,就一直报错 2019-03-18 18:5 ...

  3. IDEA热布署报错java.lang.IllegalStateException: Restarter has not been initialized

    在IDEA导入devtools依赖实现热布署,启动后遇到如下问题 java.lang.IllegalStateException: Restarter has not been initialized ...

  4. Java.lang.IllegalStateException Activity has been destroyed

    12-07 11:13:14.030 13836-13836/com.xxx.xxx.android E/error.out: 检测到严重错误,程序即将退出java.lang.RuntimeExcep ...

  5. Spring Data ElasticSearch删除索引遇到的java.lang.IllegalStateException: Failed to load ApplicationContext异常

    异常内容如下: log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.S ...

  6. Neo4j导入:java.lang.IllegalStateException:不支持在单个导入中混合指定和未指定的组所有物...

    休息片刻之后,我最近一直在使用Neo4j导入工具 ,并遇到了我最初不理解的有趣的错误消息. 我有一些CSV文件,其中包含要导入Neo4j的节点. 它们的内容如下所示: $ cat people_hea ...

  7. 解决Hbase报错java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for....

    完整报错为: java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper ...

  8. java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this a

    微信支付它给的WXPayEntryActivity主题改错了 java.lang.RuntimeException: Unable to start activity ComponentInfo{包名 ...

  9. IDEA| java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context

    问题:java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.context.pr ...

  10. Caused by: java.lang.IllegalStateException: Failed to introspect Class

    Spring-Data-ElasticSearch整合spring boot问题 Caused by: java.lang.IllegalStateException: Failed to intro ...

最新文章

  1. service iptables status无法执行,报错
  2. IOS上传图片旋转90度问题出现原因及解决方案
  3. java-println连接
  4. 编程方法学22:NameSurfer概述
  5. centos 7 yum安装mysql完整过程记录
  6. 展望2018:WebRTC和下一代编解码器
  7. c语言之-umask()函数
  8. 关于页面布局间距使用的经验之谈
  9. 利用反射获得类的public static/const成员的值
  10. 数据结构--二叉查找树 Binary Search Tree
  11. 8位二进制数的原码、反码、补码以及它能表示的范围
  12. qt5以后正常显示中文(windows下 vs编译器)
  13. “启用宏的幻灯片”是什么意思
  14. ansiblea基本使用
  15. 解决iPhone发送短信显示红色感叹号:尚未送达
  16. php pdo mysql 超时_为 PDO 增加读写超时
  17. java d打字游戏_练习--java实现的打字游戏
  18. 浓淡相宜间,是灵魂的默契;
  19. 【每日蓝桥】14、一三年省赛Java组真题“三部排序”
  20. Python利用selenium简单的爬取网易云歌曲排行榜

热门文章

  1. jQuery EasyUI 使用笔记
  2. 在NodeJS中使用Redis缓存数据
  3. 寒假第七周 2.22 --- 2.28
  4. c#基础知识——main
  5. IntelliJ IDEA 2021 for Mac(最好的java开发工具)正式版支持m1芯片
  6. 2021-08-25
  7. 通过Spring Boot中的手动Bean定义提高启动性能
  8. 云视频会议对初创公司的益处
  9. 《通信技术导论(原书第5版)》——2.5 内部使用的IP专用交换系统
  10. [FATAL] [DBT-10317] Specified SID Name (lhr122) already exists.