1. 程式人生 > >web伺服器專題:tomcat(一)基礎及模組

web伺服器專題:tomcat(一)基礎及模組

Web伺服器專題:Tomcat(一)基礎及模組

針對java系的經典伺服器,打算系統的整理一下Tomcat的機制和一些原理,以此記錄。

插一則題外話,關於tomat這個名字的由來:Tomcat 名稱的由來

關於Tomcat

基礎的 tomcat 內容就不過多贅述了,基本的百度百科都可以看到,在這裡我想從catlina入手介紹一下tomcat,我想很多人剛開始接觸tomcat,不論是日誌裡,bin目錄下的腳本里,都會看見catlina這個東西,都會很困惑,什麼是 Catlina,說到 Catlina,就要介紹一些tomcat相比於Apache 的不同之處,簡單來說,Apache主要用來處理網路中的靜態資源請求(HTML,CSS、圖片等),而tomcat是專為java的servlet而生的,簡單來說就是為J2EE提供環境的, 用來解析動態的資源處理(即後端的業務處理,動態資料等)的部分就被稱為 Catlina。

tomcat 繼承了Apache 作為web伺服器的基本功能,本身包含了三個重要的組成:

處理 html, js, css等 靜態頁面的Web容器;

根據不同的請求來呼叫不同的servlet的servlet容器Catlina;

編譯jsp的引擎Jasper

其實Catlina就是一個Servlet容器,它也是tomcat區別於其他伺服器的核心,整個Tomcat最核心的事就是進行Servlet的管理和根據前端的請求進行排程。

Tomcat的目錄層級及常用檔案

首先簡單記錄一下Tomcat的檔案目錄及一些常用的檔案。

Tomcat的目錄:

|---bin://存放啟動和關閉tomcat指令碼

  |---conf://存放不同的配置檔案(server.xml和web.xml);
  |---doc://存放Tomcat文件;
  |---lib/japser/common://存放Tomcat執行需要的庫檔案(JARS);
  |---logs://存放Tomcat執行時的LOG檔案;
  |---src://存放Tomcat的原始碼;
  |---webapps://Tomcat的主要Web釋出目錄(包括應用程式示例);
  |---work://存放jsp編譯後產生的class檔案;

以上目錄中,一般我們基本開發部署中常用的基本就  bin  、conf 、logs三個,其中 tomcat 的系統級啟動shell、bat檔案均在bin目錄下,具體環境變數及啟動流程,都可以在start.sh或start.bat中檢視原始碼,這裡就不多說了,就主要說一下 conf 目錄下的檔案吧:

server.xml: Tomcat的主配置檔案,包含Service, Connector, Engine, Realm, Valve, Hosts主元件的相關配置資訊;

     web.xml:遵循Servlet規範標準的配置檔案,用於配置servlet,併為所有的Web應用程式提供包括MIME對映等預設配置資訊;

tomcat-user.xml:Realm認證時用到的相關角色、使用者和密碼等資訊;Tomcat自帶的manager預設情況下會用到此檔案;在Tomcat中新增/刪除使用者,為使用者指定角色等將通過編輯此檔案實現;

     catalina.policy:Java相關的安全策略配置檔案,在系統資源級別上提供訪問控制的能力;

     catalina.properties:Tomcat內部package的定義及訪問相關控制,也包括對通過類裝載器裝載的內容的控制;Tomcat在啟動時會事先讀取此檔案的相關設定;

     logging.properties: Tomcat6通過自己內部實現的JAVA日誌記錄器來記錄操作相關的日誌,此檔案即為日誌記錄器相關的配置資訊,可以用來定義日誌記錄的  元件級別以及日誌檔案的存在位置等;

     context.xml:所有host的預設配置資訊;

Tomcat架構

Tomcat的設計是基於模組化設計的,內部主要依賴於不同的模組元件構成, 這裡打算圖解一下Tomcat的內建元件及 一條請求的主要流程,話不多說,先上圖:

一句話簡單概括,一個tomcat只有一個Server作為根,它管理著多個Service服務,而Service服務又管理著多個Connector以及一個Container,其中核心元件為Connector以及Container。

Server元件

從圖中可以看出,一個Tomcat只能有一個Server,Server就是一個Tomcat的例項。

Service元件

Service其實是一個集合,它將Connector元件與Container元件包裝組合在一起(一個Service可以有多個Connector和一個Container),對外進行服務,而Service又是執行在Server中,也就是說,一個Tomcat可以有多個service

Connector元件

 該元件主要負責監聽指定埠的客戶端請求(不同埠對應不同的Connect元件),將Socket請求過來的資料,都封裝成Request請求物件,同時將該請求物件 傳遞給Container容器進行下一步的處理。

Container元件

Container元件才是最接近Web應用的元件,它負責根據請求進行一系列的servlet呼叫,本身Container又包含四個子容器:EngineHostContextWrapper

Container的容器組合如下圖:

Engine :引擎,用來管理多個站點, 一個Service最多隻能有一個Engine
Host :代表一個站點,也可以叫虛擬主機,通過配置Host 就可以新增站點;
Context :代表一個應用程式,即為我們開發的一個war服務在webapp目錄下的各個應用,或者一個WEB-INF 目錄以及下面的web.xml 檔案;
Wrapper :每個Wrapper 封裝著一個servlet

一次完整的流程:

1、當我們瀏覽器點選事件發生,傳送了一個http/https的請求,首先到達tomcat,即執行的例項server中

2、該請求被監聽 8080 埠的 connector監聽到,獲取請求報文後,封裝成Request請求,並將該請求發往Engine

3、Engine根據請求的url,搜尋使用哪個Host

4、當相應的Host獲取該請求後,根據請求中的地址,找尋相應的Context來處理該請求

5、Context根據其內部的對映表,獲取相應的servlet,並構造HttpServletRequest物件和HttpServletResponse物件,進行業務處理

6、Context將處理完的HttpServletResponse物件返回給Host

7、Host再將結果返回Engine

8、Engine中心排程,將結果返回給 connector

9、connector將結果返歸給客戶端

相關推薦

web伺服器專題tomcat基礎模組

Web伺服器專題:Tomcat(一)基礎及模組 針對java系的經典伺服器,打算系統的整理一下Tomcat的機制和一些原理,以此記錄。 插一則題外話,關於tomat這個名字的由來:Tomcat 名稱的由來 關於Tomcat 基礎的 tomcat 內容就不過多贅述了,基本的百度百科都可以看到,在這裡我想從cat

web伺服器專題tomcat基礎模組

Web伺服器專題:Tomcat(一)基礎及模組 針對java系的經典伺服器,打算系統的整理一下Tomcat的機制和一些原理,以此記錄。 插一則題外話,關於tomat這個名字的由來:Tomcat 名稱的由來 關於Tomcat 基礎的 tomcat 內容就不過多贅述了,基本的百度百科都可以看到,在這裡我想從cat

Java單元測試工具JUnit4——概述簡單例子

(一)JUnit概述及一個簡單例子         看了慕課網的JUnit視訊教程: http://www.imooc.com/learn/356,總結筆記。         這篇筆記記錄JUnit的

Nginx 之一 伺服器的安裝部署 LInux 環境下 Nginx 伺服器的安裝和基本配置

一、編譯和安裝前的準備工作 本部落格依賴環境: Linux Ubuntu 16.04 1.1 足夠的磁碟空間 能夠裝得下 Nginx 的軟體包和安裝檔案, 這個基本都能滿足。 1.2 需要的工具 為了編譯 Nginx 原始碼, 需要安裝標準的 GCC 編譯器。

MyEclipse開發教程使用REST Web Services管理JPA實體

MyEclipse 線上訂購年終抄底促銷!火爆開搶>> MyEclipse最新版下載 使用REST Web Services來管理JPA實體。在逆向工程資料庫表後生成REST Web服務,下面的示例建立用於管理部落格條目的簡單Web服務。你將學會: 利用資料庫逆向工程開

從Jetty、Tomcat和Mina中提煉NIO構架網路伺服器的經典模式

如何正確使用NIO來構架網路伺服器一直是最近思考的一個問題,於是乎分析了一下Jetty、Tomcat和Mina有關NIO的原始碼,發現大夥都基於類似的方式,我感覺這應該算是NIO構架網路伺服器的經典模式,並基於這種模式寫了個小小網路伺服器,壓力測試了一下,效果還不錯。廢話不多

阿里雲ECS伺服器部署HADOOP叢集Hadoop完全分散式叢集環境搭建

準備: 兩臺配置CentOS 7.3的阿里雲ECS伺服器; hadoop-2.7.3.tar.gz安裝包; jdk-8u77-linux-x64.tar.gz安裝包; hostname及IP的配置: 更改主機名: 由於系統為CentOS 7,可以直接使用‘hostnamectl set-hostname 主機

java-web中生成文檔

all 檢查 download com ftl 緩沖 getc cor tps 基於Java的解決方案也是很多的,包括使用Jacob、Apache POI、Java2Word、iText等各種方式,其實在從Office 2003開始,就可以將Office文檔轉換成XML文件

深入淺出CSSDiv

指定 增加 src 深入 lock alt 舉例 gin width 這個系列是學習筆記,簡明記錄結論性的知識。 新建一個層時,border為零,margin為0,padding為0,如果不指定寬度(width),則自動100%填充父元素。 三、層與父元素的關系 1.

Python Web框架之Django初探

python django easy_install pip Python Web框架之Django初探 Django是一個開放源代碼的Web應用框架,由Python寫成。采用了MVC的框架模式,即模型M,視圖V和控制器C。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站

JavaWebHttpSession

art except Language 不包含 ansi web服務器 ctype 信用 com Session機制: 1)、session機制采用的是在服務器端保持 HTTP 狀態信息的方案 。 2)、當程序需要為某個客戶端的請求創建一個session時,服務器首先檢

3-MongoDB 查詢

簡單 gte ted 分享圖片 string font 投影 binary ava 一、簡介 MongoDB提供了db.collection.find() 方法可以實現根據條件查詢和指定使用投影運算符返回的字段省略此參數返回匹配文檔中的所有字段。 二.db.co

安卓自動化測試Robotium測試demo

for 切換 ini too demo edittext pin dex bsp 1、下載Robotium打開: http://code.google.com/p/robotium/下載:robotium-solo-3.4.1.jar (寫測試用例時需要依賴此包)2、需要把

Web API中的路由——基本路由

名稱 nts delete nal dict quest 添加 let web api 一.Web API中的路由概念   路由的作用用一句話說明:通過request的uri找到處理該請求的Controller,Action,以及給Action的參數賦值。 web api

Vue教程簡介

被調用 所有 資源 定義 word 剖析 需要 有用 輕松 前言 用了這麽久的vue了,但是一直沒有時間寫個系列文章,現在抽一定時間總結下vue的知識點。 首先,Vue 不支持 IE8 及以下版本,因為 Vue 使用了 IE8 無法模擬的 ECMAScript 5

nginx與tomcatNginx概述

一.Nginx概述 是什麼:Nginx是一個http server 特點: 反向代理 負載均衡 動靜態資源分離 虛擬主機 什麼時候用: 當網站的訪問量到達一定程度,單個伺服器不能

Web前端-Html部分筆記

以下是我對Web前端-Html部分的筆記,因為博主也是初學Web前端,有很多東西都還停留在表層的理解,如果我的部落格有任何錯誤,請及時評論或者私信我,我會及時更改。也歡迎同樣初學Web-前端的你願意關注我的部落格,我會把我每週的學習內容進行整理和上傳,方便大家溝通和交流學習經驗。 由於是筆記

Windows Server 2012 搭建FTP伺服器的一些坑

    初衷就是想在雲伺服器上寫程式,為了使本機和雲伺服器之間傳檔案更方便,於是乎搭建FTP伺服器。總結折磨我兩天的一些坑,唉,欲哭無淚啊==     首先從一個已經搭建好的FTP伺服器上下載搭FTP伺服器必須的應用程式:FileZilla,WinRA

Socket 簡易靜態伺服器 WPF MVVM模式

主要實現功能: Socket的簡單應用 可修改IP和埠 顯示來訪資訊 介面設計: 介面採用MVVM設計,很簡陋。 前臺的主要目的是 輸入IP地址 輸入埠 輸入檔案目錄 開啟監聽和停止監聽   主頁面的XAML程式碼: <Window x:Class="簡

【餓了麼】—— Vue2.0高仿餓了麼核心模組&移動端Web App專案爬坑

前言:學習Vue.js高仿餓了麼課程過程中,總結了這個Web App專案從準備到開發完畢自己覺得很重要的知識點。這一篇主要介紹:專案準備、頁面骨架開發、header元件開發。 專案github地址:https://github.com/66Web/ljq_eleme,歡迎Star。