tomcat

tomacat :

Apache Tomcat最早是由Sun Microsystems開發的一個Servlet容器,在1999年被捐獻給ASF(Apache Software Foundation),隸屬於Jakarta項目,現在已經獨立爲一個頂級項目。Tomcat主要實現了Java EE中的Servlet、JSP規範,同時也提供HTTP服務,是市場上非常流行的Java Web容器。

目錄結構

  以Tomcat-8.5爲例,分析下各個目錄都有哪些文件、有哪些作用。
tomcat

bin:主要存放tomcat的操作命令,根據操作系統可以分爲兩大類:一是以.bat結尾(Windows);二是以.sh結尾(Linux)。比如可以通過startup啓動,shutdown關閉Tomcat。

conf:全局配置文件

一個策略文件:catalina.policy 定義了安全策略。
兩個屬性文件:catalina.properties 和 logging.properties 。
四個XML配置文件:
server.xml:Tomcat的主要配置文件,配置整個服務器信息,如修改連接器端口號(默認爲8080)。不能動態重加載,文件修改之後必須重啓服務器才能生效。
web.xml:全局的web應用程序部署描述文件,如可以設置tomcat支持的文件類型。
context.xml:Tomcat的一些特定配置項,針對所有應用程序生效。
tomcat-users.xml:配置Tomcat的用戶名、密碼,管理身份驗證以及訪問控制權限。
lib:Tomcat運行依賴的一些Jar文件,比如常見的servlet-api.jar、jsp-api.jar。所有的應用程序可用,可以放置一些公用的Jar文件,如MySQL JDBC驅動(mysql-connector-java-5.1.{xx}-bin.jar)。

logs:運行中產生的日誌文件。包含引擎(engine)日誌文件 Catalina.{yyyy-mm-dd}.log,主機日誌文件localhost.{yyyy-mm-dd}.log,以及一些其他應用日誌文件如manager、host-manager。訪問日誌也保存在此目錄下。
temp:臨時文件目錄,清空不會影響Tomcat運行

webapps:默認的應用程序根目錄,Tomcat啓動時會自動加載該目錄下的應用程序,可以以文件夾、war包、jar包的形式發佈(啓動時會自動解壓成相應的文件夾)。也可以把應用程序放置在其他路徑下,需要在文件中配置路徑映射。

work:用來存放tomcat在運行時的編譯後文件,如JSP編譯後的文件。清空work目錄,然後重啓tomcat,可以達到清除緩存的作用。
架構

  Tomcat是一個HTTP服務器,同時也是一個Servlet容器(可以執行Servlet文件,JSP、JSF會被轉換成Servlet),支持多種功能,因此採用了分層、模塊化的設計。

  查看conf文件夾中的server.xml文件,可以發現上圖的層次結構。

<?xml version='1.0' encoding='utf-8'?>
<Server>
<Service>
<Connector/>
<Engine>
<Host></Host>
</Engine>
</Service>
</Server>
1
2
3
4
5
6
7
8
9
Server
  Server是一個頂級組件,代表了一個Tomcat實例,一個JVM進程中只能有一個Server實例。Tomcat提供了一個實現了 org.apache.catalina.Server接口的 org.apache.catalina.core.StandardServer默認類,讀取Server元素配置。

<Server port="8005" shutdown="SHUTDOWN"></Server>
1
  Server是配置文件中的最外層元素,支持以下屬性:

className:指定要使用的實現類(必須實現org.apache.catalina.Server接口)名稱。如果不指定,默認使用標準實現類StandardServer。
address:等待shutdown命令的服務器IP地址,默認是localhost。
port:等待shutdown命令的監聽端口,如果設置爲-1,表示關閉shutdown端口。
shutdown:指定終止Tomcat服務器運行時,發給Tomcat服務器的shutdown監聽端口的字符串.該屬性必須設置 。
  啓動Tomcat,打開命令行工具,通過telnet命令:telnet localhost 8005 連接服務器

  輸入SHUTDOWN命令,即可關閉Tomcat

Service
  Server元素中可以有一個或多個Service,每個Service關聯了多個Connector和一個Engine。

<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

<Engine name="Catalina" defaultHost="localhost"></Engine>

</Service>
1
2
3
4
5
6
  Service支持兩個屬性:

className:指定要使用的實現類(必須實現org.apache.catalina.Service接口)名稱。如果不指定,默認使用標準實現類StandardService。
name:Service的名稱,在同一個Server元素中必須唯一,默認是Catalina。
Connector
  Connector主要用來處理客戶端發來的請求,一個Connector與一個TCP端口綁定,Service中默認包含兩個Connector。

HTTP/1.1:處理HTTP請求,此連接器使Tomcat可以作爲HTTP服務器使用。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<!--
port:屬性指定監聽端口,默認8080端口,可修改爲1024-65535間的任意一個端口
protocol:支持協議
connectionTimeout:定義連接器等待時間,默認20秒
redirectPort:SSL請求會重定向到8443端口
-->
1
2
3
4
5
6
7
AJP/1.3:Apache JServ 協議處理Tomcat與Apache之間的通信。Tomcat核心功能是解析Servlet,html和圖片解析功能相對其他HTTP服務器較弱(如Apache HTTP Server),所以,一般都是集成使用,Apache處理靜態頁面請求,Tomcat處理Servlet/JSP請求。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
1
Container
  Tomcat中的容器包括:Engine、Host、Context、Cluster,層級最高的容器是Engine,最低的是Context。

Engine
  Engine中可以包含一個或者多個Host,可以配置默認主機。Engine容器會從HTTP Connector接收HTTP請求,並且會根據主機名/IP地址交由相應的主機處理請求。

<Engine name="Catalina" defaultHost="localhost"></Engine>
1
Host
  一個Host元素代表了一個虛擬主機,默認主機名爲localhost,支持多個Context。

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"></Host>
<!--
appBase:定義了應用程序的根目錄,默認是webapps
unpackWARS:定義了是否解壓webapps中的WAR文件,如果指定爲“false”,會從WAR文件直接運行程序,執行較慢
autoDeploy:把應用程序直接拖到webapps目錄下,是否自動運行
-->
1
2
3
4
5
6
Context
  Host元素定義了虛擬主機,Context則是虛擬主機下的具體應用。Tomcat啓動後,webapps目錄下的所有應用程序都會自動運行,訪問某個具體項目需要在URL中指定項目名稱,如 http://localhost:8080/examples/ ,ROOT目錄除外。想要通過 http://localhost:8080 來訪問自定義項目,可以把應用程序直接放到ROOT目錄中(讓ROOT做爲項目的根目錄),也可以通過Context來配置映射。

<Context path="" docBase="webapps/examples" reloadable="false"/>
<!--
path:訪問項目時的URL,加在localhost:8080後
docBase:path對應的項目目錄
reloadable:監視 /WEB-INF/classes/ 和 /WEB-INF/lib目錄中的類文件,更改後自動重載應用程序,
生成環境不建議使用,默認爲“false”
-->
1
2
3
4
5
6
7
  更改server.xml文件後,重新啓動Tomcat,在瀏覽器中輸入 http://localhost:8080 即可訪問examples應用。

  注意修改元素的appBase的屬性爲空 appBase="" ,否則Tomcat啓動時,exmaples應用會被加載兩次。

Cluster
  Cluster可以解決應用之間session共享、上下文屬性共享,以及在集羣內共同部署應用程序的問題。元素可以包含在或者元素下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章