一.异步处理

1. 什么是异步处理

原来,在服务器没有结束响应之前,浏览器是看不到响应内容的!只有响应结束时,浏览器才能显示结果!

现在异步处理的作用:在服务器开始响应后,浏览器就可以看到响应内容,不用等待服务器响应结束!

 

2. 实现异步的步骤

* 得到AsyncContext,它异步上下文对象

AsyncContext ac = request.startAsync(request,response);

* 给上下文一个Runnable对象,启动它!(给上下文一个任务,让它完成!)

ac.start(new Runnable() {

public void run() {

...

}

});

注意:

* @WebServlet(urlPatterns="/AServlet", asyncSupported=true) //激活异步处理

* resp.setContentType("text/html;charset=utf-8"); //解决页面中文显示乱码问题

* IE如果不能正常输出,这说明响应体大小不足512B,那你需要多输出点废话!

* AsyncContext#complete():通知Tomcat我们异步线程已经执行结束了!这让Tomcat才会及时的断开与浏览器的连接!

实例:

Aservlet.java

/**

* 添加WebServlet注解

*asyncSupported=true :
表示激活异步处理请求,servlet
默认是关闭的

*/

@WebServlet(urlPatterns="/AServlet", asyncSupported=true)

public
class
AServlet
extends HttpServlet {

//    public static void main(String[] args) {

//        System.out.println("hello");

//        new Thread() {

//            public void run() {

//                

//            }

//        }.start();

//        

//        System.out.println("不知道上面的线程是否结束!");

//    }

    public
void doGet(final HttpServletRequest req, final HttpServletResponse resp)

            throws ServletException, IOException {

        resp.setContentType("text/html;charset=utf-8");

        

    // 支持IE!如果输出不足512B,没有异步效果!

        for(int
i = 0; i <= 512; i++) {

            resp.getWriter().print("a");

        }

        resp.getWriter().flush();

        

        /*

         * 1. 得到异步上下文对象

         */

        final AsyncContext ac = req.startAsync(req, resp);

        

        /*

         * 2. 给上下文对象一个Runnable对象,让它执行这个任务

         */

        ac.start(new Runnable() {

            public
void run() {

                println("现在马上开始<br/>", resp);

                sleep(2000);

                for(char
c = 'A'; c <= 'Z'; c++) {

                    println(c+"", resp);

                    sleep(250);

                }

                

                /**

                 * 通知Tomcat我们已经执行结束了!,如果不告诉tomcat
,那么请求处理完成之后,

                 * tomcat依旧会保持和浏览器的接连一会儿,不会立即断开

                 */

                ac.complete();

            }

        });

    }

    

    //想客户端页面打印
信息

    public
void println(String text, HttpServletResponse resp) {

        try {

            resp.getWriter().print(text);

            resp.getWriter().flush();

        } catch (IOException e) {

        }

    }

    

    //将 sleep 方法提取处理,单独处理异常

    public
void sleep(long
ms) {

        try {

            Thread.sleep(ms);

        } catch (InterruptedException e) {

        }

    }

}

 

                

servlet 3.0 的新特性之三对异步处理的支持的更多相关文章

  1. servlet3.0 的新特性之二注解代替了web.xml配置文件

    servlet3.0 的新特性: 注解代替了 web.xml 文件 支持了对异步的处理 对上传文件的支持 1.注解代替了配置文件 1.删除了web.xml 文件 2. 在Servlet类上添加@Web ...

  2. php5.3到php7.0.x新特性介绍

    <?php /*php5.3*/ echo '<hr>'; const MYTT = 'aaa'; #print_r(get_defined_constants()); /* 5.4 ...

  3. paip.php 5.0 5.3 5.4 5.5 -6.0的新特性总结与比较

    paip.php 5.0 5.3 5.4  5.5 -6.0的新特性总结与比较 PHP5的新特性 2 · 对象的参照过渡是默认的(default) 3 · 引入访问属性的限制 3 · 引入访问方法的限 ...

  4. NodeJS 框架 Express 从 3.0升级至4.0的新特性

    NodeJS 框架 Express 从 3.0升级至4.0的新特性 [原文地址:√https://scotch.io/bar-talk/expressjs-4-0-new-features-and-u ...

  5. 相比于python2.6,python3.0的新特性。

    这篇文章主要介绍了相比于python2.6,python3.0的新特性.更详细的介绍请参见python3.0的文档. Common Stumbling Blocks 本段简单的列出容易使人出错的变动. ...

  6. MySQL 8.0 InnoDB新特性

    MySQL 8.0 InnoDB新特性 1.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe,metadata管理更完善 2.快速在线加新列(腾讯互娱DBA团队贡献) 3. ...

  7. Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性

    Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性 1.1. Jquery1.12  jQuery 2.2 和 1.12 新版本发布 - OPEN资讯.h ...

  8. [PHP] 从PHP 5.6.x 移植到 PHP 7.0.x新特性

    从PHP 5.6.x 移植到 PHP 7.0.x 新特性: 1.标量类型声明 字符串(string), 整数 (int), 浮点数 (float), 布尔值 (bool),callable,array ...

  9. C# 6.0/7.0 的新特性

    转眼C#语言都已经迭代到7.0版本了,很多小伙伴都已经把C# 7.0 的新特性应用到代码中了,想想自己连6.0的新特性都还很少使用,今天特意搜集了一下6.0和7.0的一些新特性,记录一下,方便查阅. ...

随机推荐

  1. mac系统中搭建apache+mysql+php的开发环境,安装mysql后,登录报错:mac ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

    php新手在mac系统中搭建apache+mysql+php的开发环境(按照这篇博客来操作的:http://my.oschina.net/joanfen/blog/171109?fromerr=xvC ...

  2. vmware安装问题:Microsoft Runtime DLL安装程序未能完成安装

    下载vmware station 12 pro后安装,发现有以下问题:   解决方法: 在提示这个页面的时候,在运行中输入: %temp%   在打开来的文件窗口中,找到末尾为 ~setup的文件夹, ...

  3. ST股福音:涨停潮开始! 最全ST摘帽股汇总!

    本周ST股摘帽行情提前预演,ST股上演涨停潮,部分ST股甚至出现连续涨停.云财经在三季报披露之前曾经做过一期ST股摘帽分析,在三季报正式披 露完毕后,以及部分ST公司公布了2015年年报预告,ST股能 ...

  4. 获取Oracle隐含參数信息

    Oracle数据库的初始化參数.主要来源于两个Oracle内部数据字典表:X$KSPPCV和X$KSPPI通常我们查询的V$Parameter视图或使用show parameter命令都是就来源于这两 ...

  5. testng入门_单元测试

    1.定义TestNG 的配置文件 <test name="exampletest1">        <classes> <!--1.只执行com.t ...

  6. 设备模型的uevent机制

    内核模块的热插拔事件的通知基于uevent机制. 当kobject的状态发生改变(如,add, remove等)时,会通知用户空间,用户空间接收到事件通知后可以做相应的处理.uevent把事件上报给用 ...

  7. python模块学习之logging

    filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中. filemode:文件打开方式,在指定了filename时使用这个 ...

  8. Unity3d中使用自带动画系统制作下雨效果(一)

    之前看了以前版本的unity3d demo AngryBots ,觉得里面的下雨效果不错,刚好前段时间学习了,写出来跟大家分享下,直接开始. 使用自带动画系统制作下雨效果. 先制作下雨的雨滴涟漪. 步 ...

  9. 第一百七十四节,jQuery,Ajax进阶

    jQuery,Ajax进阶 学习要点: 1.加载请求 2.错误处理 3.请求全局事件 4.JSON 和 JSONP 5.jqXHR 对象 在 Ajax 课程中,我们了解了最基本的异步处理方式.本章,我 ...

  10. 用Java实现一些常见的问题

    八皇后 public class EightQueen { private static final int ROW = 4; private static final int COL = 4; pr ...