• 深入理解Servlet3.0异步请求


    异步请求的基础概念

    异步请求最直接的用法就是处理耗时业务,Http协议是单向的,只能客户端拉不能服务器主推.

    异步请求的核心原理主要分为两大类:1.轮询.2长连接

    轮询:就是定时获取返回结果.

    长连接:客户端请求服务器后,连接不关闭,只有异步请求处理完成后才关闭连接.

    Servlet3.0对异步请求的支持

      在Servlet3.0对异步请求的支持非常简单,只需要在请求的过程中调用request的startAsync即可,返回值为AsyncContext.AsyncContext为异步请求容器,它的作用就是保存与异步请求相关的所有信息,类似Servlet中的ServletContext.需要注意的是多次调用startAsync返回的是同一个AsyncContext.

    public interface AsyncContext {
        String ASYNC_REQUEST_URI = "javax.servlet.async.request_uri";
        String ASYNC_CONTEXT_PATH = "javax.servlet.async.context_path";
        String ASYNC_PATH_INFO = "javax.servlet.async.path_info";
        String ASYNC_SERVLET_PATH = "javax.servlet.async.servlet_path";
        String ASYNC_QUERY_STRING = "javax.servlet.async.query_string";
    
        ServletRequest getRequest();
    
        ServletResponse getResponse();//获取response
    
        boolean hasOriginalRequestAndResponse();
    
        void dispatch();//用于将请求发往新地址(发往原来的地址)
    
        void dispatch(String var1);//用于将请求发往新地址(发往指定的地址)
    
        void dispatch(ServletContext var1, String var2);//用于将请求发往新地址(发往指定应用的指定地址)
    
        void complete();//用于通知容器,请求已经处理完成.
    
        void start(Runnable var1);//用于启动实际处理线程
    
        void addListener(AsyncListener var1);//用于添加监听器
    
        void addListener(AsyncListener var1, ServletRequest var2, ServletResponse var3);
    
        <T extends AsyncListener> T createListener(Class<T> var1) throws ServletException;
    
        void setTimeout(long var1);//设置超时时间
    
        long getTimeout();
    }

    Servlet3.0处理异步请求三部曲

    1.配置Servlet时将async-supported设置为true.

    2.在servlet处理方法中调用Request的startAsync方法启动异步处理.

    3.使用上面返回的AsyncContext处理异步请求.

    配置web.xml

      <servlet>
        <servlet-name>WorkServlet</servlet-name>
        <servlet-class>controller.WorkSerlet</servlet-class>
        <async-supported>true</async-supported>
      </servlet>
      <servlet-mapping>
        <servlet-name>WorkServlet</servlet-name>
        <url-pattern>/work</url-pattern>
      </servlet-mapping>
  • 相关阅读:
    推荐一个wpf&sliverlight的图表控件
    数独求解
    WPF中的 CollectionChanged事件通知
    Windows 7 任务栏之缩略图预览(Thumbnail)
    把Google HK设为IE默认的搜索引擎
    F#小记——1. Hello F#
    F#小记——2. 基本数据类型
    使用异步socket的时候需要注意memory spike
    《everytime you kissed me》的中文歌词
    我回来了o(∩_∩)o...
  • 原文地址:https://www.cnblogs.com/fxust/p/7905688.html
Copyright © 2020-2023  润新知