厉害了,Servlet3的异步处理机制

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

Servlet3发布好几年了,又有多少人知道它的新特性呢?下面简单介绍下。

主要增加了以下特性:

1、异步处理支持

2、可插性支持

3、注解支持,零配置,可不用配置web.xml

...

异步处理是什么鬼?

直接操起键盘干。

@WebServlet(name = "index", urlPatterns = { "/" }, asyncSupported = true)

public classIndexServletextends 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 voidonComplete(AsyncEvent asyncEvent) throws IOException {

asyncEvent.getSuppliedResponse().getWriter().close();

System.out.println("thread completed.");

}

public voidonError(AsyncEvent asyncEvent) throws IOException {

System.out.println("thread error.");

}

public voidonStartAsync(AsyncEvent asyncEvent) throws IOException {

System.out.println("thread started.");

}

public voidonTimeout(AsyncEvent asyncEvent) throws IOException {

System.out.println("thread timeout.");

}

};

}

}

public classIndexThreadimplements 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配置。

相关文章
|
5月前
|
存储 Java 容器
SpringMVC与Servlet3.0整合实现异步处理
SpringMVC与Servlet3.0整合实现异步处理
45 1
|
5月前
|
Java 数据库 容器
Servlet3.0中支持的异步处理
Servlet3.0中支持的异步处理
32 1
|
Java 数据库 容器
Servlet异步处理性能优化的过程
Servlet异步处理性能优化的过程
175 0
Servlet异步处理性能优化的过程
厉害了,Servlet3的异步处理机制
Servlet3发布好几年了,又有多少人知道它的新特性呢?下面简单介绍下。
92 0
|
Java 容器 调度
Servlet 异步处理
web容器会为每个请求分配一个线程,Servlet3.0新增了异步处理,解决多个线程不释放占据内存的问题。可以先释放容器分配给请求的线程与相关资源,减轻系统负担,原先释放了容器所分配线程的请求,其响应将被延后,可以在处理完成后再对客户端进行响应。
853 0
|
1月前
|
Java
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
人事管理系统【JSP+Servlet+JavaBean】(Java课设)
21 0
|
23小时前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
11 5
|
23小时前
|
Java
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
仓库管理系统【JSP+Servlet+JavaBean】(Java课设)
7 1
|
23小时前
|
Java
校园帮【JSP+Servlet+JavaBean】(Java课设)
校园帮【JSP+Servlet+JavaBean】(Java课设)
6 1