一.异步处理

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. 网页中多一些常见效果之伸缩菜单(主要是学习js的书写方法)

    效果如下图: 代码很简单,如下: <!doctype html> <html lang="en"> <head> <meta charse ...

  2. Azure Storage 分块上传

    概述 Azure 存储提供三种类型的 Blob:块 Blob.页 Blob 和追加 Blob.其中,块 Blob 特别适用于存储短的文本或二进制文件,例如文档和媒体文件. 块 Blob 由块组成,每个 ...

  3. TLS

    1. SSL简介 SSL(SecureSocket Layer)安全套接层,是网景公司提出的用于保证Server与client之间安全通信的一种协议,该协议位于TCP/IP协议与各应用层协议之间,即S ...

  4. unity, get Canvas Scaler referenceResolution

    需要using UnityEngine.UI; 然后就可以访问到CanvasScaler组件. float width=GetComponent<CanvasScaler> ().refe ...

  5. mac os x 使用scp取代sz rz

    在windows下,能够通过secureCRT的sz来下载文件,而用rz来上传文件.在unix/linux下则不必.由于scp命令能够完毕这项目工作. sz file替代方案为:scp usernam ...

  6. 也谈隐藏盘符等windows 的管理员的策略实现

    网上的文章都知道在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer 文件夹下有控制隐藏驱动器 ...

  7. Spring mvc 注解@ResponseBody 返回内容编码问题

    @ResponseBody 在@Controller 类方法中能够让字符串直接返回内容. 其返回处理的类是org.springframework.http.converter.StringHttpMe ...

  8. Atitit. 包厢记时系统 的说明,教程,维护,故障排查手册v2 pb25.doc

    Atitit. 包厢记时系统 的说明,教程,维护,故障排查手册v2 pb25.doc 1. 服务器方面的维护1 1.1. 默认情况下,已经在系统的启动目录下增加了 个启动项目1 1.2. 后台服务.保 ...

  9. Atitit.编程语言新特性 通过类库框架模式增强 提升草案 v3 q27

    Atitit.编程语言新特性 通过类库框架模式增强 提升草案 v3 q27 1. 修改历史2 2. 适用语言::几乎所有编程语言.语言提升的三个渠道::语法,类库,框架,ide2 2.1. 单根继承  ...

  10. Codeforces #310ACase of Matryoshkas(模拟)

    [题目链接]click here~~ [题目大意]给你n个玩具,规定仅仅能小的玩具套在大的上面.并且是规格依次递增的,比方:1->2->3,求全部玩具套完须要的最小时间花费 [解题思路]: ...