Tomcat的服務器介紹

下面內容部分網上摘抄。謝謝原作者無私的奉獻。

環境搭建完之後,就是需要tomcat的配置了,那先了解下tomcat是什麼,可以幹嘛。

Tomcat 是由 Apache 開發的一個 Servlet 容器,實現了對Servlet 和 JSP 的支持,並提供了作爲Web服務器的一些特有功能,如Tomcat管理和控制平臺、安全域管理和Tomcat閥等。

由於 Tomcat 本身也內含了一個 HTTP 服務器,它也可以被視作一個單獨的 Web 服務器。但是,不能將 Tomcat 和 Apache HTTP 服務器混淆,ApacheHTTP 服務器是一個用 C 語言實現的 HTTP Web 服務器;這兩個 HTTPweb server 不是捆綁在一起的。Tomcat 包含了一個配置管理工具,也可以通過編輯XML格式的配置文件來進行配置。

B/S工作流程

上面主要可以看到分兩個部分,一個是HTTP請求,一個是HTTP響應。

請求分兩種:動態請求和靜態請求。

動態請求:jsp、cgi、asp、php

靜態請求:html、htm

什麼是WEB容器:處理動態請求,可以直接連接數據庫。

1.1       tomcat主要目錄

/bin – Tomcat: 腳本存放目錄(如啓動、關閉腳本)。 *.sh 文件用於 Unix 系統; *.bat 文件用於 Windows 系統。

/conf – Tomcat: 配置文件目錄。

/lib--Tomcat:tomcat服務器所需要的各個庫文件

/logs – Tomcat: 默認日誌目錄。

/webapps – Tomcat:web應用程序存放的目錄,web項目保存到此目錄即可發佈。

/work-- Tomcat:臨時文件夾,生成所有的臨時文件(*.java、*.class)

1.2       Web工程發佈的目錄結構

|-- myWebApp# 站點根目錄

 |-- META-INF # META-INF 目錄

 | `--MANIFEST.MF # 配置清單文件

 |-- WEB-INF # WEB-INF 目錄

 | |-- classes# class文件目錄

 | | |--*.class # 程序需要的class 文件

 | | `-- *.xml# 程序需要的xml 文件

 | |-- lib # 庫文件夾

 | | `-- *.jar# 程序需要的jar

| `-- web.xml # Web應用程序的部署描述文件

 |-- <userdir># 自定義的目錄

 |-- <userfiles># 自定義的資源文件

 

myWebApp:工程發佈文件夾。其實每個 war 包都可以視爲 myWebApp的壓縮包。

META-INF:META-INF 目錄用於存放工程自身相關的一些信息,元文件信息,通常由開發工具,環境自動生成。

WEB-INF:Java web應用的安全目錄。所謂安全就是客戶端無法訪問,只有服務端可以訪問的目錄。

/WEB-INF/classes:存放程序所需要的所有 Java class 文件。

/WEB-INF/lib:存放程序所需要的所有 jar 文件。

/WEB-INF/web.xml:web 應用的部署配置文件。它是工程中最重要的配置文件,它描述了 servlet和組成應用的其它組件,以及應用初始化參數、安全管理約束等。

查看服務是否已經安裝好,先測一下。在瀏覽器輸入你的公網ip:8080,出現下面網頁表示安裝成功。

1.3      server.xml 配置

server.xml的結構:

注意:Service中可以有多個Connector元素,Host中可以有多個Context元素。

1.3.1        Server元素

Server 元素表示整個 Catalina servlet 容器。

因此,它必須是 conf/server.xml 配置文件中的根元素。它的屬性代表了整個 servlet 容器的特性。

表 2‑1 Server屬性表

屬性

描述

備註

className

這個類必須實現org.apache.catalina.Server接口。

默認 org.apache.catalina.core.StandardServer

address

服務器等待關機命令的TCP / IP地址。如果沒有指定地址,則使用localhost。

port

服務器等待關機命令的TCP / IP端口號。設置爲-1以禁用關閉端口。

shutdown

必須通過TCP / IP連接接收到指定端口號的命令字符串,以關閉Tomcat。

1.3.2        Service元素

Service元素表示一個或多個連接器組件的組合,這些組件共享一個用於處理傳入請求的引擎組件。Server 中可以有多個 Service

表2‑ 2‑2 Service屬性表

屬性

描述

備註

className

這個類必須實現org.apache.catalina.Service接口。

默認 org.apache.catalina.core.StandardService

name

此服務的顯示名稱,如果您使用標準 Catalina 組件,將包含在日誌消息中。與特定服務器關聯的每個服務的名稱必須是唯一的。

實例 - conf/server.xml 配置文件示例

<?xml version="1.0" encoding="UTF-8"?>

<Serverport="8080"shutdown="SHUTDOWN">

<Servicename="xxx">

...

</Service>

</Server>

1.3.3        Executor元素

Executor表示可以在Tomcat中的組件之間共享的線程池。

 表2‑3 Executor 屬性表

屬性

描述

備註

className

這個類必須實現org.apache.catalina.Executor接口。

默認 org.apache.catalina.core.StandardThreadExecutor

name

線程池名稱。

要求唯一, 供Connector元素的executor屬性使用

namePrefix

線程名稱前綴。

maxThreads

最大活躍線程數。

默認200

minSpareThreads

最小活躍線程數。

默認25

maxIdleTime

當前活躍線程大於minSpareThreads時,空閒線程關閉的等待最大時間。

默認60000ms

maxQueueSize

線程池滿情況下的請求排隊大小。

默認Integer.MAX_VALUE

<Servicename="xxx">

  <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"maxThreads="300"minSpareThreads="25"/>

</Service>

1.3.4        Connector元素

Connector代表連接組件。Tomcat 支持三種協議:HTTP/1.1、HTTP/2.0、AJP。

表2‑4Connector屬性表

屬性

說明

備註

asyncTimeout

Servlet3.0規範中的異步請求超時

默認30s

port

請求連接的TCP Port

設置爲0,則會隨機選取一個未佔用的端口號

protocol

協議. 一般情況下設置爲 HTTP/1.1,這種情況下連接模型會在NIO和APR/native中自動根據配置選擇

URIEncoding

對URI的編碼方式.

如果設置系統變量org.apache.catalina.STRICT_SERVLET_COMPLIANCE爲true,使用 ISO-8859-1編碼;如果未設置此係統變量且未設置此屬性, 使用UTF-8編碼

useBodyEncodingForURI

是否採用指定的contentType而不是URIEncoding來編碼URI中的請求參數

以下屬性在標準的Connector(NIO, NIO2 和 APR/native)中有效:

 表2‑5標準的Connector屬性表

屬性

說明

備註

acceptCount

當最大請求連接maxConnections滿時的最大排隊大小

默認100,注意此屬性和Executor中屬性maxQueueSize的區別.這個指的是請求連接滿時的堆棧大小,Executor的maxQueueSize指的是處理線程滿時的堆棧大小

connectionTimeout

請求連接超時

默認60000ms

executor

指定配置的線程池名稱

keepAliveTimeout

keeAlive超時時間

默認值爲connectionTimeout配置值.-1表示不超時

maxConnections

最大連接數

連接滿時後續連接放入最大爲acceptCount的隊列中. 對 NIO和NIO2連接,默認值爲10000;對 APR/native,默認值爲8192

maxThreads

如果指定了Executor, 此屬性忽略;否則爲Connector創建的內部線程池最大值

默認200

minSpareThreads

如果指定了Executor, 此屬性忽略;否則爲Connector創建線程池的最小活躍線程數

默認10

processorCache

協議處理器緩存Processor對象的大小

-1表示不限制.當不使用servlet3.0的異步處理情況下: 如果配置Executor,配置爲Executor的maxThreads;否則配置爲Connnector的maxThreads. 如果使用Serlvet3.0異步處理, 取maxThreads和maxConnections的最大值

1.3.5          Context元素

Context元素表示一個Web應用程序,它在特定的虛擬主機中運行。每個Web應用程序都基於Web應用程序存檔(WAR)文件,或者包含相應的解包內容的相應目錄,如Servlet規範中所述。

 

屬性

說明

備註

altDDName

web.xml部署描述符路徑

默認 /WEB-INF/web.xml

docBase

Context的Root路徑

和Host的appBase相結合, 可確定web應用的實際目錄

failCtxIfServletStartFails

同Host中的failCtxIfServletStartFails, 只對當前Context有效

默認爲false

logEffectiveWebXml

是否日誌打印web.xml內容(web.xml由默認的web.xml和應用中的web.xml組成)

默認爲false

path

web應用的context path

如果爲根路徑,則配置爲空字符串(""), 不能不配置

privileged

是否使用Tomcat提供的manager servlet

reloadable

/WEB-INF/classes/ 和/WEB-INF/lib/ 目錄中class文件發生變化是否自動重新加載

默認爲false

swallowOutput

true情況下, System.out和System.err輸出將被定向到web應用日誌中

默認爲false

1.3.6          Engine元素

Engine元素表示與特定的Catalina服務相關聯的整個請求處理機器。它接收並處理來自一個或多個連接器的所有請求,並將完成的響應返回給連接器,以便最終傳輸回客戶端。

 表2‑6  Engine元素

屬性

描述

備註

defaultHost

默認主機名,用於標識將處理指向此服務器上主機名稱但未在此配置文件中配置的請求的主機。

這個名字必須匹配其中一個嵌套的主機元素的名字屬性。

name

此引擎的邏輯名稱,用於日誌和錯誤消息。

在同一服務器中使用多個服務元素時,每個引擎必須分配一個唯一的名稱。

1.3.7          Host元素

Host元素表示一個虛擬主機,它是一個服務器的網絡名稱(如“www.mycompany.com”)與運行Tomcat的特定服務器的關聯。

 

屬性

說明

備註

name

名稱

用於日誌輸出

appBase

虛擬主機對應的應用基礎路徑

可以是個絕對路徑, 或${CATALINA_BASE}相對路徑

xmlBase

虛擬主機XML基礎路徑,裏面應該有Context xml配置文件

可以是個絕對路徑, 或${CATALINA_BASE}相對路徑

createDirs

當appBase和xmlBase不存在時,是否創建目錄

默認爲true

autoDeploy

是否週期性的檢查appBase和xmlBase並deploy web應用和context描述符

默認爲true

deployIgnore

忽略deploy的正則

deployOnStartup

Tomcat啓動時是否自動deploy

默認爲true

failCtxIfServletStartFails

配置爲true情況下,任何load-on-startup>=0的servlet啓動失敗,則其對應的Contxt也啓動失敗

默認爲false

1.3.8          Cluster元素

由於在實際開發中,我從未用過Tomcat集羣配置,所以沒研究。

1.4        部署方式

這種方式要求本地必須安裝 Tomcat 。

將打包好的 war 包放在 Tomcat 安裝目錄下的 webapps 目錄下,然後在 bin 目錄下執行 startup.bat (windows)或 startup.sh(linux) ,Tomcat 會自動解壓 webapps 目錄下的 war 包。

成功後,可以訪問 http://公網IP:8080/xxx (xxx 是 war 包文件名)。

注意:

以上步驟是最簡單的示例。步驟中的 war 包解壓路徑、啓動端口以及一些更多的功能都可以修改配置文件來定製 (主要是 server.xml或 context.xml 文件)。

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