1. 程式人生 > >tomcat核心概念及應用

tomcat核心概念及應用

Tomcat 核心元件及配置檔案解讀

Java 2 EE 計數體系包含如 Serverlet , JSP , JMX 等等。

以OpenJDK為例,當前比較常用的有1.6.0、1.7.0、1.8.0等版本,當一臺主機上有多個OpenJDK時,可使用 "alternatives" 命令設定預設使用的版本。

Java程式碼的執行:*.java(source code) --> javac --> *.class(bytecode)

JSP :Java Server Page> JSP Container : JSP + Servlet Container

基於jasper將靜態輸出的資料轉為java程式碼進行輸出,結果為servlet規範的程式碼

.jsp -->jasper--> .java --> javac --> .class --> jvm

tomcat 是JSP Container的開源實現,tomcat是 Java 2 EE 技術體系的不完整實現,tomcat在使用前需要部署Java環境。

JSP Container 技術的商業實現包括:WebSphere, WebLogic, Oc4j, Glassfish, Geronimo, JOnAS, JBoss等等

JSP Container 技術的開源實現包括:Tomcat, Jetty, Resin

Tomcat預設配置檔案及結構框架:

html語言嵌入式風格

tomcat的配置檔案:

server.xml:主配置檔案

web.xml:每個webapp只有“部署”後才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此檔案為所有的webapps提供預設配置

context.xml:每個web都可以專用的配置檔案,它通常由專用的配置檔案context.xml來定義,其存放位置為WEB-INF/目錄中;此檔案為所有的webapps提供預設配置

tomcat-users.xml:使用者認證的賬號和密碼檔案

tomcat的主配置檔案及各元件的框架結構詳解

tomcat主配置檔案的預設配置例項:

<?xml version='1.0' encoding='utf-8'?>

<Server port="8005" shutdown="SHUTDOWN">

<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">

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

</Engine>

</Service>

</Server>

元件詳解:每個元件都由一個Java“類”實現,這些元件大體可分為以下幾個型別:

頂級元件:Server

一個Server可包含多個Service代表tomcat instance,即表現出的一個java程序;監聽在8005埠,只接收“SHUTDOWN”。

各server監聽的埠不能相同,因此,在同一物理主機啟動多個例項時,需要修改其監聽埠為不同的埠

服務類元件:Service

一個Service中僅能有一個Engine

一個Engine可對應多個Connector,但一個Connector僅能對應一個Engine用於實現將一個或多個connector元件關聯至一個engine元件

聯結器元件:http, https, ajp

負責接收請求,常見的有三類http/https/ajp;

進入tomcat的請求可分為兩類:

1. standalone : 請求來自於客戶端瀏覽器;

2. 由其它的web server反代:來自前端的反代伺服器;

nginx --> http connector --> tomcat

httpd(proxy_http_module) --> http connector --> tomcat

httpd(proxy_ajp_module) --> ajp connector --> tomcat

Connector屬性

port="8080"

protocol="HTTP/1.1"

connectionTimeout="20000"

address:監聽的IP地址;預設為本機所有可用地址

maxThreads:最大併發連線數,預設為200

enableLookups:是否啟用DNS查詢功能

acceptCount:等待佇列的最大長度

容器類:Engine, Host, Context

一個Engine中可包含多個Host,一個Host中可包含多個Context

Engine元件:Servlet例項,即servlet引擎,其內部可以一個或多個host元件來定義站點,通常需要通過defaultHost來定義預設的虛擬主機

Engine屬性

name=" "

defaultHost="localhost"

jvmRoute=" "

Host元件:位於engine內部用於接收請求並進行相應處理的主機或虛擬主機

Host屬性

1. appBase:此Host的webapps的預設存放目錄(/var/lib/tomcat/webapps),指存放非歸檔的web應用程式的目錄或歸檔的WAR檔案目錄路徑;可以使用基於$CATALINA_BASE變數所定義的路徑的相對路徑

2. autoDeploy:在Tomcat處於執行狀態時,將某webapp放置於appBase所定義的目錄中時,是否自動將其部署至tomcat。