Spring Servlet3 扩展模块笔记(二)

2014-11-24 10:55:39 · 作者: · 浏览: 1
PI " +
"or by adding \"true\" to servlet and " +
"filter declarations in
web.xml.");//判断请求是否支持异步处理
Assert.state(!isAsyncComplete(), "Async processing has already completed");
if (isAsyncStarted()) {//判断状态是否已经启动异步处理模式
return;
}
this.asyncContext = getRequest().startAsync(getRequest(), getResponse());
this.asyncContext.addListener(this);
if (this.timeout != null) {
this.asyncContext.setTimeout(this.timeout);
}
}
public void dispatch() {
Assert.notNull(this.asyncContext, "Cannot dispatch without an AsyncContext");
this.asyncContext.dispatch();
}
// ---------------------------------------------------------------------
// Implementation of AsyncListener methods
// ---------------------------------------------------------------------
public void onStartAsync(AsyncEvent event) throws IOException {
}
public void onError(AsyncEvent event) throws IOException {
}
public void onTimeout(AsyncEvent event) throws IOException {
for (Runnable handler : this.timeoutHandlers) {
handler.run();
}
}
public void onComplete(AsyncEvent event) throws IOException {
for (Runnable handler : this.completionHandlers) {
handler.run();
}
this.asyncContext = null;
this.asyncCompleted.set(true);//设置异步处理已经完成
}
NoSupportAsyncWebRequest.java
不支持异步处理模式的web请求
DeferredResultProcessingInterceptor.java
DeferredResult处理过程拦截器
在start async前,超时后/异步处理完成后/网络超时后触发拦截
DeferredResultProcessingInterceptorAdapter.java
抽象类实现DeferredResultProcessingInterceptor,做空实现
DeferredResultInterceptorChain.java
调用DeferredResultProcessingInterceptor的辅助类
DeferredResult.java
递延结果,在两个线程中传递的对象结果
实现Comparable接口以保证加入PriorityQueue队列的正确顺序
CallableProcessingInterceptor.java
Callable拦截器
CallableProcessingInterceptorAdapter.java
抽象类实现CallableProcessingInterceptor接口,空实现
CallableInterceptorChain.java
调用CallableProcessingInterceptor的辅助类
TimeoutCallableProcessingInterceptor.java
继承CallableProcessingInterceptorAdapter
实现超时处理方法
TimeoutDeferredResultProcessingInterceptor.java
继承DeferredResultProcessingInterceptorAdapter
实现超时处理方法
WebAsyncTask.java
web异步任务
包含一个Callable类,一个超时时间,一个任务执行着或名字
WebAsyncUtils.java
实现getAsyncManager
实现createAsyncWebRequest
WebAsyncManager.java
对Callables和DeferredResults启动的管理,包括拦截器的注入,Excutor的注入等
异步处理的入口类