关于Tomcat服务器中的协议及请求过程
关于Tomcat服务器中采用的协议:在Tomcat的server.xml文件中可以找到如下几个Connector
1 <!-- 1. HTTP --> 2 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 3 4 <!-- 2. HTTPS --> 5 <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 6 maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 7 clientAuth="false" sslProtocol="TLS" /> 8 <!-- 3. AJP --> 9 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
a)HTTP Connector
此连接器支持HTTP/1.1协议
拥有这个连接器,Tomcat才能成为一个Web服务器,但还额外可处理 servlet 和 jsp
每个监听器监听一个你电脑上的TCP端口(而没有UDP端口)
一个Service可以配置多个HTTP连接器(配置不同端口即可),每个连接器都可以将请求转发到与他们同级的一个Engine上让它处理,并生成相应响应
b)AJP Connector
AJP连接器可以通过AJP协议和一个Web容器进行交互
当你想让Apache 和 Tomcat结合并且你想让Apache处理静态页面的内容的时候用AJP,或者你想利用Apache的SSL处理能力时
特殊于HTTP Connector,AJP还可以与engine元素上的 jvm Route结合来使用负载均衡
c)HTTPS Connector
...
Apache和Tomcat结合的时候:
1. Apache会拦截所有请求,将servlet和JSP(.jsp结尾)请求通过AJP交给Tomcat处理,然后再把结果拿到Apache然后返回
2. 将静态资源的访问,(类似.html/.css/.jpg等之类的结尾)自己直接处理不交给tomcat,直接返回
3. Apache和Tomcat结合之后:Tomcat的HTTP Connector永远不会被用到了,可以没有
注:Tomcat 处理请求的过程
1、用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得。
2、Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。
3、Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host。
4、Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有的Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理)。
5、path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类。
6、构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost().执行业务逻辑、数据存储等程序。
7、Context把执行完之后的HttpServletResponse对象返回给Host。
8、Host把HttpServletResponse对象返回给Engine。
9、Engine把HttpServletResponse对象返回Connector。
10、Connector把HttpServletResponse对象返回给客户Browser。