厉害了,Servlet3的异步处理机制
转载自 厉害了,Servlet3的异步处理机制
Servlet3发布好几年了,又有多少人知道它的新特性呢?下面简单介绍下。
主要增加了以下特性:
1、异步处理支持
2、可插性支持
3、注解支持,零配置,可不用配置web.xml
...
异步处理是什么鬼?
直接操起键盘干。
@WebServlet(name = "index", urlPatterns = { "/" }, asyncSupported = true)
public class IndexServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
try {
PrintWriter out = resp.getWriter();
out.println("servlet started.<br/>");
out.flush();
AsyncContext asyncContext = req.startAsync();
asyncContext.addListener(getListener());
asyncContext.start(new IndexThread(asyncContext));
out.println("servlet end.<br/>");
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 异步线程结果监听
* @author javastack
* @return
*/
private AsyncListener getListener() {
return new AsyncListener() {
public void onComplete(AsyncEvent asyncEvent) throws IOException {
asyncEvent.getSuppliedResponse().getWriter().close();
System.out.println("thread completed.");
}
public void onError(AsyncEvent asyncEvent) throws IOException {
System.out.println("thread error.");
}
public void onStartAsync(AsyncEvent asyncEvent) throws IOException {
System.out.println("thread started.");
}
public void onTimeout(AsyncEvent asyncEvent) throws IOException {
System.out.println("thread timeout.");
}
};
}
}
public class IndexThread implements Runnable {
private AsyncContext asyncContext;
public IndexThread(AsyncContext asyncContext) {
this.asyncContext = asyncContext;
}
public void run() {
try {
Thread.sleep(5000);
PrintWriter out = asyncContext.getResponse().getWriter();
out.println("hello servlet3.<br/>");
out.flush();
asyncContext.complete();
} catch (Exception e) {
e.printStackTrace();
}
}
}
访问localhost:8080/test
页面首先输出
servlet started.
servlet end.
过了5秒后再输出
hello servlet3.
可以看出servlet立马返回了,但没有关闭响应流,只是把response响应传给了线程,线程再继续输出,我们可以将比较费资源消耗时间的程序放到异步去做,这样很大程序上节省了servlet资源。
Springmvc3.2开始也加入了servlet3异步处理这个特性,有兴趣的同学可以去研究下。
从上面的servlet注解也可以看出来,servlet3完全解放了web.xml配置,通过注解可以完全代替web.xml配置。
厉害了,Servlet3的异步处理机制相关推荐
- java servlet异步_厉害了,Servlet3的异步处理机制
Servlet3发布好几年了,又有多少人知道它的新特性呢?下面简单介绍下. 主要增加了以下特性: 1.异步处理支持 2.可插性支持 3.注解支持,零配置,可不用配置web.xml ... 异步处理是什 ...
- servlet的异步处理机制
servlet的异步处理机制 Java servlet是大家公认的服务器端web技术的标准,包括jsp,jsf,和大量的web框架,soap,RESTful web service api ,还有新闻 ...
- Android Handler 异步消息处理机制的妙用 创建强大的图片载入类
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 近期创建了一个群.方便大家交流,群号: ...
- EJB与JAVA BEAN_J2EE的异步消息机制
EJB与JAVA BEAN_J2EE的异步消息机制 EJB与JAVA BEAN的区别 Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个 ...
- Android异步消息机制
2019独角兽企业重金招聘Python工程师标准>>> 目录介绍 1.Handler的常见的使用方式 2.如何在子线程中定义Handler 3.主线程如何自动调用Looper.pre ...
- Android异步消息处理机制 全解析
Android异步消息处理机制主要是指Handler的运行机制以及Hanlder所附带的MessageQueue和Looper的工作过程. 本文将通过分析源码(api-28)的形式,全面解析Handl ...
- Android多线程----异步消息处理机制之Handler
虽然是国庆佳节,但也不能停止学习的脚步,我选择在教研室为祖国母亲默默地庆生. 关于Android的多线程知识,请参考本人之前的一篇博客:Android 多线程----AsyncTask异步任务详解 在 ...
- Android异步任务机制之AsycTask
在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler已经在上一篇文章 异步消息处理机制(Handler . Looper .MessageQueue)源码 ...
- .Net Cancellable Task - APM异步超时机制扩展
概述 .NET基于委托的APM(Asynchronous Programming Model)模式通过BeginInvoke, EndInvoke, AsyncCallback,IAsyncResul ...
最新文章
- LeetCode简单题之最少操作使数组递增
- “不传递消息、不使用邻接矩阵、在边集上训练”: 从对比链接中蒸馏自知识:非消息传递的图节点分类...
- unity android模糊ios清晰,Unity NGUI UI 在iOS端的锯齿、模糊、颗粒感问题
- 005-算法-分治法
- ceSetThreadPriority设置线程优先级~!
- 独家分享| 2019年校招大厂算法自己经历和好友经验(大疆,百度,腾讯……)
- Mac中常用的终端配置命令总结
- 华为Mate30系列前面板曝光:双曲面刘海屏再获证实
- python创意编程是什么_Python趣味创意编程
- Java VisualVM无法检测到本地java程序 的 解决办法
- Kubernetes 小白学习笔记(8)--kubernetes的基础概念
- chrome session丢失_为什么还是由这么多人搞不懂Cookie、Session、Token?
- 冲刺高阶ADAS市场,毫米波雷达多元侦测整合成主流趋势
- 【计算机网络】第四部分 网络层(21) 地址映射、差错报告和多播
- 软技能入门《质量》系列 -- 密切追踪
- uniapp实现简易的霍兰德职业倾向测评
- 联想T430 安装msata接口的SSD固态硬盘
- 小白笔记本【函数篇】(updating)
- Google Analytics(Google分析)与雅虎统计的对比
- U盘寿命软件的查询工具 Flash Drive/Card Tester
热门文章
- c语言case怎么输入字母,如何使用switch case语句将字母转换为数字
- 数据结构---判断一棵树是否是二叉搜索树
- Spring配置错误java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataS
- maximum mean discrepancy
- SP1043 GSS1 - Can you answer these queries I 猫树
- newcode Gene Tree 点分治
- 24dian(牛客多校第三场)
- Acwing 1082. 数字游戏
- F - Heron and His Triangle UVALive - 8206
- J - Just Multiplicative Inverse Gym - 102875J