`
85977328
  • 浏览: 1898739 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Servlet3.0新特性(一)异步支持

阅读更多
从大面上看,异步支持。好像只是开启了一个新的线程。但是仔细推敲可以发现以下几个点:
1.服务器是多线程的,如果来一个请求,必然会为servlet开启一个线程A。
2.ctx.start之前的业务逻辑A,和ctx.start之中的业务逻辑B
3.ctx.start启动的线程B

逻辑介绍
servlet2.0始终占有资源的情况如,线程A + 业务逻辑A + 业务逻辑B
servlet3.0是先占用线程A的资源,并执行业务逻辑A;然后在ctx.start释放线程A的资源,启动一个占用资源更少的线程B执行业务逻辑B。

在大并发的情况下servlet3.0节省的资源非常可观。尤其是以下场景
业务逻辑A:占用大量内存急需释放,但云轩不耗时
业务逻辑B:需要耗时等待,占用的资源少
这个时候使用servlet3.0,就勊把业务逻辑B用线程B处理。此时有线程B负责等待,而业务逻辑A的资源和线程A的资源以及servlet的资源就可以立即释放。

下面是一个异步的例子
package com.hmkcode;

import java.io.IOException;

import javax.servlet.AsyncContext;
import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;
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 = "asyncServlet", value = { "/async" }, asyncSupported = true)
public class AsyncServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        // 1.0 start async
        final AsyncContext ctx = req.startAsync();

        // 2.0 set the timeout
        ctx.setTimeout(0);

        // 3.0 add listener
        ctx.addListener(new AsyncListener() {
            public void onTimeout(AsyncEvent event) throws IOException {
                System.out.println("onTimeout");
            }

            public void onStartAsync(AsyncEvent event) throws IOException {
                System.out.println("onStartAsync");
            }

            public void onError(AsyncEvent event) throws IOException {
                System.out.println("onError");
            }

            public void onComplete(AsyncEvent event) throws IOException {
                System.out.println("onComplete");
            }
        });

        // 4.0 run a thread
        ctx.start(new Runnable() {
            public void run() {
                try {
                    String param = ctx.getRequest().getParameter("seq");
                    Thread.sleep(5000);
                    ctx.getResponse().getWriter().write(param);
                    System.out.println("ctx.end");
                } catch (Exception e) {
                    e.printStackTrace();
                }
                ctx.complete();
            }
        });

        System.out.println("done");
    }
}



参考文章
http://blog.csdn.net/boli1020/article/details/16113789
分享到:
评论

相关推荐

    Servlet3.0 新特性

    Servlet3.0是Java Servlet API的一个重要版本更新,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。以下将详细讲解Servlet3.0的关键特性。 1. **注解驱动的配置**: 在Servlet3.0之前,...

    Servlet3.0参考手册

    Servlet3.0是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。这份"Servlet3.0参考手册"无疑为开发者提供了全面的API参考和实用指南。 首先,Servlet3.0...

    Servlet3.0新特性,Servlet3新特性,Servlet3注解,Servlet3异步处理【蕃薯耀】

    Servlet3.0是Java Servlet API的一个重大更新,它引入了许多新特性和改进,极大地提高了开发效率和应用程序的性能。在本篇文章中,我们将深入探讨Servlet3.0的主要新特性,包括注解、异步处理、容器初始化参数以及...

    Servlet 3.0新特性——文件上传接口

    Servlet 3.0是Java EE 6规范的一部分,它引入了许多新特性,极大地提升了Web开发的效率和灵活性。其中,文件上传接口的改进是开发者们非常关注的一个亮点。在这个更新中,Servlet API提供了更简单、更高效的方式来...

    servlet 3.0新增功能详解

    本文将详细介绍 Servlet 3.0 的关键新特性,包括异步处理、新增的注解支持以及可插性支持等方面。 #### 异步处理支持 异步处理是 Servlet 3.0 中最为显著的新特性之一。这一特性解决了传统 Servlet 在处理长时间...

    Servlet3.0特性详解

    Servlet3.0是Java EE平台中的一个重要组成部分,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。以下是对Servlet3.0主要特性的详细解释: 1. **注解配置**: 在Servlet3.0中,我们可以...

    servlet3.0.jar下载

    Servlet 3.0是Java Servlet规范的一个重要版本,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。这个"javax.servlet-api-3.0.1.jar"文件是Servlet 3.0规范的API实现,包含了开发人员编写...

    Servlet3.0新特性解析01

    总结来说,Servlet3.0的新特性带来了更简洁的配置、更高效的异步处理、更灵活的过滤器和监听器注册,以及对文件上传的内置支持。这些改进都极大地推动了Java Web应用的开发效率和性能,使得开发人员能够更加专注于...

    Servlet3.0_新特性

    本文将深入探讨Servlet3.0的新特性,重点解析异步处理支持、新增注解支持以及可插性支持,这些特性极大地提升了Web应用的性能和开发者的便利性。 ### 异步处理支持 异步处理是Servlet3.0最令人瞩目的新特性之一。...

    Servlet3.0 新特性之模块化实践

    Servlet 3.0是Java EE 6规范的一部分,它引入了一系列重要的新特性,极大地改进了Web应用程序的开发和部署方式。在这个主题中,我们将深入探讨Servlet 3.0的模块化实践,以及如何利用这些特性优化开发流程。 一、...

    servlet3.0推送聊天室

    Servlet 3.0作为Servlet规范的一个重要版本,引入了许多新特性,其中最引人注目的就是异步处理和支持Web插座(WebSocket),这使得实时通信如聊天室的实现变得更加便捷。本文将深入探讨如何利用Servlet 3.0的异步...

    Servlet 3.0jar包和source包

    首先,Servlet 3.0作为Servlet API的一个版本,引入了许多新特性以提高开发效率和灵活性: 1. **注解配置**:在Servlet 3.0之前,开发者需要在web.xml文件中手动配置Servlet和过滤器。而Servlet 3.0允许使用注解...

    maven servlet 3.0 eclipse config video

    而Servlet 3.0是Java EE 6的一部分,引入了许多新功能,如注解配置、异步处理和过滤器链的增强。 **Maven配置** 1. **安装Maven**: 首先,你需要下载并安装Apache Maven到你的系统中,确保将其路径添加到系统环境...

    servlet3.0-demo

    在这个名为“servlet3.0-demo”的项目中,我们重点探讨的是如何利用Servlet 3.0的新特性进行文件上传操作,并且采用注解的方式来简化代码。 在Servlet 3.0之前,我们需要在web.xml中配置Servlet,然后通过继承...

    Jsp/Servlet3.0 ppt和代码

    【标题】"Jsp/Servlet3.0 ppt和代码"涉及的是Java服务器页面(JSP)和Servlet 3.0版本的关键技术。JSP是一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写,从而实现服务器端的动态内容生成。而Servlet是...

    servlet 3.0 jar 包综合下载

    下载的`servlet3.0jar综合`压缩包包含了实现这些特性的关键库,对于进行Java EE 3.0开发的程序员来说是必不可少的工具。在实际开发中,结合相关的框架(如Spring MVC)和其他Java EE组件,可以构建出功能强大、易...

    servlet3.0.zip

    Servlet 3.0是Java Servlet规范的一个重要版本,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。这个压缩包“servlet3.0.zip”包含两个核心的JAR文件:“javax.servlet-javadoc.jar”和...

    Servlet 3.0 - Apache Tomcat 7.0.61

    Servlet 3.0是Java Web开发中的一个重要里程碑,它带来了许多新特性和改进,使得开发者在构建Web应用程序时更加高效和灵活。Apache Tomcat 7.0.61是广泛使用的开源Servlet容器,它实现了Servlet 3.0规范,提供了稳定...

    Servlet3.0 Demo

    在这个"Servlet3.0 Demo"项目中,我们可以看到一个典型的使用Servlet3.0特性的示例。以下是关于Servlet3.0的一些关键知识点: 1. **注解配置**: Servlet3.0引入了注解配置,允许开发者无需在web.xml文件中进行...

    Servlet3.0

    一、Servlet3.0的异步支持 1. **异步Servlet**: 在Servlet 3.0之前,Servlet生命周期中的service()方法是同步执行的,这意味着每次请求都会占用一个线程直到响应完成。而Servlet 3.0引入了异步处理,允许开发者将...

Global site tag (gtag.js) - Google Analytics