转载自 厉害了,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的异步处理机制相关推荐

  1. java servlet异步_厉害了,Servlet3的异步处理机制

    Servlet3发布好几年了,又有多少人知道它的新特性呢?下面简单介绍下. 主要增加了以下特性: 1.异步处理支持 2.可插性支持 3.注解支持,零配置,可不用配置web.xml ... 异步处理是什 ...

  2. servlet的异步处理机制

    servlet的异步处理机制 Java servlet是大家公认的服务器端web技术的标准,包括jsp,jsf,和大量的web框架,soap,RESTful web service api ,还有新闻 ...

  3. Android Handler 异步消息处理机制的妙用 创建强大的图片载入类

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38476887 ,本文出自[张鸿洋的博客] 近期创建了一个群.方便大家交流,群号: ...

  4. EJB与JAVA BEAN_J2EE的异步消息机制

    EJB与JAVA BEAN_J2EE的异步消息机制 EJB与JAVA BEAN的区别 Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个 ...

  5. Android异步消息机制

    2019独角兽企业重金招聘Python工程师标准>>> 目录介绍 1.Handler的常见的使用方式 2.如何在子线程中定义Handler 3.主线程如何自动调用Looper.pre ...

  6. Android异步消息处理机制 全解析

    Android异步消息处理机制主要是指Handler的运行机制以及Hanlder所附带的MessageQueue和Looper的工作过程. 本文将通过分析源码(api-28)的形式,全面解析Handl ...

  7. Android多线程----异步消息处理机制之Handler

    虽然是国庆佳节,但也不能停止学习的脚步,我选择在教研室为祖国母亲默默地庆生. 关于Android的多线程知识,请参考本人之前的一篇博客:Android 多线程----AsyncTask异步任务详解 在 ...

  8. Android异步任务机制之AsycTask

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler已经在上一篇文章 异步消息处理机制(Handler . Looper .MessageQueue)源码 ...

  9. .Net Cancellable Task - APM异步超时机制扩展

    概述 .NET基于委托的APM(Asynchronous Programming Model)模式通过BeginInvoke, EndInvoke, AsyncCallback,IAsyncResul ...

最新文章

  1. LeetCode简单题之最少操作使数组递增
  2. “不传递消息、不使用邻接矩阵、在边集上训练”: 从对比链接中蒸馏自知识:非消息传递的图节点分类...
  3. unity android模糊ios清晰,Unity NGUI UI 在iOS端的锯齿、模糊、颗粒感问题
  4. 005-算法-分治法
  5. ceSetThreadPriority设置线程优先级~!
  6. 独家分享| 2019年校招大厂算法自己经历和好友经验(大疆,百度,腾讯……)
  7. Mac中常用的终端配置命令总结
  8. 华为Mate30系列前面板曝光:双曲面刘海屏再获证实
  9. python创意编程是什么_Python趣味创意编程
  10. Java VisualVM无法检测到本地java程序 的 解决办法
  11. Kubernetes 小白学习笔记(8)--kubernetes的基础概念
  12. chrome session丢失_为什么还是由这么多人搞不懂Cookie、Session、Token?
  13. 冲刺高阶ADAS市场,毫米波雷达多元侦测整合成主流趋势
  14. 【计算机网络】第四部分 网络层(21) 地址映射、差错报告和多播
  15. 软技能入门《质量》系列 -- 密切追踪
  16. uniapp实现简易的霍兰德职业倾向测评
  17. 联想T430 安装msata接口的SSD固态硬盘
  18. 小白笔记本【函数篇】(updating)
  19. Google Analytics(Google分析)与雅虎统计的对比
  20. U盘寿命软件的查询工具 Flash Drive/Card Tester

热门文章

  1. c语言case怎么输入字母,如何使用switch case语句将字母转换为数字
  2. 数据结构---判断一棵树是否是二叉搜索树
  3. Spring配置错误java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataS
  4. maximum mean discrepancy
  5. SP1043 GSS1 - Can you answer these queries I 猫树
  6. newcode Gene Tree 点分治
  7. 24dian(牛客多校第三场)
  8. Acwing 1082. 数字游戏
  9. F - Heron and His Triangle UVALive - 8206
  10. J - Just Multiplicative Inverse Gym - 102875J