1担平、Tomcat的目錄層次結(jié)構(gòu)
bin:? ?存放啟動和關(guān)閉Tomcat的腳本文件
conf:?存放Tomcat服務(wù)器的各種配置文件
lib:? ?存放tomcat服務(wù)器支撐的jar包
logs:? 存放Tomcat的日志文件
temp:? 存放Tomcat運(yùn)行時產(chǎn)生的臨時文件
webapps:web應(yīng)用雖在目錄,即供外界訪問的web資源的存放目錄
work:? Tomcat的工作目錄
2膀懈、JavaWeb應(yīng)用的組成結(jié)構(gòu)
|----html、jsp蛔溃、css止潘、js等文件,根目錄下的文件外界可以直接訪問
|----WEB-INF目錄
|---------classes目錄(java類)
|---------lib目錄(java類運(yùn)行所需的jar包)
|---------web.xml(web應(yīng)用的配置文件)
WEB-INF?這個目錄下的文件外界無法直接訪問矫限,由web服務(wù)器負(fù)責(zé)調(diào)用
3、JavaWeb應(yīng)用的發(fā)布
開放式目錄方式:
打包war方式:? ?使用? ?Jar?-cvf?*.war?.
4佩抹、Tomcat的Server.xml文件
Tomcat本身由一系列可配置的組件構(gòu)成叼风,其中核心組件是Servlet容器組件,它是所有其他Tomcat組件的頂層容器棍苹。每個組件都可以在Tomcat安裝目錄/conf/server.xml文件中進(jìn)行配置无宿,每個Tomcat組件在server.xml文件中對應(yīng)一種配置元素。
server.xml被稱為Tomcat的主配置文件或全局配置文件枢里,它完成兩個任務(wù):
(1)提供Tomcat組件的初始配置
(2)說明Tomcat的結(jié)構(gòu)孽鸡,含義,使Tomcat通過實(shí)例化組件完成啟動及構(gòu)建自身栏豺。
server.xml中描述的重要元素有?Server?,Service?,Connector?,Engine?,Host?,Context?.
結(jié)構(gòu)如下:
Tomcat-配置及原理
它們的用處是:
Server:
頂層元素,整個配置文件的根元素,表示整個Servlet容器或者Tomcat服務(wù)器包含多個Listener,一個GlobalNamingResources和一個Service
Service:
一組Connector和一個Engine的集合彬碱,這組Connector共用一個Engine來處理所有Connector收到的請求,負(fù)責(zé)處理所獲得到的客戶請求
Listener組:
監(jiān)聽器奥洼,用來管理Tomcat生命周期和全局資源
GlobalNamingResources:
配置系統(tǒng)的JNDI(Java?Naming?and?Directory?Interface)
Connector組:
連接器巷疼,代表外部客戶之間的接口,將在一個指定的接口上偵聽客戶請求灵奖,并將獲得的請求交給進(jìn)行處理嚼沿,然后把處理結(jié)果返回給客戶
Engine:
引擎,處理中的所有客戶請求桑寨,具體來說伏尼,獲得一個交給的請求后,把這個請求匹配到某個上進(jìn)行處理尉尾,如果沒有找到合適的來進(jìn)行處理,則把這個請求交給一個默認(rèn)虛擬主機(jī)處理燥透。
Host組:
虛擬主機(jī)沙咏,處理一個特定主機(jī)的請求辨图,一般來說,每個虛擬主機(jī)都可以配置一個到多個Web應(yīng)用肢藐,每個Web應(yīng)用對應(yīng)一個,獲得的請求最終匹配到某個上故河,由它進(jìn)行處理。
Context組:
Web應(yīng)用組吆豹,每個Web應(yīng)用由一個或多個Servlet組成鱼的,當(dāng)獲得一個請求后,將映射/conf/web.xml文件中的元素痘煤,匹配一個Servlet類進(jìn)行處理并返回凑阶。當(dāng)一個Web應(yīng)用被初始化的時候,它將用自己的ClassLoader對象載入web.xml中定義的每個Servlet類衷快。
我們啟動Tomcat宙橱,在瀏覽器中輸入:http://localhost:8080/?會打開Tomcat的默認(rèn)頁面。實(shí)際上蘸拔,這個頁面是在Tomcat安裝目錄下的:/webapps/root/index.jsp;/webapps是Tomcat服務(wù)器用來存放Web應(yīng)用的目錄师郑,每個Web應(yīng)用都將在這建立各自的子目錄,剛裝好的Tomcat服務(wù)器虛擬主機(jī)的默認(rèn)目錄是/webapps/ROOT,所以默認(rèn)會打開這個目錄下的文件调窍。流程如下:
在/conf目錄下的web.xml配置文件中有如下配置:
index.html
index.htm
index.jsp
這里正是用來配置首頁的宝冕,Tomcat將按順序找出標(biāo)簽中的內(nèi)容作為首頁。而在我們的目錄下邓萨,它只找到了index.jsp地梨,所以會顯示它;
但我們不能將所有的Web程序都放在ROOT里先誉。所以我們需要更改Tomcat的虛擬目錄湿刽;
要設(shè)置虛擬路徑,需要在server.xml文件的中的Web應(yīng)用添加一個子元素褐耳,實(shí)際上是配置了一個Web應(yīng)用的物理存放地址到Tomcat虛擬路徑的過程诈闺,使得Tomcat能夠正確找到Web應(yīng)用的物理存放路徑;
步驟:
1)在server.xml的中加上如下代碼:
2)我們把寫好的Web應(yīng)用中的所有文件放到下面的目錄中:D:/myapp/test
3)重啟Tomcat,在瀏覽器中輸入:http://localhost:8080/test?即可測試
web.xml
Tomcat目錄下/conf?可為不同的應(yīng)用程序配置不同的上下文環(huán)境铃芦;用來對Servlet進(jìn)行映射雅镊;
一個Web應(yīng)用的根目錄下的/WEB-INF目錄中也有一個web.xml,當(dāng)部署一個Web應(yīng)用時刃滓,總是先加載/conf/web.xml仁烹,然后才加載自己Web應(yīng)用的/WEB-INF/web.xml文件;但處理過程中咧虎,總是先使用自己的web.xml配置文件卓缰,如果無法處理,才把它交給Tomcat的web.xml文件。
當(dāng)用戶在瀏覽器中輸入一個JSP文件地址:
http://localhost:8080/test/index.jsp
提交的請求最終由一個具體的Servlet來進(jìn)行處理征唬。我們請求傳遞的過程如下:
1)請求首先到達(dá)商品為8080的,然后把該請求交給引擎處理捌显;
2)將這個請求匹配到某個去處理,因?yàn)檫@里默認(rèn)處理的是localhost总寒,所以請求傳遞到name屬性是localhost的扶歪。
3)根據(jù)地址串中的子目錄為"test",獲知能夠處理該請求的Servlet存放在虛擬目錄為"test"的Web應(yīng)用中,于是通過查找元素摄闸,找到path="test"?的,然后根據(jù)中的物理路徑"docBase"的屬性值查找Web應(yīng)用的物理地址善镰;
4)服務(wù)器根據(jù)對應(yīng)的Web應(yīng)用的“WEB_INF/web.xml”配置文件,查找能夠處理index.jsp的servlet;
Tomcat-配置及原理
如上圖所示:
connector負(fù)責(zé)接收客戶請求,并向客戶返回響應(yīng)結(jié)果.在同一個service中,多個connector共享同一個Engine,同一個Engine可以有多個Host,一個Host可以有多個context;一個context對應(yīng)一個web項(xiàng)目.在運(yùn)行時,一個Tomcat會給每個context生成一個ServletContext類的實(shí)例.
http://localhost:8080/test/index.jsp
提交的請求最終由一個具體的Servlet來進(jìn)行處理年枕。我們請求傳遞的過程如下
請求首先到達(dá)商品為8080的,然后把該請求交給引擎處理炫欺;
將這個請求匹配到某個去處理,因?yàn)檫@里默認(rèn)處理的是localhost画切,所以請求傳遞到name屬性是localhost的竣稽。
根據(jù)地址串中的子目錄為"test",獲知能夠處理該請求的Servlet存放在虛擬目錄為"test"的Web應(yīng)用中,于是通過查找元素霍弹,找到path="test"?的,然后根據(jù)中的物理路徑"docBase"的屬性值查找Web應(yīng)用的物理地址毫别;
服務(wù)器根據(jù)對應(yīng)的Web應(yīng)用的“WEB_INF/web.xml”配置文件,查找能夠處理index.jsp的servlet;
5典格、Tomcat配置優(yōu)化
1 ,增加JVM堆內(nèi)存大小
通過修改conf 目錄下的 catalina.sh文件
JAVA_OPTS="-Djava.awt.headless=true?-Dfile.encoding=UTF-8
-server?-Xms1024m?-Xmx1024m
-XX:NewSize=512m?-XX:MaxNewSize=512m?-XX:PermSize=512m
-XX:MaxPermSize=512m?-XX:+DisableExplicitGC"
-Xms – 指定初始化時化的棧內(nèi)存
-Xmx –?指定最大棧內(nèi)存
在重啟你的Tomcat服務(wù)器之后岛宦,這些配置的更改才會有效。
2,maxThreads?連接數(shù)限制
maxThreads 是 Tomcat 所能接受最大連接數(shù)耍缴。一般設(shè)置不要超過8000以上砾肺,如果你的網(wǎng)站訪問量非常大可能使用 ? 運(yùn)行多個Tomcat實(shí)例的方法。
maxThreads?配置要結(jié)合?JVM?-Xmx?參數(shù)調(diào)整防嗡,也就是要考慮內(nèi)存開銷变汪。
maxThreads? ? ? ? ? 客戶請求最大線程數(shù)
minSpareThreads? ? ? ? 初始化時創(chuàng)建的?socket?線程數(shù)
maxSpareThreads? ? ? ?連接器的最大空閑?socket?線程數(shù)
3,壓縮
壓縮會增加Tomcat負(fù)擔(dān),最好采用Nginx?+?Tomcat?或者?Apache?+?Tomcat?方式蚁趁,壓縮交由Nginx/Apache?去做裙盾。
compression? ? ? ? ? ? ?打開壓縮功能
compressionMinSize? ? ? ?啟用壓縮的輸出內(nèi)容大小,這里面默認(rèn)為2KB
compressableMimeType? ? ?壓縮類型
4,安全配置
1他嫡,當(dāng)Tomcat完成安裝后你首先要做的事情如下:首次安裝完成后立即刪除webapps下面的所有代碼
rm?-rf?/srv/apache-tomcat/webapps/*
注釋或刪除?tomcat-users.xml?所有用戶權(quán)限番官,看上去如下:
#?cat?conf/tomcat-users.xml
2, 隱藏版本信息
隱藏Tomcat版本信息
vim?$CATALINA_HOME/conf/server.xml
connectionTimeout="20000"
redirectPort="8443"
maxThreads="8192"
minSpareThreads="64"
maxSpareThreads="128"
acceptCount="128"
enableLookups="false"
server="Neo?App?Srv?1.0"/>
運(yùn)行 ?http://localhost:8080/
服務(wù)器信息已經(jīng)被改為?Server:?Neo?App?Srv?1.0
3钢属, 應(yīng)用程序安全
關(guān)閉war自動部署?unpackWARs="false"?autoDeploy="false"徘熔。防止被植入木馬等惡意程序
關(guān)閉?reloadable="false"?也用于防止被植入木馬
6、Tomcat配置優(yōu)化后實(shí)例
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml"/>
一組Connector和一個Engine的集合淆党,這組Connector共用一個Engine來處理所有Connector收到的請求酷师,
負(fù)責(zé)處理所獲得到的請求
-->
protocol="HTTP/1.1"
URIEncoding="UTF-8"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
connectionTimeout="20000"
acceptCount="300"
maxThreads="300"
maxProcessors="1000"
minProcessors="5"
useURIValidationHack="false"
redirectPort="8443"
server="Homeat App Srv 1.0"
/>