Spring Servlet3 扩展模块笔记(一)

2014-11-24 10:55:39 · 作者: · 浏览: 2
Servlet 3.0
AsyncWebRequest.java
异步请求接口,继承NativeWebRequest
接口
[java]
* Set the time required for concurrent handling to complete.
* This property should not be set when concurrent handling is in progress,
* i.e. when {@link #isAsyncStarted()} is {@code true}.
* @param timeout amount of time in milliseconds; {@code null} means no
* timeout, i.e. rely on the default timeout of the container.
*/
//设置超时时间
void setTimeout(Long timeout);
/**
* Add a handler to invoke when concurrent handling has timed out.
*/
//增加超时处理类
void addTimeoutHandler(Runnable runnable);
/**
* Add a handle to invoke when request processing completes.
*/
//增加请求处理完成处理类
void addCompletionHandler(Runnable runnable);
/**
* Mark the start of asynchronous request processing so that when the main
* processing thread exits, the response remains open for further processing
* in another thread.
* @throws IllegalStateException if async processing has completed or is not supported
*/
//标示异步请求开始,返回异步Context
void startAsync();
/**
* Whether the request is in async mode following a call to {@link #startAsync()}.
* Returns "false" if asynchronous processing never started, has completed,
* or the request was dispatched for further processing.
*/
//判断是否是当前线程是否启动异步模式,false表示没有启动异步模式,或者已经完成,否则请求被分发到其他线程处理
boolean isAsyncStarted();
/**
* Dispatch the request to the container in order to resume processing after
* concurrent execution in an application thread.
*/
//分发请求到容器,唤醒其他线程处理
void dispatch();
/**
* Whether asynchronous processing has completed.
*/
//判断异步处理是否完成
boolean isAsyncComplete();
StandardServletAsyncWebRequest.java
继承ServletWebRequest,实现AsyncWebRequest, AsyncListener,一个标准异步web请求的实现类。
代码
[java] view plaincopy
/**
* {@inheritDoc}
*

In Servlet 3 async processing, the timeout period begins after the

* container processing thread has exited.
*/
public void setTimeout(Long timeout) {
Assert.state(!isAsyncStarted(), "Cannot change the timeout with concurrent handling in progress");//断言状态没有启动异步
this.timeout = timeout;
}
public boolean isAsyncStarted() {
return ((this.asyncContext != null) && getRequest().isAsyncStarted());//异步状态不为空,请求是否启动异步处理模式,如果请求被AsyncContext.dispatch()到容器,或 AsynContext.complete ,则返回false.
}
/**
* Whether async request processing has completed.
*

It is important to avoid use of request and response objects after async

* processing has completed. Servlet containers often re-use them.
*/
public boolean isAsyncComplete() {
return this.asyncCompleted.get();//请求的异步处理是否完成
}
public void startAsync() {
Assert.state(getRequest().isAsyncSupported(),
"Async support must be enabled on a servlet and for all filters involved " +
"in async request processing. This is done in Java code using the Servlet A