tomacat :html
Apache Tomcat最先是由Sun Microsystems開發的一個Servlet容器,在1999年被捐獻給ASF(Apache Software Foundation),隸屬於Jakarta項目,如今已經獨立爲一個頂級項目。Tomcat主要實現了Java EE中的Servlet、JSP規範,同時也提供HTTP服務,是市場上很是流行的Java Web容器。java
目錄結構mysql
以Tomcat-8.5爲例,分析下各個目錄都有哪些文件、有哪些做用。web
bin:主要存放tomcat的操做命令,根據操做系統能夠分爲兩大類:一是以.bat結尾(Windows);二是以.sh結尾(Linux)。好比能夠經過startup啓動,shutdown關閉Tomcat。sql
conf:全局配置文件apache
一個策略文件: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)。api
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
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共享、上下文屬性共享,以及在集羣內共同部署應用程序的問題。元素能夠包含在或者元素下。