[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[整理]springMVC的异步模式,注意事项,DeferredResult

上一篇:[备忘]忘写@ResponseBody,一直报405 Method Not Allowed
下一篇:[备忘]获取线程池当前状态

添加日期:2019/9/6 15:18:54 快速返回   返回列表 阅读1496次

参考文章:
https://www.cnblogs.com/guogangj/p/5457959.html
https://www.jianshu.com/p/ecc6f5168aef
https://www.iteye.com/blog/elim-2426566
https://www.cnblogs.com/yangzhilong/p/3725128.html

Servlet 3.0或以上的版本开始支持异步。
Spring MVC 3.2 开始支持异步。


(1)POM.xml里
javax.servlet-api用3.1.0或更高版本


(2)web.xml里
web-app的声明用3.0版本

所有filter和org.springframework.web.servlet.DispatcherServlet,都增加
<async-supported>true</async-supported>

如:


  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <async-supported>true</async-supported>
  </filter>

<servlet>
    <servlet-name>SpringMVCServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
                WEB-INF/spring/appServlet/servlet-context.xml
            </param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
    <async-supported>true</async-supported>
  </servlet>



(3)springMvc的配置文件xml里,
声明用3.2版本或以上。

增加
    <mvc:annotation-driven>
        <mvc:async-support default-timeout="15000"/>
    </mvc:annotation-driven>
有个异步超时时间的设置。

(4)修改Controller


    @RequestMapping(value = "/query")
    @ResponseBody
    public DeferredResult<String> query(HttpServletRequest request,HttpServletResponse resp) {
        
        final DeferredResult<String> deferredResult = new DeferredResult<String>();

        // 超时设置
        deferredResult.onTimeout(new Runnable() {

            @Override
            public void run() {
                
                deferredResult.setResult("---超时啦---");

            }
            
        });
        //异步执行你的业务,在里面调用deferredResult.setResult()设置结果即可。
        
        //先返回
        return deferredResult;
    }

 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved