Tomcat处理请求的详细流程

tomcat处理一个请求的详细流程:

protocolHandler负责生成endpoint和Http11ConnectionHandler
endpoint的acceptor线程负责处理连接请求,收到连接请求后交给worker线程处理,work线程调用Http11ConnectionHandler,Http11ConnectionHandler维护一个Http11Processor池,
在构造Http11Processor时将生成org.apache.coyote.Request和org.apache.coyote.Response对象。
Http11Processor使用InternalInputBuffer类来解析http协议,并将解析后的数据(请求头,分割行等)封装到org.apache.coyote.Request和org.apache.coyote.Response对象中,
之后将此两对象传给CoyoteAdapter.service(request, response)在该方法内部实现了org.apache.coyote.Request-->org.apache.catalina.connector.Request;
org.apache.coyote.Response-->org.apache.catalina.connector.Response的转换,接下来请求进入pipeline,pipeline中value的执行(调用value的invoke方法)顺序如下:
StandardEngineValve-->StandardHostValve-->StandardContextValve-->StandardWrapperValve-->ApplicationFilterChain.doFilter-->Servlet(HttpServlet).service
(由StandardWrapper创建的单实例——多线程共用),invoke方法的参数即为org.apache.catalina.connector.Request/Response。
如果是jsp则继续-->JspServletWrapper.service-->Compiler(如果没有被编译的话)-->装载具体编译后的servlet class file-->交给具体servlet的service方法-->通过out.write写入
html页面,事实上这个out是response.getWriter,所以也就将结果写入了response。

新建session:
Manager manager = context.getManager();
Session session = manager.createSession(null);
如何从服务器上下文查询数据:
Context context = server.getGlobalNamingContext();
UserDatabase database = (UserDatabase) context.lookup("UserDatabase");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值