java servlet异步_厉害了,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.
");
out.flush();
AsyncContext asyncContext = req.startAsync();
asyncContext.addListener(getListener());
asyncContext.start(new IndexThread(asyncContext));
out.println("servlet end.
");
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.
");
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配置。
推荐去我的博客:
觉得不错,别忘了点赞+转发哦!
java servlet异步_厉害了,Servlet3的异步处理机制相关推荐
- java servlet类_[Java教程]与Servlet相关的类
[Java教程]与Servlet相关的类 0 2017-08-31 17:00:15 有4个有关的类,通过servlet可以获得其中的三个,然后通过ServletConfig间接获取ServletCo ...
- java双向涡轮_厉害了!首座涡轮式全互通立交,双向16车道,徐州这个地方是要上天啊!...
重磅消息! 列入今年重点工程的城东大道高架终于有实质进展了!环评开始公示!即将开工建设!未来从东区进出城.去高铁站,再也不用担心堵车啦! 昨天(11月24日),徐环保局终于公示了城东大道的环评报告,从 ...
- 高并发 python socket send 异步_在Python中使用异步Socket编程性能测试
ok,首先写一个python socket的server段,对开放三个端口:10000,10001,10002.krondo的例子中是每个server绑定一个端口,测试的时候需要分别开3个shell, ...
- python celery异步_【Python】Celery异步处理
django.celery.django-celery.kombu.amqp最好统一pip安装,我用django 1.8.6和较低版本celery时候出现报错: /usr/local/lib/pyth ...
- 厉害了,Servlet3的异步处理机制
转载自 厉害了,Servlet3的异步处理机制 Servlet3发布好几年了,又有多少人知道它的新特性呢?下面简单介绍下. 主要增加了以下特性: 1.异步处理支持 2.可插性支持 3.注解支持,零配置 ...
- java flex 上传文件_使用Flex和java servlet上传文件
资源都是来自网上.本实例将展示使用Flex和java servlet上传文件. 事前准备就是到http://commons.apache.org 下载common-fileupload-1.1.1.j ...
- java 异步_浅谈Java异步编程
本文来自网易云社区. Java异步编程引言 Java的异步编程其实是一个充分利用计算机CPU资源,不想让主程序阻塞在某个长时间运行的任务上,这类耗时的任务可以是IO操作.远程调用以及高密度计算任务.如 ...
- java.servlet js,调用servlet方法
<深入剖析Tomcat>一2.1 javax.servlet.Servlet接口 2.1 javax.servlet.Servlet接口 Servlet编程需要使用到javax.servl ...
- Tomcat从socket到java Servlet
整体架构图 一. 启动阶段 BootStrap的main方法加载server.xml配置文件,封装成Server,Service,Connector,Engine等java对象 Server初始化== ...
最新文章
- 使用nc检测udp端口是否可以正常通讯
- MySQL简单快速入门 (三)高级查询——JEPLUS软件快速开发平台
- LeetCode Longest Palindromic Substring
- docker安装部署_有关docker安装yearning和部署inception(闭源)
- python读取音频文件_python 读取wav 音频文件的两种方式
- Android Studio 教程(1)----配置
- (原创)使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之五...
- wordpress 更新以及下载插件:wordpress 安装失败:无法创建目录
- Laravel 5.1 文档攻略 —— Eloquent Collection
- 【雷达通信】基于matlab GUI雷达脉冲压缩【含Matlab源码 303期】
- html5变动标签新写法,HTML5新增的标签和废除的标签
- 双人游戏根据胜负关系匹配
- 【笔记】感谢《梦幻模拟战》的Unity+Spine资源,同人模式开启
- java opennlp_如何在Java中使用OpenNLP?
- pycharm怎么安装pygame_Python实战:运用Pygame编写Flappy bird小游戏,我能玩一天
- 飞刀哥移植UC/OS-II到LPC1788(ARM Cortex-M3)的步骤
- OSChina 周六乱弹 —— 感谢女装红薯开办了这个网站
- SQL:OUTER JOIN用法详解
- MinGW 和 MSYS 的手动安装与环境配置
- 数睿数据深度 | 中国软件网对话数睿数据总裁刘超:深挖数据驱动、企业级无代码