輕鬆駕馭Tomcat

来源:http://www.cnblogs.com/aubin/archive/2017/11/12/7821345.html
-Advertisement-
Play Games

Tomcat 伺服器是一個免費的開放源代碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程式的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 伺服器,可利用它響應HTML(標準通用標記語言下的一個應用) ...


  • Tomcat 伺服器是一個免費的開放源代碼的Web 應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程式的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 伺服器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 伺服器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的。
  • 訣竅是,當配置正確時,Apache 為HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。另外,Tomcat和IIS等Web伺服器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的預設模式。不過,Tomcat處理靜態HTML的能力不如Apache伺服器。目前Tomcat最新版本為9.0。

一、Tomcat體系架構

核心組件

server:相當於一個tomcat實例。接收並解析請求信息;完成相關動作後把響應結果返回給電腦。
service:每個server包含多個service,相互獨立,僅共用JVM以及類庫。用於把連接器(connector)與引擎(engine)關連起來,且一個service只能有一個engine,但是可以有多個connector。因為engine無法直接接受連接器發來的數據。
connector:負責開啟socket並監聽客戶端請求、返迴響應數據。多個connector監聽多個埠
engine:負責具體的處理請求,connector僅僅負責監聽,收到數據後交給engine運行。
host:在ngine中可以包含多個host,每個host定義了虛擬主機
context:每個context可以部署一個web應用。一個host可以存在多個context。如果部署多個應用需要分別對每個應用裝載所依賴的庫,這個步驟可以自動可以手動。

二、Tomcat的安裝

tomcat其實就是一個JAVA程式,所以要運行在JAVA虛擬機中。要運行虛擬機就要先安裝JDK。

1.JDK的安裝

1.通過YUM安裝
yum install java-1.8.0-openjdk-devel
2.配置環境變數
vim /etc/profile.d/java.sh
 export JAVA_HOME=/usr/java/latest                  # 首先定義JAVA_HOME的環境變數
 export PATH=$JAVA_HOME/bin:$PATH                   # 然後向後追加即可

###2.Tomcat的安裝
首先要從Tomcat的官網下載Tomcat,然後上傳至伺服器解壓。 https://tomcat.apache.org

1.將下載的軟體包解壓
tar xf apache-tomcat-VERSION.tar.gz  -C /usr/local/
cd /usr/local

2.創建軟連接,或者將解壓的tomcat直接改名為tomcat也能達到同樣的效果
ln -sv apache-tomcat-VERSION  tomcat

3.添加環境變數
vim /etc/profile.d/tomcat.sh 
    export CATALINA_BASE=/usr/local/tomcat
    export PATH=$CATALINA_BASE/bin:$PATH    

4.創建tomcat需要的用戶
useradd tomcat

5.將安裝包的路徑下的所有屬組都改為tomcat
chown -R root.tomcat /usr/local/tomcat                      # 設定所有者為root,所屬組為tomcat
chown -R tomcat /usr/local/tomcat/{logs,temp,work,webapps}  # 僅將需要有寫許可權文件所有者改為tomcat
chmod g+r /usr/local/tomcat/conf                            # 預設沒有許可權,會導致啟動失敗

5.切換到tomcat用戶最後啟動服務即可
su - tomcat 
catalina.sh start                                   # 啟動tomcat。catalina.sh命令需要先添加環境變數

三、Tomcat服務的配置文件結構

bin:   腳本、以及Tomcat自身所攜帶的工具包
conf:  Tomcat服務的配置文件目錄;
lib:   庫文件,Java類庫,jar;
logs:  日誌文件目錄;
temp:  臨時文件目錄;
webapps:webapp的預設目錄;相當於頁面的根目錄。部署的應用都應該在IC目錄下
work:  工作目錄,存放編譯後的位元組碼文件;

四、部署測試頁面

創建一個測試頁面,將下麵的步驟全部做完後,通過瀏覽器訪問http://IP:8080/test 即可訪問到測試的頁面

1.創建文件夾,classes、lib、WEB-INF為一個標準應用應該有的目錄,這裡創建僅僅為了與標準看齊
mkidr  -pv  /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF}    

2.創建一個測試頁面用於檢驗Tomcat服務是否能正常提供服務
vim /usr/local/tomcat/webapps/test/index.jsp                        # 創建jsp測試頁面
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
    <head>
        <title>Test Page</title>
    /head>
<body>
    <% out.println("hello world");
    %>
</body>
</html

3.重啟服務
systemctl restart tomcat                        

4.部署完成後在webapp目錄自動生成一些目錄
cd  /usr/share/tomcat/work/Catalina             # 部署完成後自動生成的test目錄下的文件
[root@localhost Catalina]# tree .
.
└── localhost                                   # 預設主機站點
    ├── _
    ├── docs
    ├── examples
    ├── host-manager
    ├── manager
    ├── sample
    └── test                                    # webpp應用名稱。自動生成以下目錄
        └── org
            └── apache
                └── jsp
                    ├── index_jsp.class
                    └── index_jsp.java

五、Tomcat的至 配置文件

1.service組件

前面講到connecotr負責接收用戶請求,而engine負責接處理用戶請求。但是connecotr並不能與engine直接通信。所以service就是負責將connector與engine連接起來的組件

<Service name="Catalina">

2.connector組件

connector負責接收客戶端發來的請求,常見的連接有三種: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
  • httpd(mod_jk) --> ajp connector --> tomcat
    示例

    <Connector port="8080"              # 預設有兩個connector一個監聽http一個監聽ajp
    protocol="HTTP/1.1"             # 如果是http可以無需指明協議。AJP的話Protocol="AJP/1.3"
    connectionTimeout="20000"       # 超時時長,毫秒即20s
    redirectPort="8443"             # 如果請求的為SSL請求就將請求轉發至8443埠
    address:                       # 監聽的IP地址;預設為本機所有可用地址;不寫就監聽本地所有IP
    maxThreads:                    # 最大併發連接數,預設為200;
    enableLookups:                 # 是否啟用DNS查詢功能;將IP地址解析為功能變數名稱。關閉提升性能
    acceptCount:                   # 等待隊列的最大長度;
    secure:                        # =true的表示使用SSL通信
    sslProtocol:                   # 設定使用哪個SSL協議,通常在tomcat上不建議使用SSL,速度太慢
    />

3.Engine組件

Engine組件負責處理髮來的請求。
Engine是Servlet實例,即servlet引擎,其內部可以一個或多個host組件來定義站點; 通常需要通過defaultHost來定義預設的虛擬主機。
示例

<Engine name="Catalina" defaultHost="localhost">
name=Catalina                   # 引擎的名稱
defaultHost="localhost"         # 預設的響應主機站點。如果找不到合適,或者功能變數名稱不匹配選擇預設host
jvmRoute=                       # Tomcat做集群時的調度標誌,類似於HAproxy的會話標識。
                                # 在基於cookie綁定時會用到
...
<Engine>

4.Host組件

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

 <Host    name="localhost"          # 設定為主機名即可
          appBase="webapps"         # webapps的預設存放路徑(相對路徑,可以用絕對路徑)。相當站點根
          unpackWARs="true"         # true為自動展開WAR文件
          autoDeploy="true">        # 是否開啟自動部署功能。
                                    #unpackWARS、autoDeploy定義了WebAPP為WAR格式且在根下時自動部署
</Host>

5.Context組件

包含在Host標簽里。
如果在一個主機上部署多個app的話,Context就可以用來定義不同app對應的路徑。

<Context path="/PATH"                   # 網頁的RUL
docBase="/PATH/TO/SOMEDIR"              # 真實路徑。
reloadable=""/>                         # 如果為true說明可以重新裝載

6.valve組件

Valve存在多種類型:
定義訪問日誌:org.apache.catalina.valves.AccessLogValve
定義訪問控制:org.apache.catalina.valves.RemoteAddrValve

<Valve className="org.apache.catalina.valves.AccessLogValve"       # 定義記錄日誌要訪問的類
                    directory="logs"                               # 日誌文件的目錄路徑,預設在/var/log/tomcat下
                    prefix="node1_test_access_"                    # 日誌文件的首碼
                    suffix=".log"                                  # 日誌文件的尾碼
                    pattern="%h %l %u %t &quot;%r&quot; %s %b" />  # 記錄日誌的格式
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第1章 部署LNMP架構步驟 1.1 ①部署Linux系統(OK) 基本優化完成(ip地址設置 yum源更新 字元集設置) 安全優化完成(iptables關閉 selinux關閉 /tmp/ 1777) 1.2 ②部署nginx網站服務 A.安裝軟體依賴包 B.創建進程管理用戶 C.下載nginx軟 ...
  • 1.DNS服務的簡介: DNS( D omain N ame S erver,功能變數名稱伺服器)是進行功能變數名稱(domain name)和與之相對應的IP地址 (IP address)轉換的伺服器。DNS中保存了一張功能變數名稱(domain name)和與之相對應的IP地址 (IP address)的表,以解析消息 ...
  • #數學相關的函數 #導入數學的模塊 import math #floor()向下取整 result = math.floor(6.2) print(result) #ceil()向上取整 result = math.ceil(5.5) print(result) #round()四捨五入 註意:不是... ...
  • 最近筆記本重覆了好幾次奇怪的現象,重啟後進入桌面,然後死機,木有藍屏。 後來在安全模式里查了事件,如下 日誌名稱: Application 來源: Microsoft-Windows-WMI 日期: 2017-11-11 22:08:41 事件 ID: 10 任務類別: 無 級別: 錯誤 關鍵字: ...
  • 一:虛擬機外面準備工作 1-安裝好的CentOS虛擬機 2-CentOS虛擬機網路模式為NAT 3-VM-編輯-虛擬網路編輯器設置如下 4-電腦-管理-服務裡面開啟VM中的NAT和DHCP服務 二:虛擬機內部設置 1-打開CentOS 2-命令:setup (接下來是圖形配置過程) 3-回到命令界 ...
  • tomcat相關實驗 1.實現LNT 同主機實現 1、安裝並啟動tomcat 2、安裝nginx並配置 2.實現LAT 同主機(靜態網頁) 1、安裝並啟動tomcat 2、安裝httpd服務並確保有ajp_module和http_module 3、與後端tomcat使用http協議連接時配置 4、與 ...
  • 實戰一:搭建lnmp及類小米等商業網站的實現 環境:關閉防火牆,selinux 1、安裝包,開啟服務 yum -y install nginx mariadb-server php-fpm php-mysql systemctl start nginx systemctl start mariadb ...
  • 阿裡雲推送了一段簡訊:您的伺服器出現了入侵事件:挖礦進程。趕緊top一下 CPU占用率99%,好氣哦 pkill wnTKYg 先殺死再說 幾秒後又出現了,肯定有自動執行腳本 crontab -l 果然有兩個(此處沒有截圖),立馬刪掉 /var/spool/cron/ 下的所有文件, 還是出現了wn ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...