Tomcat部署Web服務器及基礎功能配置

前言

Tomcat作為一款網站服務器,目前市面上Java程序使用的比較多,作為運維工人,有必要了解一款如何去運行Java環境的網站服務。

目錄

一、Java相關介紹

1. Java歷史

2. Java跨平臺服務

3. Java實現動態網頁功能

3.1 servelt

3.2 jsp

4. JDK?

4.1 JDK和JRE關系

4.2 虛擬機各種版本

4.2.1?Oracle JDK

4.2.2?OpenJDK

5. Web架構

5.1?web資源和訪問

5.2?后臺應用架構

二、Tomcat部署

1. 歷史介紹

2. 官網地址

3. 架構

4. 部署

4.1 部署Java環境

4.2 安裝Tomcat

4.2.1 基于包安裝tomcat

4.2.2 二進制安裝tomcat

4.3 啟動Tomcat

4.4 指定用戶管理Tomcat?

5. 配置文件介紹及核心組件

5.1?配置文件

5.1.1 日志文件?

5.2 組件

5.2.1 組件分層和分類

5.2.2 核心組件?

5.2.3 tomcat 處理請求過程

5.3 項目站點訪問

5.4 主頁文件的優先級?

6.?打包jar包實際操作


一、Java相關介紹

1. Java歷史

Java語言最早是在1991年開始設計的,最初叫Oak項目,它初衷是跑在不同機頂盒設備中的。Sun公司第一個Java公開版本1.0發布于1996年。口號是"一次編寫,到處運行"(Write once,Run anywhere),跨平臺運行。后來被Oracle甲骨文公司收購,他有一款程序叫做java虛擬機,類似我們平時使用的VMware等虛擬機。但是也存在部分區別:

VisualBox、VMware就屬于系統虛擬機,用來模擬系統。他們完全是對物理計算機的仿真。提供了一個可以運行完整操作系統的軟件平臺。

Java虛擬機是典型的程序虛擬機,專門為執行單個計算機程序而設計,在Java虛擬機中執行的指令我們稱為Java字節碼指令。無論是系統虛擬機還是程序虛擬機,在上面運行的軟件都唄限制于虛擬機提供的資源中。

2. Java跨平臺服務

同一個JAVA程序(JAVA字節碼的集合),通過JAVA虛擬機(JVM)運行于各大主流操作系統平臺比如Windows、CentOS、Ubuntu等。程序以虛擬機為中介,來實現跨平臺。

圖示:

由于各種操作系統ABl不一樣,采用編譯方式,需要為不同操作系統編譯成相應格式的二進制程序才能運行。 java程序寫好后,使用java的編譯器,編譯成字節碼(二進制文件),運行在java虛擬機上,再編譯成各個系統的的執行文件。??

3. Java實現動態網頁功能

3.1 servelt

本質是一段java程序,用于擴展服務器功能,原理就是在java程序中嵌入html語言。其作用就是將java的動態效果和靜態頁面組合成一個特定的文件,即外面是java語言,里面是html語言。在Web服務器上形成一個靜態頁面交給Nginx傳給代理端最終到達客戶端。在Servlet中最大的問題是,HTML輸出和java代碼混在一起,如果網頁布局要調整,Java源代碼就需要隨之進行調整,對于開發人員來說就是噩夢。

3.2 jsp

為了解決servelt弊端,衍生出了jsp技術,jsp是一種用于開發動態Web內容的Java技術。它允許開發人員在HTML頁面中嵌入Java代碼,從而能夠生成動態內容。果網頁布局需要調整,JAVA源代碼不需要很大的調整。當然了,最后jsp文件還是要轉換成servelt,jsp相當于提供了另外的模板。

綜上:

Servlet主要用于處理HTTP請求和生成動態內容;Servlet可以直接與請求和響應對象交互,因此非常適合處理復雜的業務邏輯和動態內容生成。JSP用于創建動態Web頁面,JSP頁面會被轉換成 Servlet,并且在用戶請求時動態生成HTML內容。ervlet和JSP通常一起使用以構建完整的 Java Web 應用程序。Servlet處理后端邏輯,而JSP負責前端頁面呈現,二者相輔相成,共同構建出功能強大的動態Web應用程序。

4. JDK?

4.1 JDK和JRE關系

Java Development Kit(JDK)是Java編程語言的軟件開發工具包。它提供了編譯、調試和運行 Java 程序所需的工具和庫。JDK包括Java運行時環境(JRE),以及用于開發Java應用程序的編譯器、調試器和其他工具。 JDK還包含了許多類庫和支持文件。

JDK 的核心組件包括:

  • Java 編譯器(javac):用于將 Java 源代碼編譯成 Java 字節碼文件。
  • Java 運行時環境(JRE):用于執行 Java 應用程序的運行時環境。
  • 開發工具(如調試器、性能分析器等):用于開發和調試 Java 應用程序。
  • Java 類庫:包括標準的 Java 類和接口,以及支持文件,可幫助開發人員構建各種類型的應用程序。

架構圖示:?

4.2 虛擬機各種版本

4.2.1?Oracle JDK

安裝oracle官方JDK:

官方下載鏈接:

#注意需要注冊登錄后,才能下載JDK,這里只能下載8版本的,后面版本收費
https://www.oracle.com/java/technologies/downloads/#java8

(1) Oracle JDK的rpm安裝:?

① 準備rpm包,yum安裝

[root@localhost data]# ls
jdk-8u291-linux-x64.rpm
[root@localhost data]# yum install jdk-8u291-linux-x64.rpm -y
已安裝:jdk1.8.x86_64 2000:1.8.0_291-fcs 
[root@localhost data]# rpm -q jdk1.8.x86_64
jdk1.8-1.8.0_291-fcs.x86_64

② 查看當前系統中Java的版本信息

[root@localhost data]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)

③ 設置環境變量

將默認環境變量openjdk修改為oraclejdk,Oracle JDK相較于OpenJDK更加穩定。

[root@localhost data]# which java
/usr/bin/java
[root@localhost data]# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 3月   1 12:10 /usr/bin/java -> /etc/alternatives/java
#系統自帶的java不是剛剛安裝的java,所以需要修改環境變量[root@localhost data]# find / -name javac
/var/lib/alternatives/javac
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.402.b06-1.el7_9.x86_64/bin/javac
/usr/java/jdk1.8.0_291-amd64/bin/javac
[root@localhost data]# cd /usr/java/jdk1.8.0_291-amd64/bin/
#查看執行文件[root@localhost ~]# vim /etc/profile78 export JAVA_HOME=/usr/java/default               #指明變量,java程序目錄79 export PATH=$JAVA_HOME/bin:$PATH                 #指明PATH路徑變量80 export JRE_HOME=$JAVA_HOME/jre ?                 #指向Java運行時環境(JRE)的安裝目錄,非必要項81 export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/  #層級目錄,非必要項[root@localhost ~]# . /etc/profile
[root@localhost ~]# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
#后期所有安裝的jdk將變成oraclejdk

(2) Oracle JDK的二進制文件安裝:

二進制安裝屬于編譯安裝的一種,只是沒有執行make install。

① 準備二進制包解壓

[root@localhost data]# ls
jdk-8u291-linux-x64.tar.gz
[root@localhost data]# tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local/

② 創建軟鏈接,設置環境變量

[root@localhost data]# cd /usr/local/
[root@localhost local]# ls
bin  etc  games  include  jdk1.8.0_291  lib  lib64  libexec  sbin  share  src
[root@localhost local]# ln -s jdk1.8.0_291/ jdk[root@localhost local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre 
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
[root@localhost local]# . /etc/profile

③ 查看當前系統中Java的版本信息

[root@localhost local]# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
[root@localhost local]# which java
/usr/local/jdk/bin/java
4.2.2?OpenJDK

在CentOS中,可以使用yum倉庫安裝openjdk:

[root@localhost ~]# yum list "*jdk*"
#查看可以安裝哪些版本[root@localhost ~]# yum -y install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64
#安裝jdk環境[root@localhost ~]# java -version
openjdk version "1.8.0_402"
OpenJDK Runtime Environment (build 1.8.0_402-b06)
OpenJDK 64-Bit Server VM (build 25.402-b06, mixed mode)
#查看版本

5. Web架構

在Tomcat的Web架構中,資源是指Web應用程序中的組件,例如HTML、CSS、JavaScript文件、圖像、Servlet和JSP等。這些資源在Tomcat中存儲在特定目錄結構中,以供訪問和處理。

5.1?web資源和訪問

圖示:

PC端或移動端瀏覽器訪問:從靜態服務器請求HTML、CSS、JS等文件發送到瀏覽器端,瀏覽器端接收后渲染在瀏覽器上,從圖片服務器請求圖片資源顯示,從業務服務器訪問動態內容,動態內容是請求后臺服務訪問數據庫后得到的,最終返回到瀏覽器端。

手機 App訪問:內置了HTML和JS文件,不需要從靜態WEB服務器下載JS或HTML。為的就是減少文件的發送,現代前端開發使用的文件太多或太大了,按需從圖片服務器請求圖片,從業務服務器請求動態數據。用戶需求多樣,更多的內容還是需要由業務服務器提供,業務服務器往往都是由一組服務器組成。 ?

5.2?后臺應用架構

圖示:

① 單體應用架構

傳統架構(單機系統)。一個項目一個工程:比如商品、訂單、支付、庫存、登錄、注冊等等,統一部署,一個進程。即所有的服務部署在一臺服務器上,并且代碼存放在一起,這樣缺點顯然很明顯,一個板塊完成度很慢會影響整個項目上線,同時項目完成打包成一個文件夾,這個文件夾會非常臃腫;另外,只要有一個板塊故障,會影響全部架構。

  • all in one的架構方式,把所有的功能單元放在一 個應用里。然后把整個應用部署到一臺服務器上。如果負載能力不行,將整個應用進行水平復制,進行擴展,然后通過負載均衡實現訪問
  • Java實現: JSP、 Servlet,打包成一個jar. war部署
  • 易于開發和測試:也十分方便部署:當需要擴展時,只需要將war復制多份,然后放到多個服務器上,再做個負載均衡就可以了
  • 如果某個功能模塊出問題,有可能全站不可訪問,修改Bug后、某模塊功能修改或升級后,需要停掉整個服務,重新整體重新打包、部署這個應用war包,功能模塊相互之間耦合度高,相互影響,不適合當今互聯網業務功能的快速迭代
  • 特別是對于一個大型應用,我們不可能吧所有內容都放在一個應用里面,我們如何維護、如何分工合作都是問題。如果項目龐大,管理難度大
  • web應用服務器:開源的tomcat. jetty. glassfish。 商用的有weblogic、websphere. Jboss

②?微服務與soa基本理念差不多,只是微服務更細 ?

SOA:拆分功能模塊,比如支付、訂單、庫存、登錄進行拆分,這樣就需要四臺服務器支持。最根本的是,這些模塊之間的聯動、數據如何交互成為了開發的難題,自然成本也將升高。所以逐漸被市場淘汰。?

Microservice:一臺服務器軟件系統被劃分為一組小型、獨立部署的服務,歸功于容器技術的興盛,給微服務帶來了極大的便利。微服務化的核心就是將傳統的一站式應用,根據業務拆分成一個一個的服務,徹底去掉耦合,每一個微服務提供單個業務功能,一個服務只做一件事。每個服務都圍繞著具體業務進行構建,并且能夠被獨立地部署到生產環境、類生產環境等。從技術角度講就是一種小而獨立的處理過程,類似與進程的概念,能夠自行單獨啟動或銷毀;分布式系統中,不同的服務可以使用各自獨立的數據庫。

二、Tomcat部署

1. 歷史介紹

Apache Tomcat,通常簡稱為Tomcat,是一個免費的開放源代碼的Web應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,Tomcat具有處理HTML頁面的功能,它還是一個Servlet和JSP容器 ,由Apache軟件基金會開發和維護。Tomcat的主要功能是實現和提供Java Servlet和JavaServer Pages(JSP)的運行環境。

2. 官網地址

官網: Apache Tomcat? - Welcome!

官網文檔: Apache Tomcat 8 (8.5.99) - Documentation Index

幫助文檔:

Apache Tomcat Home - Apache Tomcat - Apache Software Foundation

FAQ - Apache Tomcat - Apache Software Foundation

3. 架構

4. 部署

4.1 部署Java環境

部署tomcat首先要安裝jdk,環境部署在前文已經介紹,這里就不過多贅述,可以參考4.2.1?Oracle JDK,總體步驟如下:

① 解壓安裝包

② 創建軟鏈接,設置環境變量

③ 測試java(java -version)

4.2 安裝Tomcat

4.2.1 基于包安裝tomcat
[root@localhost ~]# yum list tomca
可安裝的軟件包
tomcat.noarch                                       7.0.76-16.el7_9
#這里版本太老了,不建議使用yum安裝
4.2.2 二進制安裝tomcat

CentOS 7 的yum源的tomcat版本老舊,而CentOS8 yum源里無tomcat。目前比較主流的Tomcat是8和9版本,推薦從Apache官網下載二進制tomcat包進行安裝,此為生產常用方式。

官方和鏡像站點下載:

https://tomcat.apache.org/download-80.cgi
https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/

① 解壓安裝包

[root@localhost data]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u291-linux-x64.tar.gz
[root@localhost data]# tar xf apache-tomcat-9.0.16.tar.gz 
[root@localhost data]# ls
apache-tomcat-9.0.16  apache-tomcat-9.0.16.tar.gz  jdk-8u291-linux-x64.tar.gz
[root@localhost data]# cp -r apache-tomcat-9.0.16 /usr/local/

② 創建軟鏈接,后期可多版本部署tomcat

[root@localhost data]# cd /usr/local/
[root@localhost local]# ln -s apache-tomcat-9.0.16/ tomcat
[root@localhost local]# ls
apache-tomcat-9.0.16  bin  etc  games  include  jdk  jdk1.8.0_291  lib  lib64  libexec  sbin  share  src  tomcat

③ 定義環境變量

[root@localhost local]# vim /etc/profile
83 export CATALINA_HOME=/usr/local/tomcat
[root@localhost local]# . /etc/profile

注意:如果已經設置了JAVA_HOME環境變量,那么在安裝Tomcat時,按需設置CATALINA_HOME環境變量即可。?

4.3 啟動Tomcat

① 啟動tomcat

[root@localhost local]# cd tomcat/
[root@localhost tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@localhost tomcat]# cd bin/
[root@localhost bin]# ls
bootstrap.jar       commons-daemon.jar            digest.sh         shutdown.sh           tool-wrapper.sh
catalina.bat        commons-daemon-native.tar.gz  makebase.bat      startup.bat           version.bat
catalina.sh         configtest.bat                makebase.sh       startup.sh            version.sh
catalina-tasks.xml  configtest.sh                 setclasspath.bat  tomcat-juli.jar
ciphers.bat         daemon.sh                     setclasspath.sh   tomcat-native.tar.gz
ciphers.sh          digest.bat                    shutdown.bat      tool-wrapper.bat[root@localhost bin]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

② 檢查端口

[root@localhost local]# ss -natp | grep java
LISTEN     0      100         :::8080                    :::*                   users:(("java",pid=2370,fd=57))
LISTEN     0      1         ::ffff:127.0.0.1:8005                    :::*                   users:(("java",pid=2370,fd=82))
LISTEN     0      100         :::8009                    :::*                   users:(("java",pid=2370,fd=62))

關于端口:?

  • 8080:默認接收http請求的端口
  • 8005:安全端口,可以關閉tomcat
  • 8009:apache和tomcat聯動ajp協議

③ 訪問8080

頁面地址:/usr/local/tomcat/webapps/ROOT/index.jsp

注意:當目錄下存在index.html,訪問頁面會優先識別index.html。

④ 關閉tomcat

[root@localhost bin]# pwd
/usr/local/tomcat/bin
[root@localhost bin]# bash shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

4.4 指定用戶管理Tomcat?

① 新建用戶

[root@localhost bin]# useradd -s /sbin/nologin tomcat
[root@localhost bin]# chown -R tomcat:tomcat /usr/local/tomcat
[root@localhost bin]# ll /usr/local/tomcat
lrwxrwxrwx. 1 tomcat tomcat 21 3月   1 14:47 /usr/local/tomcat -> apache-tomcat-9.0.16/
#修改屬主屬組

② 修改systemd服務的配置文件?

[root@localhost bin]# vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
After=syslog.target network.target[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat[Install]
WantedBy=multi-user.target[root@localhost bin]# systemctl daemon-reload  #重新加載配置

③ 文件夾授權,啟動tomcat并查看端口號

[root@localhost local]# chown tomcat:tomcat /usr/local/tomcat/ -R
[root@localhost local]# systemctl start tomcat
[root@localhost local]# ss -natp | grep tomcat
#由于tomcat運行在java虛擬機內,所以無法過濾
[root@localhost local]# ss -natp | grep 8080
LISTEN     0      100         :::8080                    :::*                   users:(("java",pid=39410,fd=54))

5. 配置文件介紹及核心組件

5.1?配置文件

安裝目錄下文件介紹:

目錄名字功能
bin存放啟動和關閉 Tomcat 的腳本文件,比較常用的是 catalina.sh、startup.sh、shutdown.sh 三個文件
conf存放 Tomcat 服務器的各種配置文件,比較常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四個文件。
lib存放 Tomcat 服務器的 jar 包,一般不作任何改動,除非連接第三方服務,比如 redis,那就需要添加相對應的 jar 包
logs存放 Tomcat 日志 catalina.out
temp存放 Tomcat 運行時產生的文件
webapps存放項目資源的目錄
workTomcat 工作目錄,一般清除 Tomcat 緩存的時候會使用到(升級版本時注意要刪除里面的緩存)

work工作目錄結構:

[root@localhost ~]# cd /usr/local/tomcat/work/
[root@localhost work]# ls
Catalina
[root@localhost work]# tree
.
└── Catalina└── localhost├── docs├── examples├── host-manager├── manager└── ROOT└── org└── apache└── jsp├── index_jsp.class    #字節碼└── index_jsp.java     #java程序

瀏覽器訪問192.168.190.102:8080/test.jsp?,再次查看查看目錄結構:

[root@localhost work]# tree
.
└── Catalina└── localhost├── docs├── examples├── host-manager├── manager└── ROOT└── org└── apache└── jsp├── index_jsp.class├── index_jsp.java├── test_jsp.class└── test_jsp.java10 directories, 4 files

由此看到jsp緩存目錄多了兩個文件,當java運行動態程序的時候,需要先轉成class碼再去執行java程序。如果執行過一次頁面訪問,會把所需的文件緩存在jsp這個文件夾中,從而加速二次訪問。

當升級tomcat失敗,如:a1版本升級到a2版本后,依然是a1,會是什么原因?

在a1版本是,每次運行會在緩存目錄形成類似于a1.java和a1.class文件;如果沒有清理緩存,當拿到a2升級包將其放入到webapps中,運行后依然訪問原來的頁面,將原來的緩存文件刪除即可。當升級上線前,可以預熱訪問生成新的緩存文件,加入用戶訪問速度。最后定義覆蓋原來的軟鏈接。

conf子目錄 :

文件名說明
server.xml主配置文件,全局生效。/usr/local/tomcat/conf/server.xml
web.xml每個webapp只有“部署"后才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認部署相關的配置,每個web應用也可以使用專用配置文件,來覆蓋全局文件
context.xml用于定義所有web應用均需加載的Context配置,此文件為所有的webapps提供默認配置,每個web應用也可以使用自已專用的配置,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中,覆蓋全局的文件
tomcat-users.xml用戶認證的賬號和密碼文件
catalina.policy當使用security選項啟動omcat時,用于為tomcat設置安全策略
catalina.propertiesTomcat環境變量的配置,用于設定類加載器路徑,以及一些與JVM調優相關參數
logging.propertiesTomcat日志系統相關的配置,可以修改日志級別和日志路徑等
5.1.1 日志文件?

參考文檔: https://cwiki.apache.org/confluence/display/TOMCAT/Logging

日志格式: Apache Tomcat 9 Configuration Reference (9.0.86) - The Valve Component

日志目錄:

[root@localhost ~]# cd /usr/local/tomcat/logs/
[root@localhost logs]# ls
catalina.2024-03-01.log              #tomcat服務日志
host-manager.2024-03-01.log          #host manager管理日志
localhost_access_log.2024-03-01.txt  #默認主機訪問日志
catalina.out                         #tomcat服務日志    
localhost.2024-03-01.log             #默認主機日志
manager.2024-03-01.log               #manager管理日志

查看訪問日志格式:

[root@localhost ~]# tail /usr/local/tomcat/conf/server.xmlDocumentation at: /docs/config/valve.htmlNote: The pattern used is equivalent to using pattern="common" --><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" />   #說明: &quot;在html
中表示雙引號"符號,此行可以修改日志格式</Host></Engine></Service>
</Server>

5.2 組件

Tomcat本身是由多個組件組成的。

5.2.1 組件分層和分類
  • 頂級組件:Server,代表整個Tomcat容器,一臺主機可以啟動多tomcat 實例 ,需要確保端口不要產生沖突
  • 服務類組件:Service,實現組織Engine和Connector,建立兩者之間關聯關系, service 里面只能包含一個Engine
  • 連接器組件:Connector,有HTTP(默認端口8080/tcp)、HTTPS(默認端口8443/tcp)、AJP(默認端口8009/tcp)協議的連接器,AJP(Apache Jserv protocol)是一種基于TCP的二進制通訊協議。
  • 容器類:Engine、Host(虛擬主機)、Context(上下文件,解決路徑映射)都是容器類組件,可以嵌入其它組件,內部配置如何運行應用程序。
  • 內嵌類:可以內嵌到其他組件內,valve、logger、realm、loader、manager等。以logger舉例,在不同容器組件內分別定義。
  • 集群類組件:istener、cluster

① 首先開啟 tomcat進程,會有server產生?

② 然后產生 一個 service管理組件管理所有其他組件的

③ 用戶發送請求httpd請求過來,connector連接器(默認監聽)接收到此請求, 會轉交給engine (引擎)

④ engine(引擎) 會處理請求, 遍歷host(虛擬主機)會交給客戶訪問的host, 如果找不到交給默認的 host 會根據 上下文 context (上下文) 映射關系 去找相對應的文件

⑤ 找到文件后,交給JSP生成代碼, 再交給servlet生成html,原路返回反饋給用戶

5.2.2 核心組件?
名稱說明
serverTomcat中的Server代表整個Tomcat服務器實例。它可以包含多個Service,并負責啟動和停止整個Tomcat服務器
service服務,用來組織Engine(引擎)和Connector(連接器,端口)的對應關系,一個service中只有一個Engine;Service是Tomcat中的一個抽象概念,它代表了一個具體的服務,通常對應于一個網絡連接器(如HTTP)。每個Service可以包含多個Connector,用于處理不同協議或端口的連接。
connector連接器,負責客戶端的HTTP、HTTPS、AJP等協議連接。一個Connector只屬于某一個Engine。它負責監聽特定的網絡端口,并將傳入的請求傳遞給Engine進行處理。Tomcat支持多種類型的Connector,包括基于HTTP/1.1、基于HTTP/2以及基于AJP協議的Connector。
Engine即引擎,用來響應并處理用戶請求。一個Engine上可以綁定多個Connector,一個Tomcat實例通常只有一個Engine,它可以包含多個虛擬主機(Host)。
HostHost代表Tomcat中的虛擬主機,每個Host可以包含多個Web應用程序。它允許在單個Tomcat實例上托管多個域名或主機名對應的應用程序。
Context配置特定url路徑映射和目錄的映射關系: url => directory;Context代表了Web應用程序的上下文,它定義了一個Web應用程序的運行環境。每個Web應用程序都有自己的Context,其中包含了該應用程序的配置信息、Servlet映射、會話管理等。
5.2.3 tomcat 處理請求過程

① 接收請求:當Tomcat服務器接收到來自客戶端的HTTP請求時,它會將請求傳遞給適當的組件進行處理。
② Web容器處理:請求首先被傳遞給Tomcat的Web容器。Web容器根據請求的URL確定是哪個應用程序的請求,并將其傳遞給該應用程序。
③ Servlet處理:如果請求是針對Servlet的,Web容器會在部署的應用程序中查找匹配的Servlet,并將請求傳遞給該Servlet進行處理。
④ JSP處理:如果請求是針對JSP頁面的,Web容器會將其編譯為Servlet,然后按照Servlet的處理方式進行處理。
⑤ 請求處理:Servlet或JSP頁面處理請求并生成響應。這可能包括從數據庫檢索數據、執行業務邏輯等。
⑥ 響應返回:生成的響應被發送回Tomcat服務器。
⑦ 發送響應:Tomcat服務器將響應發送回給客戶端,完成整個請求-響應周期。

5.3 項目站點訪問

Tomcat中,"ROOT"是默認的上下文路徑(context path)。當用戶訪問Tomcat服務器的根目錄時,實際上是在訪問部署在名為"ROOT"的默認Web應用程序。

疑問:新建項目文件夾,訪問路徑是否要發生變化?

① 默認項目ROOT新建web文件,webapps文件夾新建test目錄,新建web文件,

[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
docs  examples  host-manager  manager  ROOT[root@localhost webapps]# cd ROOT/
[root@localhost ROOT]# ls
asf-logo-wide.svg  bg-nav.png    index.jsp          tomcat.css  tomcat-power.gif
bg-button.png      bg-upper.png  RELEASE-NOTES.txt  tomcat.gif  tomcat.svg
bg-middle.png      favicon.ico   test.jsp           tomcat.png  WEB-INF
[root@localhost ROOT]# echo ROOT > index.html[root@localhost webapps]# mkdir test
[root@localhost webapps]# cd test/
[root@localhost test]# echo test > index.html
[root@localhost test]# ls
index.html

② 訪問網頁

?

③ 小結

從上面訪問結果來看,ROOT是默認站點目錄,可以省略。以項目為站點,webapps中每個文件夾代表一個站點,當不指明站點時,會直接去默認站點找web文件;如果指定站點目錄,將去該站點目錄下尋找匹配文件。

5.4 主頁文件的優先級?

在Tomcat中,主頁文件的優先級規定了服務器在用戶訪問Web應用程序時應該加載哪個文件作為默認頁面。這種優先級順序的設定有助于確保用戶能夠快速地找到并瀏覽網站的內容,同時也提供了一種靈活的方式來組織和展示Web應用程序的內容。

默認優先級:

[root@localhost ~]# vim /usr/local/tomcat/conf/web.xml
4704     <welcome-file-list>
4705         <welcome-file>index.html</welcome-file>
4706         <welcome-file>index.htm</welcome-file>
4707         <welcome-file>index.jsp</welcome-file>
4708     </welcome-file-list>

示例:自定義test項目主頁文件優先級

① 復制WEB-INF至test項目中

[root@localhost ROOT]# cd
[root@localhost ~]# cd /usr/local/tomcat/webapps/ROOT/
[root@localhost ROOT]# ls
asf-logo-wide.svg  bg-nav.png    index.html         test.jsp    tomcat.png        WEB-INF
bg-button.png      bg-upper.png  index.jsp          tomcat.css  tomcat-power.gif
bg-middle.png      favicon.ico   RELEASE-NOTES.txt  tomcat.gif  tomcat.svg
[root@localhost ROOT]# cp -r WEB-INF/ /usr/local/tomcat/webapps/test/

② 編輯模板配置文件

[root@localhost WEB-INF]# vim /usr/local/tomcat/webapps/test/WEB-INF/web.xml30   <welcome-file-list>31      <welcome-file>index.jsp</welcome-file>32      <welcome-file>index.html</welcome-file>33      <welcome-file>index.htm</welcome-file>34    </welcome-file-list>

③ 新建jsp文件,修改文件夾WEB-INF屬性

[root@localhost test]# ls
index.html  WEB-INF
[root@localhost test]# echo jsp > index.jsp
[root@localhost test]# chown tomcat:tomcat WEB-INF/ -R

④ 訪問站點目錄

6.?打包jar包實際操作

.war:WebApp打包,類zip格式文件,通常包括一個應用的所有資源,如jsp,html,配置文件等

.jar:EJB類文件的打包壓縮類zip格式文件,包括很多的class文件,網景公司發明

.rar:資源適配器類打包文件,目前已不常用

.ear:企業級WebApp打包,目前已不常用

在實際生產中,我們不需要寫jar包,只需要將jar包放到webapps文件夾下某一個項目內即可,并且jar包放在這里后會自動解壓,自動部署項目,不需要額外操作。

示例:模擬jar包

① 模擬文件打包成jar包

[root@localhost fql]# echo jsp > test.jsp
[root@localhost fql]# echo html > test.html
[root@localhost fql]# ls
test.html  test.jsp
[root@localhost fql]# jar cvf /fql/app1.war *        ##打包
已添加清單
正在添加: test.html(輸入 = 5) (輸出 = 7)(壓縮了 -40%)
正在添加: test.jsp(輸入 = 4) (輸出 = 6)(壓縮了 -50%)
[root@localhost fql]# ls
app1.war  test.html  test.jsp

② 拷貝jar包至webapps文件夾

[root@localhost fql]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
docs  examples  host-manager  manager  ROOT  test
[root@localhost webapps]# cp /fql/app1.war .
[root@localhost webapps]# ls
app1.war  docs  examples  host-manager  manager  ROOT  test
[root@localhost webapps]# ls
app1  app1.war  docs  examples  host-manager  manager  ROOT  test
#不需要新建項目app1,jar包自動部署

③ 查看項目站點文件

[root@localhost webapps]# ls app1
META-INF  test.html  test.jsp

④?下線只要刪除war包直接自動刪除?

[root@localhost webapps]# rm -rf app1.war 
[root@localhost webapps]# ls
app1  docs  examples  host-manager  manager  ROOT  test
[root@localhost webapps]# ls
docs  examples  host-manager  manager  ROOT  test

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714261.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714261.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Revit-二開之創建TextNote-(1)

Revit二開之創建TextNote TextNode在Revit注釋模塊中&#xff0c;具體位置如圖所示 圖中是Revit2018版本 【Revit中的使用】 Revit 中的操作是點擊上圖中的按鈕在平面視圖中點擊任意放置放置就行&#xff0c; 在屬性中可以修改文字 代碼實現 創建TextNode ExternalComm…

Web Tomcat

目錄 1 前言2 Tomcat的安裝3 Tomcat文件的構成4 Tomcat的使用步驟 1 前言 Tomcat是一個 http(web)的容器&#xff0c;籠統的理解一下所有的網站都叫做web。這個web容器可以把我們的前端(htmlcssjs)和后端(servlet)代碼都運行起來。 Tomcat是一個免費的開源的Servlet容器&#…

Flutter中的三棵樹

Widget Tree&#xff1a; 頁面配置信息。 Element Tree&#xff1a; Widget tree的實例化對象&#xff0c;創建出renderObject&#xff0c;并關聯到element.renderobject屬性上&#xff0c;最后完成RenderObject Tree的創建。 RenderObject Tree&#xff1a;完成布局和圖層繪制…

【C++ 函數重載】

C 函數重載 ■ C 函數重載簡介■ C 運算符重載■ 一元運算符重載■ 二元運算符重載 &#xff08;&#xff0c;-&#xff0c;*&#xff0c;/&#xff09;■ 關系運算符重載 &#xff08; < 、 > 、 < 、 > 、 等等&#xff09;■ 輸入/輸出運算符重載&#xff08;運…

【嵌入式學習】網絡編程day03.02

一、項目 1、TCP機械臂測試 #include <myhead.h> #define SER_IP "192.168.126.32" #define SER_PORT 8888 #define CER_IP "192.168.126.42" #define CER_PORT 9891 int main(int argc, const char *argv[]) {int wfd-1;//創建套接字if((wfdsocke…

ubuntu創建賬號和samba共享目錄

新建用于登錄Ubuntu圖形界面的用戶 sudo su #切換為root用戶獲取管理員權限用于新建用戶 adduser username #新建用戶&#xff08;例如用戶名為username&#xff09; adduser username sudo #將用戶添加到 sudo 組 新建只能用于命令行下登錄的用戶 sudo su #切換為root用戶…

《TCP/IP詳解 卷一》第8章 ICMPv4 和 ICMPv6

目錄 8.1 引言 8.1.1 在IPv4和IPv6中的封裝 8.2 ICMP 報文 8.2.1 ICMPv4 報文 8.2.2 ICMPv6 報文 8.2.3 處理ICMP報文 8.3 ICMP差錯報文 8.3.1 擴展的ICMP和多部報文 8.3.2 目的不可達和數據包太大 8.3.3 重定向 8.3.4 ICMP 超時 8.3.5 參數問題 8.4 ICMP查詢/信息…

劃分開始結束位置設置標記

劃分開始結束位置 初始音軌如下圖所示 在想開始地方單擊左鍵&#xff0c;長按直到你想要的結束位置松開。就可以劃分開始和結束位置 設置標記 方式1 &#xff1a;直接點擊該圖標 方式二&#xff1a;使用快捷鍵M 設置標記點可以自定義名稱方便檢索標記點

javaWebssh酒店客房管理系統myeclipse開發mysql數據庫MVC模式java編程計算機網頁設計

一、源碼特點 java ssh酒店客房管理系統是一套完善的web設計系統&#xff08;系統采用ssh框架進行設計開發&#xff09;&#xff0c;對理解JSP java編程開發語言有幫助&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統主要采用B/S模式開發。開發環境為TOMCAT7.0…

STL容器之string類

文章目錄 STL容器之string類1、 什么是STL2、STL的六大組件3、string類3.1、string類介紹3.2、string類的常用接口說明3.2.1、string類對象的常見構造3.2.2、string類對象的容量操作3.2.3、string類對象的訪問及遍歷操作3.2.4、 string類對象的修改操作3.2.5、 string類非成員函…

車輛維護和燃油里程跟蹤器LubeLogger

什么是 LubeLogger &#xff1f; LubeLogger 是一個自托管、開源、基于網絡的車輛維護和燃油里程跟蹤器。 LubeLogger 比較適合用來跟蹤管理您的汽車的維修、保養、加油的歷史記錄&#xff0c;比用 Excel 強多了 官方提供了在線試用&#xff0c;可以使用用戶名 test 和密碼 123…

oracle-long類型轉clob類型及clob類型字段的導出導入

1、若oracle數據庫表字段類型有long類型&#xff0c;有時候我們需要模糊匹配long類型字段時&#xff0c;是查詢不出來結果的&#xff0c;此時使用TO_LOB&#xff0c;將long類型轉成clob類型&#xff0c;就可以模糊匹配信息。 例如&#xff1a;oracle數據庫查詢所有視圖內容中包…

機器學習-4

文章目錄 前言數組創建切片索引索引遍歷切片編程練習 總結 前言 本篇將介紹數據處理 Numpy 庫的一些基本使用技巧&#xff0c;主要內容包括 Numpy 數組的創建、切片與索引、基本運算、堆疊等等。 數組創建 在 Python 中創建數組有許多的方法&#xff0c;這里我們使用 Numpy 中…

機器學習-5

文章目錄 前言Numpy庫四則運算編程練習 前言 本片將介紹Numpy庫中的四則運算。 Numpy庫四則運算 Numpy庫可以直接進行一些四則運算&#xff0c;快速的處理兩個Numpy數組&#xff1a; a np.array([[1,2,3],[4,5,6]]) b np.array([[4,5,6],[1,2,3]])向量與向量之間 1.加法 …

14.最長公共前綴

題目&#xff1a;編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴&#xff0c;返回空字符串""。 解題思路&#xff1a;橫向掃描&#xff0c;依次遍歷每個字符串&#xff0c;更新最長公共前綴。另一種方法是縱向掃描。縱向掃描時&#xff0c;從前…

基于tomcat的JavaWeb實現

Tomcat服務器 免費&#xff0c;性能一般的服務器 安裝配置 基于Java&#xff0c;故需要配置環境變量&#xff0c;新加系統路徑JAVA_HOME&#xff0c;路徑為jdk的主目錄。 而后打開bin目錄下的startup.bat文件出現如下窗口說明配置成功 idea繼承tomcat服務器 使用java開發…

Linux 之壓縮與解壓相關命令的基礎用法

目錄 1、zip 與 unzip 2、gzip 命令 3、tar 命令 1、zip 與 unzip 在桌面新建一個文件和文件夾用于測試 在 test 目錄下有一個 1.txt 文件 我們使用 zip 命令對其壓縮 用法&#xff1a; zip 自定義壓縮包名 被壓縮文件路徑位置 zip myon.zip 1.txt 因為我們這里就是在 …

linux_day04

大綱&#xff1a;命令&#xff0c;vim&#xff0c;gcc&#xff0c;編譯工具&#xff0c;生成代碼&#xff0c;調試&#xff0c;庫makefile&#xff0c;系統編程 文件系統&#xff1a;文件屬性&#xff0c;文件內容&#xff0c;萬物皆文件&#xff08;不在內存中的是文件&#…

ProtoBuf 是什么?

1. 序列化概念 序列化和反序列化 序列化&#xff1a;把對象轉換為字節序列的過程稱為對象的序列化。 反序列化&#xff1a;把字節序列恢復為對象的過程稱為對象的反序列化。 什么情況下需要序列化 存儲數據&#xff1a;當你想把的內存中的對象狀態保存到?個?件中或者存到數…

怎么壓縮成mp4視頻?

在數字化時代&#xff0c;視頻已經成為我們日常生活中不可或缺的一部分。然而&#xff0c;有時候我們可能會遇到視頻文件太大的問題&#xff0c;不便于傳輸、存儲或分享。那么&#xff0c;如何將視頻壓縮成MP4格式&#xff0c;以減小文件大小呢&#xff1f;本文將為您介紹幾種簡…