servlet3学习-AsyncContext
来源:互联网 发布:阿里云飞天八部电话 编辑:程序博客网 时间:2024/06/05 11:52
Servlet3最大的改变就是支持异步请求的处理
@WebServlet(name = "AsyncServlet", urlPatterns = { "/asyncServlet.do" }, asyncSupported = true, initParams = { @WebInitParam(name = "threadpoolsize", value = "10"), @WebInitParam(name = "timeout", value = "10000") })public class AsyncServlet extends HttpServlet { private static final long serialVersionUID = 6727834393411496060L; Logger logger = LoggerFactory.getLogger(AsyncServlet.class); ExecutorService executorService = null; protected void service(HttpServletRequest req, HttpServletResponse resp) { resp.setCharacterEncoding("GBK"); AsyncContext asyncContext = req.startAsync(); asyncContext.setTimeout(Long.parseLong(getInitParameter("timeout"))); asyncContext.addListener(new AsyncListener() { @Override public void onTimeout(AsyncEvent event) throws IOException { AsyncContext asyncContext = event.getAsyncContext(); logger.error("onTimeout called:" + event.toString()); asyncContext.getResponse().getWriter().write("TIMEOUT"); asyncContext.complete(); } @Override public void onStartAsync(AsyncEvent arg0) throws IOException { } @Override public void onError(AsyncEvent event) throws IOException { AsyncContext asyncContext = event.getAsyncContext(); logger.error("onError called:" + event.toString()); asyncContext.complete(); } @Override public void onComplete(AsyncEvent arg0) throws IOException { } }); this.enqueLongRunningTask(asyncContext); } @Override public void destroy() { executorService.shutdown(); } @Override public void init() throws ServletException { int threadpoolsize = Integer.parseInt(getInitParameter("threadpoolsize")); executorService = Executors.newFixedThreadPool(threadpoolsize); logger.info("init AsyncServlet"); } private void enqueLongRunningTask(final AsyncContext asyncContext) { executorService.execute(new Runnable() { @Override public void run() { try { int delay = new Random().nextInt(100); Thread.sleep(delay); ServletResponse response = asyncContext.getResponse(); if (response != null) { response.getWriter().write(MessageFormat.format("<h1>执行任务了in bgt_id:[{0}], delay:{1}</h1>", Thread.currentThread().getId(), delay)); asyncContext.complete(); } else { throw new IllegalStateException("Response object from context is null!"); } } catch (Exception e) { log("Problem processing task", e); e.printStackTrace(); } } }); }}
- servlet3学习-AsyncContext
- springMVC+servlet3.0异步请求之AsyncContext
- Servlet3中的AsyncContext异步和多线程异步有什么区别
- Servlet3异步asyncContext在IE(789)/chrome/ff下的差别表现(1)
- servlet3学习-annotation
- AsyncContext简介
- AsyncContext简介
- Interface AsyncContext
- AsyncContext简介
- Servlet3.1标准学习笔记
- 【Java】Servlet3规范学习笔记
- servlet3
- Servlet3
- Servlet3
- servlet3
- Java for Web学习笔记(四十):Filter(2)AsyncContext和Filter
- servlet3.0的学习(一)
- servlet3.0的学习(二)
- 迪杰斯特拉算法处理有向图中最短路径的(dijkstra)Java实现及升级
- java oracle 数据库
- WebWork UI标签
- 几本OpenCV的参考书籍
- 一些游戏引擎介绍
- servlet3学习-AsyncContext
- 2013-04-03 基础知识
- 三种网络检测举例
- Linux普通用户启动tomcat
- linux常用命令大全
- linux 删除文件硬盘大小未变化
- 利用图形使标题字体变形
- linux下cacti的安装
- 字节对齐 理解