目錄
1. tomcat概述
1.1 概念
1.2 官網地址
2. 基本使用
2.1下載
3. 整體架構
3.1 核心組件
3.2 從web.xml配置和模塊對應角度
3.3 如何處理請求
4. 配置JVM參數
5. 附錄
1. tomcat概述
1.1 概念
什么是tomcat
Tomcat是一個開源、免費、輕量級的Web服務器。
????????Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規范總是能在Tomcat 中得到體現,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 規范。因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛并得到了部分軟件開發商的認可,成為比較流行的Web 應用服務器。
什么是Web服務器
Web服務器是安裝在服務端的一款軟件,它對HTTP協議的操作進行了封裝使得程序員不必直接對協議進行相關操作,讓Web開發變得更加便捷。Web服務器的主要功能就是提供網上信息瀏覽服務,當我們將自己寫的Web項目部署道Web服務器上,只要啟動Web服務器,就能直接通過瀏覽器訪問我們的Web項目了。
目前比較有名的Web服務器有:Apache、Nginx、ISS。
拓展
- Tomcat和Apache的聯系:Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行
- Tomcat僅支持JDBC、JSP、Servlet等少量JavaEE規范1
- 因為Tomcat支持Servlet/JSP規范,所以Tomcat也被稱為Web容器、Servlet容器。Servlet需要依賴Tomcat才能運行。
- Web服務器、服務端、服務器的區別和聯系:
- 服務器是一種特殊的計算機,它比普通計算機運行更快、負載更高、價格更貴,屬于硬件范疇;
- 服務端是是指為客戶端提供服務的計算機,服務的內容諸如:提供數據的保存、數據的訪問……屬于硬件范疇;
- Web服務器是指安裝再服務端的一款軟件,主要功能是提供網上信息瀏覽服務,但是只能響應HTTP的請求數據,屬于軟件范疇。
- 能讓你寫的網站被所有人訪問的三要素:服務器+域名+網站
1.2 官網地址
Apache Tomcat? - Welcome!
文件目錄
目錄 | 文件 | 說明 |
bin | / | 可執行文件目錄 |
startup.bat , startup.sh | 存放Tomcat的啟動、停止等批處理腳本文件 啟動: startup.bat ./startup.sh | |
shutdown.bat , shutdown.sh | 用于在windows和linux下的停止腳本 終止: shutdown.bat ./shutdown.sh | |
conf | / | 用于存放Tomcat的相關配置文件 |
Catalina | 用于存儲針對每個虛擬機的Context配置 | |
context.xml | 用于定義所有web應用均需加載的Context配 置,如果web應用指定了自己的context.xml ,該文件將被覆蓋 | |
catalina.properties | Tomcat 的環境變量配置 | |
catalina.policy | Tomcat 運行的安全策略配置 | |
logging.properties | Tomcat 的日志配置文件, 可以通過該文件修 改Tomcat 的日志級別及日志路徑等 | |
server.xml | Tomcat 服務器的核心配置文件 | |
tomcat-users.xml | 定義Tomcat默認的用戶及角色映射信息配置 | |
web.xml | Tomcat 中所有應用默認的部署描述文件, 主 要定義了基礎Servlet和MIME映射。 | |
lib | / | Tomcat 服務器的依賴包 |
logs | / | Tomcat 默認的日志存放目錄 |
webapps | / | Tomcat 默認的Web應用部署目錄 |
work | / | Web 應用JSP代碼生成和編譯的臨時 |
2. 基本使用
2.1下載
關于zip、tar.gz詳解
tomcat下載以及各個版本(zip,tar.gz,32-bit Windows zip,64-bit Windows zip,32-bit/64-bit Windows Service Instal_tomcat的tar.gz與zip-CSDN博客
3. 整體架構
?
3.1 核心組件
Catalina的各個組件的作用如下:
-
Server: 表示服務器,它提供了一種優雅的方式來啟動和停止整個系統,不必單獨啟停連接器和容器;它是Tomcat構成的頂級構成元素,所有一切均包含在Server中;
-
Service: 表示服務,Server可以運行多個服務。比如一個Tomcat里面可運行訂單服務、支付服務、用戶服務等等;Server的實現類StandardServer可以包含一個到多個Services, Service的實現類為StandardService調用了容器(Container)接口,其實是調用了Servlet Engine(引擎),而且StandardService類中也指明了該Service歸屬的Server;
-
Connector: 表示連接器, 它將Service和Container連接起來,首先它需要注冊到一個Service,它的作用就是把來自客戶端的請求轉發到Container(容器),這就是它為什么稱作連接器, 它支持的協議如下:
- 支持AJP協議
- 支持Http協議
- 支持Https協議
-
Service內部還有各種支撐組件,下面簡單羅列一下這些組件
- Manager -- 管理器,用于管理會話Session
- Logger -- 日志器,用于管理日志
- Loader -- 加載器,和類加載有關,只會開放給Context所使用
- Pipeline -- 管道組件,配合Valve實現過濾器功能
- Valve -- 閥門組件,配合Pipeline實現過濾器功能
- Realm -- 認證授權組件
-
Container: 表示容器,可以看做Servlet容器;引擎(Engine)、主機(Host)、上下文(Context)和Wraper均繼承自Container接口,所以它們都是容器。
- Engine --?表示整個Catalina的Servlet引擎,用來管理多個虛擬站點,一個Service最多只能有一個Engine,但是一個引擎可包含多個Host。
- Host --?代表一個虛擬主機或者說一個站點,可以給Tomcat配置多個虛擬主機地址,而一個虛擬主機下可包含多個Context。
- Context --?表示一個Web應用程序, 一個Web應用可包含多個Wrapper。
- Wrapper --?表示一個Servlet,Wrapper 作為容器中的最底層,不能包含子容器。
3.2 從web.xml配置和模塊對應角度
<?xml version="1.0" encoding="UTF-8"?><Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><GlobalNamingResources><Resource name="UserDatabase" auth="Container"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" /></GlobalNamingResources><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"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><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 "%r" %s %b" /></Host></Engine></Service>
</Server>
3.3 如何處理請求
啟動流程
啟動流程主要分為兩塊內容:
1)初始化:解析Server.xml文件,生成Server等實例,并對Connector和Container等進行初始化操作。
2)啟動:調用start()方法啟動Connector和Container等。其中Container部分,context啟動的時候會解析web.xml,并觸發contextConfig這個監聽器,從而創建wrapper容器,初始化Servlet實例,如果該Servlet標識了loadOnStartup那么在start()過程中將會調用其init()方法進行Servlet初始化。
從tomcat的啟動流程圖,我們可以看到它和我們日常編寫webapp應用接入點就在于創建Servlet的容器,所以我們的業務代碼就是基于Servlet編寫,使用tomcat則無需關心Servlet如何對外提供服務,簡化了開發流程。
通過一個完整的HTTP請求,我們還需要把它貫穿起來
假設來自客戶的請求為:http://localhost:8080/test/index.jsp 請求被發送到本機端口8080,被在那里偵聽的Coyote HTTP/1.1 Connector,然后
- Connector把該請求交給它所在的Service的Engine來處理,并等待Engine的回應
- Engine獲得請求localhost:8080/test/index.jsp,匹配它所有虛擬主機Host
- Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機)
- localhost Host獲得請求/test/index.jsp,匹配它所擁有的所有Context
- Host匹配到路徑為/test的Context(如果匹配不到就把該請求交給路徑名為""的Context去處理)
- path="/test"的Context獲得請求/index.jsp,在它的mapping table中尋找對應的servlet
- Context匹配到URL PATTERN為*.jsp的servlet,對應于JspServlet類,構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet或doPost方法
- Context把執行完了之后的HttpServletResponse對象返回給Host
- Host把HttpServletResponse對象返回給Engine
- Engine把HttpServletResponse對象返回給Connector
- Connector把HttpServletResponse對象返回給客戶browser
處理請求流程
4. 配置JVM參數
方法一? 直接修改catalina文件
# 打開 catalina.sh 文件
vim $CATALINA_HOME/bin/catalina.sh# 找到或添加 JAVA_OPTS 變量設置
# 在 cygwin=false 之前添加以下內容
JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx1024m -XX:+UseG1GC"# 保存并關閉文件
# 重啟 Tomcat
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
方法二??使用CATALINA_OPTS
環境變量
在Tomcat的啟動腳本中,你可以通過設置CATALINA_OPTS
環境變量來添加JVM參數。
對于Linux/Unix:
1. 使用CATALINA_OPTS環境變量
在Tomcat的啟動腳本中,可以通過設置CATALINA_OPTS環境變量來添加JVM參數。
找到Tomcat安裝目錄下的bin目錄。
打開setenv.sh文件(如果不存在,可以自己創建一個)
在文件中添加或修改CATALINA_OPTS變量,例如:
export CATALINA_OPTS="-Xms512M -Xmx1024M -XX:MaxPermSize=256m"
保存文件并重新啟動Tomcat。
對于Windows:
找到Tomcat安裝目錄下的bin目錄。
打開setenv.bat文件(如果不存在,你可以自己創建一個)。
在文件中添加或修改CATALINA_OPTS變量,例如:
set CATALINA_OPTS=-Xms512M -Xmx1024M -XX:MaxPermSize=256m
保存文件并重新啟動Tomcat。
5. 附錄
Spring MVC是如何和Tomcat關聯到一塊的