`
85977328
  • 浏览: 1874633 次
  • 性别: 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新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解Servlet3.0新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解

    servlet 3.0新增功能详解

    Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础...本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为读者顺利向新版本过渡扫清障碍

    JavaEE 6 Servlet 3.0 中的新特性

    JavaEE 6Servlet 3.0 中的新特性 • 易于开发和部署 • 模块化web.xml • 动态配置 • 异步Servlet • Servlet 3.0 — 易于开发 – 主要关注点 • 增强了API 以便使用SE 5 中新的语言特性 – 例如:批注、泛型...

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

    NULL 博文链接:https://fanshuyao.iteye.com/blog/1688318

    Apache服务器tomcat7.0.12最新版,加入probe线程监视

    TOMCAT 7新特性  1 使用随机数去防止跨站脚本攻击。  2 改变了安全认证中的jessionid的机制,防止session攻击。  3 内存泄露的侦测和防止  4 在war文件外使用别名去存储静态内容。  TOMCAT 7的增强...

    annotaction

    1. 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才 结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己 在不...

    apache-tomcat-7.0.28

     5 对Servlet 3.0,JSP 2.2和JSP-EL 2.2的支持  6 更容易将Tomcat内嵌到应用去中去,比如JBoss  7 异步日志记录  根据Mark Thomas,Tomcat 7委员会的经理的说法,Tomcat 7最显著的三个特征是Servlet 3.0,...

    Tomcat 8 软件及源码

    5. JSP 2.3支持:Tomcat 8 支持最新的JSP 2.3规范,包括对新特性和改进的支持,如EL 3.0、标签文件的静态引入等。 6. HTTP/2支持:Tomcat 8 支持HTTP/2协议,可以提供更快的页面加载速度和更高的性能。 7. NIO2支持...

    tomcat-8.0.21

    Tomcat8新版本特性: 1.支持servlet3.1, jsp 2.3, el表达式3.0 and Java WebSocket 1.0. 2.默认http与ajp请求实现non-blocking技术,即NIO技术。 3.多个应用发布的时候可以先打成jar包,然后打成一个总的war发布。...

    通俗易懂的Spring注解驱动开发教程(含配套资料)

    本教程为授权出品教程 《Spring注解驱动开发》是一套帮助我们深入了解Spring原理... 3).web原理 1).Servlet3.0标准新增特性 2).异步请求相关 本视频使用了maven构建程序,需要同学们有对Spring.SpringMVC的基本

    Spring.3.x企业应用开发实战(完整版).part2

     Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...

    Spring3.x企业应用开发实战(完整版) part1

     Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...

Global site tag (gtag.js) - Google Analytics