Tomcat工作原理

日期:2017-06-20       浏览:955

一 图解

Tomcat工作原理图示
Tomcat工作原理图示

二 详解

tomcat就是一个tcp服务器socketServer,一直在监听着指定的端口port。一个tomcat内可以部署多个项目(app),每一个项目都有自身的应用上下文(context)。一个上下文容器(Context)代表一个web应用,每一个上下文包括多个包装器(Wrapper),每个包装器代表一个Servlet。
tomcat内存在一个process连接池,有请求过来会去连接池内获取process对象对该请求进行处理,连接池有最小连接数和最大连接数,当前请求数超过最大连接数后超出的连接请求将会被丢弃,如果最大连接数设置为负数,则表示无最大连接数限制。一个process对象接收到请求后不对请求做任何处理,直接创建连接器connector对象。connector对象才会对该次请求做进一步的处理。
通过连接器connector获取该次请求的socket实例,再通过socket获取输入流inputstream创建HttpServletRequest请求对象,获取socket的输出流outputstream创建HttpServletResponse响应对象。根据HttpServletRequest对象获取请求的servlet(请求路径),调用tomcat自身实现的类加载器加载该servlet并创建对象实例。
再调用tomcat的包装器Wrapper并将request,response和当前应用上下文context对象传递进去,包装器Wrapper会调用自身的allocate方法获取一个servlet实例。调用servlet实例的createFilterChain方法获得绑定在该servlet的过滤器链。调用过滤器链中每一个过滤器的doFilter方法对请求进行过滤处理。
该过滤器处理完成后调用filterChain.release()方法释放自身,处理结果是一个过滤后的servlet对象。然后调用包装器的wrapper.deallocate(servlet)方法判断该次过滤后的servlet是否可用。如果过滤后的servlet无法使用,则调用包装器的wrapper.unload()方法。
如果过滤后的servlet可用,在该过滤器的doFilter最后会调用chain.doFilter(request, response);方法,调用下一个过滤器进行处理。如果最后没有调用chain.doFilter,下一个过滤器将不会被调用。如果是最后一个过滤器,则调用该servlet的service方法进入自身业务方法内。
扫码关注有惊喜

(转载本站文章请注明作者和出处 qbian)

暂无评论

Copyright 2016 qbian. All Rights Reserved.

文章目录