我是靠谱客的博主 感动帅哥,最近开发中收集的这篇文章主要介绍Tomcat servlet3的异步化原理理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Servlet3.0 异步处理

Servlet3.1 非阻塞IO

转:https://blog.csdn.net/zhurhyme/article/details/76228836

https://www.cnblogs.com/davenkin/p/async-servlet.html

tomcat如何处理请求
从客户端发出一次请求至tomcat容器大致经过如下过程:

  1. 客户端发出http请求至tomcat的连接监听端口;
  2. tomcat connector接收线程接收请求,并根据http协议解析该次请求;
  3. tomcat 通过解析的http报文,初始化org.apache.coyote.Request,并实例化org.apache.coyote.Response;
  4. 经装饰模式转化为servlet api对应的HttpServletRequest与HttpServletReponse;
  5. 经tomcat的层层容器engine,host,context最终到过我们所写的业务servlet的service方法;
  6. 业务方法service,处理相关的业务逻辑,写入相应的响应的至response,并返回tomat的容器组件;
  7. tomcat该处理线程关闭响应流Response并将响应内容返回客户端;
  8. tomcat该处理线程被释放,然后用于下次请求的处理;

所以tomat结合servlet3异步化的整体请求处理过程大致如下:

  1. 客户端发出http请求至tomcat的连接监听端口;
  2. tomcat connector接收线程接收请求,并根据http协议解析该次请求;
  3. tomcat 通过解析的http报文,实例化org.apache.coyote.Request,并实例化org.apache.coyote.Response;
  4. 经装饰模式转化为servlet api对应的HttpServletRequest与HttpServletReponse;
  5. 经tomcat的层层容器engine,host,context最终到过我们所写的业务servlet的service方法;
  6. 业务方法开启异步化上下文AsynContext;释放tomcat当前处理线程;
  7. tomcat判断当前请求是否开启了异步化,如果开启则不关闭响应流Response,也不进行用户响应的返回;
  8. tomcat该线程被释放,然后用于下次请求的处理,提高其吞吐量;
  9. 业务方法在AsynContext环境中完成业务方法的处理,调用其complete方法,将响应写回响应流,并关闭响应流,完成此次请求处理.

package davenkin.servlet;

import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(value = "/simpleAsync", asyncSupported = true)
public class SimpleAsyncHelloServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        AsyncContext asyncContext = request.startAsync();

        asyncContext.start(() -> {
            new LongRunningProcess().run();
            try {
                asyncContext.getResponse().getWriter().write("Hello World!");
            } catch (IOException e) {
                e.printStackTrace();
            }
            asyncContext.complete();
        });

    }

}

最后

以上就是感动帅哥为你收集整理的Tomcat servlet3的异步化原理理解的全部内容,希望文章能够帮你解决Tomcat servlet3的异步化原理理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部