Tomcat詳解

Tomcat

概述:
   Tomcat在嚴格意思上並不是一個真正的應用服務器,只是一個可以支持servlet、JSP的web容器
   它擴展了一些應用服務器的功能,如JNDI,數據庫連接池,用戶事務處理等,是Apache組織下的子項目。
   目前Tomcat被非常廣泛的應用於中小規模的Javaweb應用中
   
優點:
  1.容易得到,直接去官網下載
  2.對於開發人員,特別是Java開發人員,Tomcat提供了全部的源代碼
  包括servlet引擎,JSP引擎,http服務器,
  3.TOMCAT使用率很高,基本和主流的服務器一起工作

由於Java的跨平臺特性,基於Java的Tomcat也具有跨平臺性

Tomcat目錄:
bin:存放啓動和關閉Tomcat腳本
conf:存放不同的配置文件(server.xml和web.xml)
doc:存放Tomcat文檔
logs:存放Tomcat執行時的log文件
src:存放Tomcat的源代碼
webapps:主要存放web發佈的目錄(應用程序的示例)
work:存放JSP編譯後產出的class文件

server.xml配置文件
server.xml是Tomcat的主配置文件,主要完成兩個目標:
   1.提供Tomcat組件的初始配置,說明Tomcat的結構、含義,使得Tomcat通過實例化組件完成啓動及構建自身
   2.觀察server.xml,可以發現裏面包含一些元素:
      1.Server元素:
         Server元素是server.xml文件最高級別的元素,描述一個Tomcat服務器,
         一個Server元素一般會包含logger和ContextManage兩個元素
         
         logger:
            logger元素定義一個日誌對象
            一個日誌對象包含哪些屬性:
               1.name:表示這個日誌對象的名稱
               2.path:表示這個日誌對象包含的日誌的內容要輸出哪一個日誌
               3.verbositylevel:表示這個日誌文件記錄的日誌的級別
               
     logger對象是對Java servlet,jsp,tomcat運行期事件的記錄

     contextManage:
        contextManage定義了一組contextInterceptors(contextManage事件監聽器),requestInterceptors(事件監聽器),contexts(web應用程序的上下文目錄)和連接器(connectors)的結構和配置
        1.debug:
          表示記錄日誌記錄調試信息的等級
        2.home:
          webapps/conf/logs和context的根目錄信息,這個屬性的作用是從一個不同的TOMCAT_HOME的目錄啓動Tomcat
        3.workDir:表示Tomcat的工作目錄
        
  注意:
     contextInterceptors和requestInterceptors兩者都是監聽contextManage的特定事件的攔截器
      contextInterceptors:監聽Tomcat的啓動和結束事件的信息
      requestInterceptors:監聽用戶對服務器發出的請求

2.Connector元素:
   Connector(連接器)元素描述了一個到用戶的連接,或者直接由Tomcat到用戶的瀏覽器還是通過web服務器
   Tomcat的工作進程和由不同的用戶建立的連接來傳遞讀寫信息和請求、響應等都是由連接器對象管理
   對連接器對象的配置中應該包含管理類,TCP IP  端口等內容
   
   
3.Context元素:
   每一個Context元素都描述一個Tomcat的web應用程序的目錄
   包含的屬性:
      1.docBase:
         Context目錄
      2.path:
        表示Context在web服務器時的虛擬目錄位置和目錄名
      3.debug:
         日誌記錄的調試信息的記錄等級
      4.reloadable:
          這個屬性可以方便servlet的開發,如果該屬性處於打開的狀態,tomcat將檢查servlet是否被更新而決定自動重新載入
   

配置實例:
   打開Tomcat/conf/server.xml
   
   1.改變Tomcat服務器的端口號:
      需要使用connector元素,connector表示一個到用戶的連接,不管是通過web服務器或者直接到用戶瀏覽器(在一個獨立的配置中)
      connect偶爾負責管理Tomcat的工作線程和讀寫連接到不同用戶的端口的請求/響應。
      connector的配置包含的信息:
         句柄類,句柄監聽的TCP/IP端口、句柄服務器端口的TCP/IP 的backlog
         
         注意:
            修改後必須重啓Tomcat服務器
            可以將端口號改成80,需要保證80端口號沒有被其他程序佔用,另外,也可以同時配置兩個端口號,只要產生兩個connector的配置信息  

server.xml配置


配置文件中的額基本配置信息:
   server:
       一個服務器元素代表整個cantalina的servlet容器
       1.port:指定一個端口,該端口負責監聽關閉Tomcat的請求
       2.shutdown:指定向端口發送命令字符串
       service:
          它由一個或多個連接器(connector)組成,以及Engine,負責處理所有的connector所獲得的客戶請求
             1.name:指定service名稱
             
         Connector(表示客戶端和service之間的連接):
              一個Connector將在某個指定端口上監聽客戶的請求,並將獲得的請求交給Engine來處理,從Engine獲得相應的結果並返回給客戶
       
  Tomcat有兩個典型的Connector
    1.直接監聽來自browser的http請求
    2.監聽來自其他的webService的請求
    
注意:
   coyote  http/1.1  Connector在端口8080處監聽客戶來自browser的http請求
   coyote  jk1.3   Connector在端口8009處監聽來自其他的webServer(Apache)的servlet/jsp的代理請求
   
   
   1.port:指定服務器端需要創建的端口號,並可以在這個端口監聽來自客戶端的請求
   2.minProcessors:爲服務器啓動時創建處理請求的線程數(最小)
   3.MaxProcessors:最大可以創建處理請求的線程數
   4.enableLookUps:
       如果爲true
      則可以通過調用request.getRemoteHost();進行DNS查詢來得到遠程客戶端的實際的主機名
       如果爲false:
          則不進行DNS查找,返回IP地址
    5.redirectport:
       指定服務器正在處理http請求時收到一SSL傳輸請求後重定向的端口號
       
    6.acceptCount:
       指定當所有可以使用的處理請求的線程數,如果線程數都被使用,可以放到處理隊列中的請求數,超過了這個請求數,就不予以處理
       
    7.connectionTimeOut:
       表示超時的時間數(一般以毫秒爲單位)

Engine


概述:
   Engine下可以配置多個虛擬機主機,每一個虛擬主機都有一個域名,當Engine獲得一個請求時,它把該請求匹配到某個host上,然後交由host來處理
   
Engine有一個默認的虛擬主機:
   當請求無法匹配到任何一個host上的時候,將交給默認的host來處理(表示指定service中 的請求處理機,接受和處理來自connector的請求):
      1.defaultHost:指定缺省的處理請求的主機名,它至少和其中一個host元素的name屬性值相同
      
   Context(表示一個web 應用程序):
      1.docBase:表示程序的路徑或者是WAR文件存放的路徑
      2.path:表示web應用程序的前綴,如:請求URL:http://localhost:8080/path/...
      3.reloadable:
         如果爲true:
            則Tomcat會自動檢測應用程序的/WEB—_INF/lib和/WEB—_INF/classes目錄的變化,自動加載新的應用程序,不需要重啓Tomcat
      

host


定義:host表示一個虛擬主機:每個虛擬主機好某個網絡域名(Domain name)相匹配
每一個虛擬主機下都可以部署一個或多個web app ,每一個webapp對應一個Context,Context path,
當host獲得一個請求時,將把該請求匹配到某個context上,然後交由context處理,
  匹配的方法:最長匹配
  注意:
     path=""的context將成爲該host的默認的context。所有無法和其他Context的路徑名匹配的請求,都將最終和該默認的Context進行匹配。
     
     1.name :表示指定的主機名
     2.aooBase:表示應用程序的基本目錄,即存放該應用程序的目錄
     3.unpackWARs:
         如果爲true:
            則Tomcat會自動將WAR文件解壓,反之不解壓,直接從WAR文件中運行應用程序

Logger


logger :表示日誌,調試和錯誤信息
  1、className:指定logger使用的類名,此類必須實現org.apache.catalina.logger接口
  2.prefix:指定logger文件的前綴
  3.suffix:指定logger文件的後綴
  4.timeStamp:
     如果爲true:表示在log文件名中加入時間(系統時間)
     如:localhost_log.2017-07-12.txt
  

valve(功能和logger差不多)
  其中prefix和suffix屬性解釋和logger一樣
   不同:
      1.classname:表示指定valve的使用類名,
        如:
          org.apche.catalina.valve.accessLogValne類可以記錄應用程序的訪問信息
    
directory:表示log文件存放的位置
pattern:common方式記錄遠程主機名,IP地址、用戶名、日期、http響應代碼、發送的字節數。

Realm


Realm:表示存放用戶名、密碼、role的數據庫
   1.className:表示realm的使用類名,此類必須實現 org.apche.catalina.realm接口

Tomcat管理


1.用戶管理:
在進行具體的Tomcat管理之前,可以先給Tomcat添加用戶,使這個用戶有權限進行管理
<user name="user" password="user" roles="standard,manager"/>,重啓Tomcat
在瀏覽器裏輸入http://localhost:8080/manager,會彈出一個對話框,輸入上面定義的用戶名和密碼

2.應用程序管理:
  http://localhost:8080/manager/list,
   瀏覽器會顯示基本信息:應用程序的路徑,當前的餓狀態,連接程序的session數
   
3.重新加載應用程序
  在瀏覽器輸入http://localhost:8080/manager/reload?path=/exmples,
  瀏覽器會顯示該exmples是否加載成功
  或者:
     將server.xml的context元素的reloadable屬性設置爲true,則會自動加載
  
  4.顯示session的信息
    http://localhost:8080/manager/session?path=/exmples,
  5.啓動和關閉應用程序
   http://localhost:8080/manager/start?path=/exmples,//啓動
   http://localhost:8080/manager/stop?path=/exmples,//關閉
  
  

假設來自客戶端的請求:http://localhost:8080/abc/abc_index.jsp

1.請求被髮送到本機端口8080,被在那裏監聽的coyote  HTTP/1.1  Connector獲得
2.Connector把該請求交給它所在的service的Engine來處理,並等待來自Engine的迴應
3.Engine獲得localhost:8080/abc/abc_index.jsp,匹配它所有的虛擬主機host
4.如果Engine匹配帶名字爲localhost的host(即使匹配不到也可以交給host處理,被Engine的默認主機處理)
5.localhost的host獲得請求/abc/abc_index.jsp,匹配它所有的Context
6.host匹配到路徑爲/abc的Context
7.path=“/abc”的Context獲得請求/abc_index.jsp,在它的mapping table中尋找對應servlet 
8.Context匹配到URL PATTERN爲*.jsp  的servlet,對應於JSPServlet類
9.構造HttpServletRequest對象和HttpServletResponse對象作爲參數調用JSPServlet的doget或者doPost方法
10.Context把執行完的HttpServletResponse對象返回給host
11.host把HttpServletResponse對象返回給Engine
12.Engine在把HttpServletResponse對象在返回給Connector
13.Connector把HttpServletResponse對象返回給客戶瀏覽器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章