servlet 3.0 的新特性之三对异步处理的支持
一.异步处理
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 : */ @WebServlet(urlPatterns="/AServlet", asyncSupported=true) public // public static void main(String[] args) { // System.out.println("hello"); // new Thread() { // public void run() { // // } // }.start(); // // System.out.println("不知道上面的线程是否结束!"); // } public throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8");
// 支持IE!如果输出不足512B,没有异步效果! for(int resp.getWriter().print("a"); } resp.getWriter().flush();
/* * 1. 得到异步上下文对象 */ final AsyncContext ac = req.startAsync(req, resp);
/* * 2. 给上下文对象一个Runnable对象,让它执行这个任务 */ ac.start(new Runnable() { public println("现在马上开始<br/>", resp); sleep(2000); for(char println(c+"", resp); sleep(250); }
/** * 通知Tomcat我们已经执行结束了!,如果不告诉tomcat * tomcat依旧会保持和浏览器的接连一会儿,不会立即断开 */ ac.complete(); } }); }
//想客户端页面打印 public try { resp.getWriter().print(text); resp.getWriter().flush(); } catch (IOException e) { } }
//将 sleep 方法提取处理,单独处理异常 public try { Thread.sleep(ms); } catch (InterruptedException e) { } } } |
servlet 3.0 的新特性之三对异步处理的支持的更多相关文章
- servlet3.0 的新特性之二注解代替了web.xml配置文件
servlet3.0 的新特性: 注解代替了 web.xml 文件 支持了对异步的处理 对上传文件的支持 1.注解代替了配置文件 1.删除了web.xml 文件 2. 在Servlet类上添加@Web ...
- php5.3到php7.0.x新特性介绍
<?php /*php5.3*/ echo '<hr>'; const MYTT = 'aaa'; #print_r(get_defined_constants()); /* 5.4 ...
- 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 · 引入访问方法的限 ...
- NodeJS 框架 Express 从 3.0升级至4.0的新特性
NodeJS 框架 Express 从 3.0升级至4.0的新特性 [原文地址:√https://scotch.io/bar-talk/expressjs-4-0-new-features-and-u ...
- 相比于python2.6,python3.0的新特性。
这篇文章主要介绍了相比于python2.6,python3.0的新特性.更详细的介绍请参见python3.0的文档. Common Stumbling Blocks 本段简单的列出容易使人出错的变动. ...
- MySQL 8.0 InnoDB新特性
MySQL 8.0 InnoDB新特性 1.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe,metadata管理更完善 2.快速在线加新列(腾讯互娱DBA团队贡献) 3. ...
- 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 ...
- [PHP] 从PHP 5.6.x 移植到 PHP 7.0.x新特性
从PHP 5.6.x 移植到 PHP 7.0.x 新特性: 1.标量类型声明 字符串(string), 整数 (int), 浮点数 (float), 布尔值 (bool),callable,array ...
- C# 6.0/7.0 的新特性
转眼C#语言都已经迭代到7.0版本了,很多小伙伴都已经把C# 7.0 的新特性应用到代码中了,想想自己连6.0的新特性都还很少使用,今天特意搜集了一下6.0和7.0的一些新特性,记录一下,方便查阅. ...
随机推荐
- 由"永恒之蓝"病毒而来的电脑知识科普
永恒之蓝病毒事件: 继英国医院被攻击,随后在刚刚过去的5月12日晚上20点左右肆虐中国高校的WannaCry勒索事件,全国各地的高校学生纷纷反映,自己的电脑遭到病毒的攻击,文档被加密,壁纸遭到篡改,并 ...
- Codeforces Round #297 (Div. 2) 525C Ilya and Sticks(脑洞)
C. Ilya and Sticks time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- java中过滤四字节字符
private static final String FOUR_BYTE_FILTER = "[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]& ...
- PLSQL快捷键设置
1.在PL/SQL Developer中编写sql语句时,如果无法自动提示字段那是一件痛苦的事情,工作效率又低,在此演示下如何在PL/SQL Developer工具中自动提示字段,让开发者省时又省心, ...
- Doing Homework again(杭电1789)
Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(二)
本文继<Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)>,接着讲述MapReduce作业在MRAppMaster上处理总流程,继上篇讲到作业初始化之后的作 ...
- finsh初步
一. finsh在RT-Thread中被设计成一个独立的线程,它试图从外部设备中获得用户的输入,然后对用户命令进行解析执行. 正确使用finsh需要一个关联过程: rt_hw_board_init() ...
- Fantasy of a Summation n个数,k层重复遍历相加。求它的和%mod的值;推导公式+快速幂
/** 题目:Fantasy of a Summation 链接:https://vjudge.net/contest/154246#problem/L 题意:n个数,k层重复遍历相加.求它的和%mo ...
- uasy-datetimebox的使用
最近整理Easyui控件的时候,对Easyui的DateBox控件和DateTimeBox控件进行了梳理,而我之所以将EasyUI的DateBox控件和DateTimeBox控件放在一起,归为一类,是 ...
- SQL2008删除大量数据
常见问题:工作中数据库难免产生大量的日志,而用户可能关心的只有最近一个月左右的,这些日志占用了服务器磁盘,还可能影响了服务运行效率.甚至在数据库迁移时更因为体积而带来巨大麻烦. 那么,在需要时,删除不 ...