AsyncContext源码翻译

package javax.servlet;
/**
 * 目的:异步操作执行环境的初始化
 * 
 * <p>调用{@link ServletRequest#startAsync()}或{@link ServletRequest#startAsync()}
 * 去创建AsyncContext对象并初始化。这些方法的重复调用将返回相同的AsyncContext实例,重新初始化为为佳。
 * 
 * <p>异步操作超时,容器将经过以下步骤:
 *   a.ServletRequest异步操作初始化时,注册的所有{@link AsyncListener}实例,这些实例都将调用
 *     {@link AsyncListener#onTimeout onTimeout}方法。
 *   b.如果没有一个监听器调用{@link #complete}或{@link #dispatch}方法时,将执行一个错误调度
 *     状态码,这相当于HttpServletResponse.SC_INTERNAL_SERVER_ERROR。
 *   c.如果没有找到错误页面或错误页面没有调用{@link #complete}或{@link #dispatch}时,将调用
 *     {@link #complete}
 * @author TCM
 * @create 2017年10月25日上午10:04:49
 * @since Servlet 3.0
 */
public interface AsyncContext {

    /**
     * 获取该环境对应的请求
     * 即:请求启动异步时,生成的AsyncContext,该环境对应的请求
     * @exception IllegalStateException
     */
    public ServletRequest getRequest();
    public ServletResponse getResponse();


    /**
     * 检查AsyncContext初始化时,对应的原始请求和响应
     * 
     * 在过滤器outbound时调用,之后请求进入异步模式。
     */
    public boolean hasOriginalRequestAndResponse();


    /**
     * 目的:AsyncContext调度请求和响应到servlet容器中,进行转发等操作
     * @throws IllegalStateException
     * @see ServletRequest#getDispatcherType
     */
    public void dispatch();
    public void dispatch(String path);
    public void dispatch(ServletContext context, String path);


    /**
     * AsyncContext完成异步操作,关闭响应。
     * 响应完成后,监听器调用{@link AsyncListener#onComplete(AsyncEvent) onComplete}
     */
    public void complete();


    /**
     * 容器从线程池中调度一个线程去启动。
     * @param run 异步操作手
     */
    public void start(Runnable run);


    /**
     * {@link ServletRequest#startAsync}调用时,注册一个异步监听器。
     * 
     * 该监听器监听{@link AsyncEvent}事件,异步环:成功完成、超时、错误等。
     * @param listener 
     * @throws IllegalStateException 
     */
    public void addListener(AsyncListener listener);
    public void addListener(AsyncListener listener,
                            ServletRequest servletRequest,
                            ServletResponse servletResponse);
    public <T extends AsyncListener> T createListener(Class<T> clazz)
        throws ServletException; 


    /**
     * 为AsyncContext设置超时时间,单位:毫秒
     */
    public void setTimeout(long timeout);
    public long getTimeout();
    

    static final String ASYNC_REQUEST_URI = "javax.servlet.async.request_uri";
    static final String ASYNC_CONTEXT_PATH = "javax.servlet.async.context_path";
    static final String ASYNC_PATH_INFO = "javax.servlet.async.path_info";
    static final String ASYNC_SERVLET_PATH = "javax.servlet.async.servlet_path";
    static final String ASYNC_QUERY_STRING = "javax.servlet.async.query_string";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值