HTTP無狀態
META-INF是什麼,具體位置
1.Tomcat基本概念
什麼是Tomcat?
- Tomcat 是一個開源的 Java Servlet 容器,它實現了 Servlet 和 JSP 規範。Tomcat 被廣泛用於 Java Web 應用程序的部署。
Tomcat 與其他 Web 服務器(如 Nginx、Apache HTTP Server)的區別
- Tomcat 專注於 Java Servlet 和 JSP 的處理,而 Nginx 和 Apache HTTP Server 更側重於處理靜態資源和 HTTP 請求
- Tomcat 是 Java EE Web 服務器,而 Nginx 和 Apache HTTP Server 更像是傳統的 Web 服務器。
Tomcat 的核心組件
- Connector:負責接收客户端請求並將其轉發到對應的處理器(例如 Servlet)。
- Container:Tomcat 中的容器有多個層級,主要有 Engine、Host、Context 和 Wrapper。
- Engine:負責處理和調度請求的組件,通常是一個虛擬主機(virtual host)的集合。
- Host:代表一個虛擬主機(虛擬主機對應一個域名)。
- Context:代表一個 Web 應用程序。
- Wrapper:表示一個單獨的 Servlet 實例。
2.Tomcat 架構
Tomcat 的請求處理流程:
- 客户端請求到達Tomcat
- Tomcat通過Connector接收HTTP請求
- 請求被轉發到Engine進行處理
- Engine根據URL定位到HOST(虛擬主機)和Context(Web應用)
- 請求最終傳遞到對應的 Servlet 進行處理,返回響應
Tomcat 與 Servlet 容器
- Tomcat 作為 Servlet 容器,負責處理來自客户端的請求,調度合適的 Servlet 進行請求的處理
- Servlet 容器 是 Tomcat 用於管理 Servlet 生命週期、請求/響應處理和執行的核心組件。
3.Tomcat 配置
Tomcat配置文件
- server.xml:Tomcat 的主配置文件,配置連接器、虛擬主機、線程池等
- web.xml:每個 Web 應用的配置文件,用於定義 Servlet、過濾器、監聽器等組件。
- context.xml: 配置每個 Web 應用的上下文環境(可以放在 META-INF/context.xml 中)。
-
context.xml 和 server.xml 的區別
- server.xml 是 Tomcat 全局配置
- context.xml 是特定 Web 應用的配置
Tomcat的端口配置
默認的 HTTP 端口是 8080,可以在 server.xml 中修改 <Connector> 標籤中的 port 屬性。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
4.Tomcat性能調優
- 線程池配置:可以通過 server.xml 中的
<Connector>配置線程池參數,如 maxThreads、minSpareThreads 等來優化性能。
<Connector port="8080" protocol="HTTP/1.1" maxThreads="200" minSpareThreads="10" />
- JVM 參數優化:通過 setenv.sh 或 setenv.bat 文件設置 JVM 參數,調整堆內存大小,垃圾回收策略等。
export CATALINA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC"
- 啓用 GZIP 壓縮:通過在 server.xml 中啓用壓縮,減少傳輸的網絡帶寬消耗。
<Connector URIEncoding="UTF-8" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" />
5.Tomcat部署與管理
- 部署 Web 應用:將 WAR 文件放入 Tomcat 的 webapps 目錄中,Tomcat 會自動部署。
- 手動部署:可以通過 Tomcat 管理頁面(http://localhost:8080/manager)手動上傳並部署 WAR 文件
- Hot Deployment:Tomcat 支持自動重新加載功能,可以在 webapps 目錄修改文件時自動加載變更。
6.Tomcat安全性
- 防止目錄瀏覽:在 web.xml 中配置禁止目錄瀏覽。
- 防止 HTTP 請求過載:通過配置 maxConnections 限制最大連接數,防止惡意請求。
- 用户權限控制:使用 Tomcat 的用户管理機制(在 tomcat-users.xml 中配置)來控制訪問權限。
7.Tomcat 集羣與高可用性
- 集羣配置:Tomcat 支持通過配置集羣實現負載均衡、會話複製等高可用性需求。
- 負載均衡:Tomcat 本身不提供負載均衡功能,但可以通過配置 mod_jk 或 mod_proxy 等方式實現。
8.常見問題與排查
-
Tomcat 啓動失敗:
- 常見原因包括端口占用(端口 8080 被其他程序佔用)、配置錯誤、權限問題等。
- 內存泄漏:Tomcat 可能因為長時間運行或者錯誤的代碼導致內存泄漏,通常通過啓用 -XX:+HeapDumpOnOutOfMemoryError 進行堆內存轉儲來分析。
- 性能瓶頸:如果 Tomcat 響應慢,可能需要檢查 JVM 參數、線程池配置、數據庫連接池等。
9.Tomcat 相關面試問題示例
- Tomcat 的基本架構是什麼?
- Tomcat 如何處理 HTTP 請求?
- Tomcat 中的 server.xml 配置文件有哪些關鍵部分?
- 如何在 Tomcat 中配置數據庫連接池?
- 如何優化 Tomcat 的性能,提升吞吐量?
- Tomcat 的 manager 應用如何配置和使用?
- Tomcat 如何做集羣配置?
- 如何防止 Tomcat 被攻擊?
- Tomcat 的多線程處理機制是什麼?
- Tomcat 部署應用時,如果遇到 404 錯誤,如何排查?