Servlet中的异步处理

Servlet 3引入了异步处理特性,允许Servlet在新的线程中执行耗时任务,避免阻塞主线程。文章介绍了如何开启异步处理、设置超时时间、使用AsyncContext以及监听器。示例代码展示了如何编写异步Servlet,包括发送进程更新和处理异步事件。
摘要由CSDN通过智能技术生成

 Servlet 3引入一项新的特性,可以让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方法


举个例子

import java.io.IOException;

import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="AsyncDispatchServlet",
urlPatterns="/asyncDispatch",
asyncSupported=true)
public class AsyncDispatchServlet extends HttpServlet {

	private static final long serialVer
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值