關於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。