深入理解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>

 

转载于:https://www.cnblogs.com/fxust/p/7905688.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值