servlet的异步处理机制

一.概述

WebServlet  和 WebFilter  注解类型可以包含  asyncSupport属性。为了编写能够支持异步的Servlet和Filter ,该

属性必须为true

 

支持异步处理的Servlet或者Filter 可以通过在ServletRequest 中调用startAsync 方法来启动新的线程。

startAsync 有两个重载方法:

AsyncContext  startAsync ()

AsyncContext startAsync(ServletRequest request ,ServletResponse response)

 

注意:重复调用startAsync方法将会启动同一个线程,将会抛出一个java.lang.lllegalStateException 异常

         调用 AsyncContext的start方法不会造成阻塞,因此它派发的线程还没启动,也会继续执行下一行代码

 

二.编写异步的Servlet

如果你有一个任务需要相对比较长的时间才能完成,最好成绩一个Servlet或者Filter  。在异步的Servlet或者Filter类中

需要完成以下工作:

1.在ServletRequest 中调用startAsync 方法来启动新的线程

2.在AsyncContext中调用setTimeout()方法,设置一个任务必须在指定的时间内完成的毫秒数

3.调用asyncContext.start方法,传递一个执行长时间任务的Runnable

4.任务完成时,通过Runnable调用asyncContext.complete方法或者asyncContext.dispatch方法

 

摘直于:https://blog.csdn.net/JavaLixy/article/details/70162488

posted @ 2018-03-26 12:24  Hello-Tiger  阅读(287)  评论(0)    收藏  举报