Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被广泛使用,是开发和调试Servlet、JSP 程序的首选。
web
Tomcat结构图:
设计模式
Tomcat主要组件:服务器Server,服务Service,链接器Connector、容器Container。链接器Connector和容器Container是Tomcat的核心。
浏览器
一个Container容器和一个或多个Connector组合在一块儿,加上其余一些支持的组件共同组成一个Service服务,有了Service服务即可以对外提供能力了,可是Service服务的生存须要一个环境,这个环境即是Server,Server组件为Service服务的正常使用提供了生存环境,Server组件能够同时管理一个或多个Service服务。
安全
一、Connector
服务器
一个Connecter将在某个指定的端口上侦听客户请求,接收浏览器的发过来的 tcp 链接请求,建立一个 Request 和 Response 对象分别用于和请求端交换数据,而后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理Engine(Container中的一部分),从Engine出得到响应并返回客户。
Tomcat中有两个经典的Connector,一个直接侦听来自Browser的HTTP请求,另一个来自其余的WebServer请求。HTTP/1.1 Connector在端口8080处侦听来自客户Browser的HTTP请求,AJP/1.3 Connector在端口8009处侦听其余Web Server(其余的HTTP服务器)的Servlet/JSP请求。
Connector 最重要的功能就是接收链接请求而后分配线程让 Container 来处理这个请求,因此这必然是多线程的,多线程的处理是 Connector 设计的核心。session
二、Container
多线程
Container是容器的父接口,该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。这四个组件是负责关系,存在包含关系。一般一个Servlet class对应一个Wrapper,若是有多个Servlet定义多个Wrapper,若是有多个Wrapper就要定义一个更高的Container,如Context。
Context 还能够定义在父容器 Host 中,Host 不是必须的,可是要运行 war 程序,就必需要 Host,由于 war 中必有 web.xml 文件,这个文件的解析就须要 Host 了,若是要有多个 Host 就要定义一个 top 容器 Engine 了。而 Engine 没有父容器了,一个 Engine 表明一个完整的 Servlet 引擎。并发
三、其余组件app
Tomcat 还有其它重要的组件,如安全组件 security、logger 日志组件、session、mbeans、naming 等其它组件。这些组件共同为 Connector 和 Container 提供必要的服务。
jsp
4、HTTP请求过程
一、用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector得到。
二、Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。
三、Engine得到请求localhost/test/index.jsp,匹配全部的虚拟主机Host。
四、Engine匹配到名为localhost的Host(即便匹配不到也把请求交给该Host处理,由于该Host被定义为该Engine的默认主机),名为localhost的Host得到请求/test/index.jsp,匹配它所拥有的全部的Context。Host匹配到路径为/test的Context(若是匹配不到就把该请求交给路径名为“ ”的Context去处理)。
五、path=“/test”的Context得到请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类。
六、构造HttpServletRequest对象和HttpServletResponse对象,做为参数调用JspServlet的doGet()或doPost().执行业务逻辑、数据存储等程序。
七、Context把执行完以后的HttpServletResponse对象返回给Host。
八、Host把HttpServletResponse对象返回给Engine。
九、Engine把HttpServletResponse对象返回Connector。 十、Connector把HttpServletResponse对象返回给客户Browser。