引自:http://www.iteye.com/problems/101332
AsyncContext不是让你异步输出,而是让你同步输出,但是解放服务器端的线程使用,使用AsyncContext的时候,对于浏览器来说,他们是同步在等待输出的,但是对于服务器端来说,处理此请求的线程并没有卡在那里等待,则是把当前的处理转为线程池处理了,关键就在于线程池,服务器端会起一个线程池去服务那些需要异步处理的请求,而如果你自己每次请求去起一个线程处理的话,这就有可能会耗大量的线程。
final AsyncContext asyncContext = request.getAsyncContext();
//添加监听器监听异步的执行结果
asyncContext.addListener(new AsyncListener() {
@Override
public void onComplete(AsyncEvent event) throws IOException {
//在这里处理正常结束的逻辑
}
@Override
public void onTimeout(AsyncEvent event) throws IOException {
//在这里处理超时的逻辑
}
@Override
public void onError(AsyncEvent event) throws IOException {
//在这里处理出错的逻辑
}
@Override
public void onStartAsync(AsyncEvent event) throws IOException {
//在这里处理开始异步线程的逻辑
}
});
//设置超时的时间,到了时间以后,会回调onTimeout的方法
asyncContext.setTimeout(10000L);
//在这里启动,传入一个Runnable对象,服务器会把此Runnable对象放在线程池里面执行
asyncContext.start(new Runnable() {
@Override
public void run() {
//在这里做耗时的操作,如果做完,则调用complete方法通知回调,异步处理结束了
asyncContext.complete();
}
});
分享到:
相关推荐
Servlet3.0是Java EE平台中的一个重要更新,它引入了许多新特性,其中一项重大改进就是对异步处理的支持。这项特性使得服务器可以处理长时间运行的任务,而不会阻塞其他请求,提高了系统的响应能力和效率。本实例...
Servlet3引入了异步处理,允许Servlet在接收到请求后返回控制权给容器,而不是立即生成响应。这时,Servlet可以在后台继续执行任务,而主线程可以释放去处理其他请求。这种模式显著提高了服务器的并发处理能力,因为...
异步Servlet是Java Servlet API的一个重要特性,它允许在Servlet容器中执行异步处理,显著提高了Web应用程序的性能和响应性。在传统的Servlet中,请求处理是同步的,即Servlet容器接收请求,调用Servlet的service...
在Java的Servlet 3.0版本中,引入了一项重要的特性——异步处理(Asynchronous Processing),这极大地提升了Web应用程序的性能和响应性。本文将深入探讨这一特性,以及如何利用它来实现异步调用,并注册监听器来...
在现代Web应用开发中,异步处理已经成为提升用户体验的关键技术之一。本文将深入探讨如何使用Spring、Ajax和Servlet实现登录名存在的异步检查,从而在用户输入时实时验证用户名是否已被占用,避免用户等待服务器返回...
在当前信息化时代,Java Web应用的性能和用户体验显得尤...本文将详细介绍在Java Web应用中实现异步处理的方法,包括使用AJAX、WebSocket、Servlet异步处理和Server-Sent Events(SSE)等技术,并提供详细的代码示例。
在本篇文章中,我们将深入探讨Servlet3.0的主要新特性,包括注解、异步处理、容器初始化参数以及模块化部署等。 首先,Servlet3.0最显著的特征之一是广泛使用注解(Annotation)。传统的Servlet配置通常需要在web....
Servlet异步处理流程图.png 接收到request请求之后,由tomcat工作线程从HttpServletRequest中获得一个异步上下文AsyncContext对象,然后由tomcat工作线程把AsyncContext对象传递给业务处理线程,同时tomcat工作线程...
9. **Servlet异步处理** - Servlet 3.0引入了异步处理能力,允许Servlet在处理请求时不阻塞线程,提高服务器并发性能。 10. **Web应用部署** - 创建WAR文件(Web Application Archive)打包Web应用,便于在各种...
同时,Servlet 3.1 规范支持异步处理请求,允许 Servlet 异步处理请求,无需一直占用线程直到响应返回,提高了服务器的并发处理能力。 最后,作为规范的一部分,也提供了一些最佳实践和设计模式,以帮助开发者有效...
8. **AsyncContext**:在Servlet 3.0及以上版本中引入,允许Servlet异步处理请求,提高了性能和响应性。 9. **WebSocket API**:虽然不是Servlet API的核心部分,但Servlet 3.1开始支持WebSocket协议,提供了一种在...
在使用 Spring Boot 实现异步请求时,需要在 Servlet 中添加 asyncSupported = true 属性,以启用异步处理。在 Filter 中也需要添加 asyncSupported = true 属性,以便在 Filter 中也能启用异步处理。 在 Spring ...
Java Servlet 3.0 异步处理问题 Java Servlet 3.0 异步处理问题主要介绍了 Java 中 Servlet 3.0 异步处理的原理以及遇到的问题分析。Servlet 3.0 开始提供了 AsyncContext 用来支持异步处理请求,那么异步处理请求...
xt.complete(); // 结束异步上下文 } catch (IllegalStateException e) { ...为了充分利用这些特性,你需要确保你的应用服务器支持Servlet 3.0或3.1规范,同时在编写Servlet时适配这些新特性,以实现高效的异步处理。
最后,将这个Servlet部署到服务器,比如Tomcat,当jQuery发起请求时,Servlet会接收到请求,处理后返回数据,jQuery的success回调函数接收到数据并更新页面,实现异步数据获取和显示。 总的来说,jQuery和Servlet的...
而`servlet-async-*`可能包含与Servlet异步处理相关的代码示例;`tomcat-start`可能是启动Tomcat服务器的脚本或配置。 6. **实践应用**: 学习这个主题,你可以深入理解如何在Java Web应用中利用异步处理提高性能...
其次,Spring MVC提供了对Servlet异步处理的封装,通过`@Async`注解可以标记一个方法为异步执行。这个注解通常配合`@EnableAsync`在配置类上使用,以启用Spring的异步任务执行器。Spring MVC会自动将异步方法的结果...
而Servlet3异步处理则改变了这种模式,请求处理可以被挂起,释放线程去处理其他请求,当后台任务完成后再回调,这样就避免了线程的长时间占用。 要开始使用Servlet3的异步请求,首先你需要一个支持Servlet 3.0及...
3. **Servlet的异步处理**:在Servlet 3.0及以上版本中,引入了异步处理功能。通过`AsyncContext`,Servlet可以在完成I/O操作后通知线程,而不是立即返回响应。这样,服务器可以处理其他请求,而不会因等待某个长...
3-6Tomcat处理源码实现与异步Servlet源码实现(1).mp4