厉害了,Servlet3的异步处理机制
发布日期:2021-06-30 12:45:05
浏览次数:2
分类:技术文章
本文共 2484 字,大约阅读时间需要 8 分钟。
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配置。
推荐去我的博客阅读更多:
1.
2.
3.
4.
觉得不错,别忘了点赞+转发哦!
转载地址:https://javastack.blog.csdn.net/article/details/105842484 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年05月06日 04时42分49秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux内存的寻址方式
2019-04-30
how2heap-double free
2019-04-30
how2heap-fastbin_dup_consolidate
2019-04-30
fmt在bss段(neepusec_easy_format)
2019-04-30
tf keras SimpleRNN源码解析
2019-04-30
MyBatisPlus简单入门(SpringBoot)
2019-04-30
攻防世界web进阶区web2详解
2019-04-30
xss-labs详解(上)1-10
2019-04-30
xss-labs详解(下)11-20
2019-04-30
攻防世界web进阶区ics-04详解
2019-04-30
sql注入总结学习
2019-04-30
Python 之 histogram直方图
2019-04-30
Python实现决策树 Desision Tree & 可视化
2019-04-30
决策树 Decision tree
2019-04-30
nominal和ordinal & 数据处理中四种基本数据类型
2019-04-30
Trie树(字典树)
2019-04-30
COMP7404 Machine Learing——ROC
2019-04-30
MATLAB与CUDA
2019-04-30
Linux png转jpg (convert命令)
2019-04-30