标签:异步处理
一个Servlet的工作流程是:首先,Servlet接收到请求后,需要对请求修改的数据进行一些预处理。接着调用业务接口的某些方法,以完成业务处理。最后根据处理结果提交响应。至此,Servlet线程结束。在此过程中,如果任何一个任务没有结束,Servlet线程就处于阻塞状态,知道业务方法执行完毕。对于较大的应用,很容易造成程序性能的降低。
Servlet3.0针对这一问题做出了突破性的工作,现在通过使用Servlet3.0的异步处理机制可以将之前的Servlet处理流程调整为以下过程。
首先,Servlet接受到请求之后,可能需要对请求携带的数据进行预处理
接着,Servlet线程将请求转交给一个异步线程来执行业务处理,线程本身返回至容器,此时Servlet还没有生成响应数据,异步线程处理完业务之后,可以直接生成响应数据,或者将请求继续转发给其他的Servlet。这样,Servlet线程不再是一直处于阻塞状态以等待业务逻辑的处理,而是启动异步之后直接返回。
异步处理机制可以应用于Servlet和过滤器两种组件,由于异步处理的工作模式与普通工作模式有本质的区别,在默认的情况下,并没有开启异步处理特性,如果希望使用该特性,则必须按如下的方法启用:
@WebServlet和@WebFilter注释提供了asyncSupported属性,默认该属性的取值为false,要启用异步处理支持,只需将该属性的值设置为true即可。以@WebFilter为例,其配置方式如下:
范例:
@WebFilter和@WebFilter注释实现异步处理
@WebFilter(urlPatterns=”/chFilter”,asyncSupported = true)
Public class DemoFilter implements Filter{
}
如果选择在web.xml中对Servlet或者过滤器进行配置,可以在Servlet3.0为<servlet>和<filter>标签中增加<async-supported>子标签,该标签的默认取值为false,要启用异步处理支持,则将其设置为true即可。
范例:
在web.xml中配置异步处理
<servlet>
<servlet-name>CharServlet</servlet-name>
<servlet-class>footmark.servlet.CharServlet</servlet-class>
<async-supported>true</async-supported>
</servlet>
标签:异步处理
原文地址:http://blog.csdn.net/yaguanzhou2014/article/details/41663001