Tomcat概述
文章目錄
- 一、Tomcat簡介
- (1)Tomcat概述
- (2)Tomcat和Apache的比較
- (3)Tomcat同類產品
- (4)Tocmat和JDK的關系
- (5)Tomcat和JDK版本對應圖
- 二、Tomcat工作原理
- (1)Tomcat整體架構
- (2)Container組件詳解:
- (3)Tomcat處理請求過程
- (4)Tomcat中的連接器
- (5)Tomcat的目錄
- (6)Tomcat常見日志
- 三、部署Tomcat
- (1)實驗環境
- (2)實驗目的
- (3)實驗步驟
- (4)擴展—安裝mariadb數據庫配置Tomcat的manager管理界面
- (5)自定義頁面
- (6)配置Tomcat虛擬主機
- (7)同一主機做兩個實例的方法
- (8)Tomcat主機名(域名)
一、Tomcat簡介
(1)Tomcat概述
- tomcat是由apache軟件基金會下屬的jakarta項目開發的一個servlet容器,安裝SunMicrosystems提供的技術規范,實現了對servlet和javaServer Page(JSP)的支持,并提供了作為Web服務器的一些特有功能
- Tomcat可以解析靜態頁面也可以解析動態頁面 (JSP頁面) ,但是解析靜態頁面的效率沒有apache好。可以解析動態頁面是因為tomcat是java語言開發的,所以想要使用tomcat必須在服務器上安裝JDK環境
(2)Tomcat和Apache的比較
- 兩者的相同點:
- 兩者的不同點:
(3)Tomcat同類產品
- Resin服務器
- Jetty服務器
- JBoss服務器
- WebSphere服務器
- Weblogic服務器
在實際環境中,使用最多的一般是Tomcat和Weblogic
擴展:
Weblogic是Orcale公司的產品 (Orcale公司的產品都是收費的) ,可以進一步細分為Weblogic Server、Weblogic Enterprise和Weblogic Portal等系列,其中Weblogic Server的功能特別強大,Weblogic支持企業級的、多層次的和完全分布式的Web應用,并且服務器的配置簡單,界面友好,對于那些正在尋找能夠提供Java平臺所擁有的一切應用服務器的用戶來說,Weblogic是一個十分理想的選擇
(4)Tocmat和JDK的關系
- JDK是開發人員開發使用,由java語言編寫的,用來給java程序調用的
- JRE是用來運行Java程序的,也就是Java程序的運行環境
- JVM是整個Java實現跨平臺運行的最核心部分,在運行java程序時,所有的Java程序會首先被編譯成,class的類文件,這種類文件可以在虛擬機上執行,也就是說只要運行java的程序都是在JVM上面跑的
JDK包含JRE和JVM,在JDK的安裝目錄下有一個名為jre的目錄,里面有兩個文件夾bin和lib,這里的bin就是JVM,而lib中則是JVM工作所需要的類庫,bin和lib兩個文件夾合起來就是JRE。
JVM因為會與平臺進行交互,所以使用c/c++和匯編語言編寫的
JDK是java運行和編譯的前提條件,而tomcat是web項目的運行容器是由java語言開發的,java沒有JDK就沒有辦法進行編譯和運行,必須依賴JDK的環境,所以安裝Tomcat之前必須先安裝JDK環境
(5)Tomcat和JDK版本對應圖
二、Tomcat工作原理
(1)Tomcat整體架構
- Server服務器(Tomcat服務器)包含一個或多個Service服務。
- 而每個Service服務中又包含了Connector和Container兩個核心組件和其他組件。
- 核心組件Connector包含一個或多個Connector。
- 核心組件Container包含一個Container。并且可以關聯一個或者多個Connector
組件解析:
(2)Container組件詳解:
-
Engine:負責處理Connector發過來的所有請求,處理后,會將處理結果直接返回給Service,而Connector是作為Service與Engine的中間媒介出現的。
一個Engine下可以配置一個默認主機和多個虛擬主機(Host),每個虛擬主機都有一個域名,當Engine獲得一個請求時,他會把該請求匹配到某個虛擬主機host上,然后把請求交給該虛擬主機來處理。
Engine有一個默認主機,當獲得的請求無法匹配到任何虛擬主機時,這個請求最終會交給默認主機 (默認Host) 來處理。
Engine以線程的方式啟動Host,也就是說有幾個虛擬主機,Tomcat就會產生相應的線程數。
-
Host:代表一個虛擬主機,每個虛擬主機和某個網絡域名(Domain Name)相匹配。
每個虛擬主機下都可以部署一個或多個Web應用,每個Web應用對應于一個Context,有一個Context path,當Host獲得一個請求時,將把該請求匹配到某個Context上
-
Wrapper:代表一個Servlet容器,他負責管理一個Servlet,包括Servlet的裝載、初始化、執行以及資源回收。
Wrapper是最底層的容器,他沒有子容器了
(3)Tomcat處理請求過程
HTTP協議、HTTPS協議、AJP協議和其他協議的請求都是這個處理過程
(4)Tomcat中的連接器
Tomcat中支持兩種協議的連接器:HTTP/1.1和AJP/1.3和一個用來關閉Tomcat的連接器
-
HTTP/1.1協議負責建立HTTP連接,web應用通過瀏覽器訪問Tomcat服務器使用的就是這個連接器,默認監聽的端口是TCP8080端口
-
AJP/1.3協議負載和其他HTTP服務器建立連接,監聽的是TCP8009端口,比如Tomcat和apache或者iis(windows的web服務)建立連接時就會用到這個連接器
-
還有一個TCP8005的監聽端口,這個的作用是用來關閉Tomcat的,所以說Tomcat中默認有三個連接器
(5)Tomcat的目錄
| bin | 存放著啟動和關閉tomcat的腳本 |
| conf | 存放著不同的配置文件,server.xml是主配置文件 |
| doc | 存放tomcat文檔 |
| lib/japser/common | 存放tomcat運行所需要的庫文件 |
| logs | 存放tomcat運行時產生的日志文件 |
| src | 存放tomcat的源代碼 |
| webapps | tomcat默認的網頁存放路徑 |
| work | 存放jsp編譯后產生的class文件 |
- bin下的配置文件:
server.xml:Tomcat的主配置文件,包含Service、Connector、Engine、Redin、Valve、Hosts等組件的相關配置信息
web.xml:遵循Servlet規范標準的配置文,用于配置servlet,并為所有的web應用程序提供包括MIME等默認配置信息
(6)Tomcat常見日志
日志存放路徑:/usr/local/tomcat/logs/
| localhost.log | 程序異常沒有被捕獲的時候拋出的地方,記錄Tomcat異常狀態**(常用)** |
| catalina.out | 程序的輸出、Tomcat的日志輸出,記錄所有類型的日志**(常用)** |
| localhost_access_log.txt | Tomcat訪問成功日志**(常用)** |
| manager.log | 記錄Tomcat根目錄下webapps/manager項目所產生的日志 |
| host-manager.log | 記錄Tomcat根目錄下webapps/host-manager項目所產生的日志 |
三、部署Tomcat
(1)實驗環境
| CentOS7.4 | 192.168.100.202 | rzy | apache-tomcat-8.5.16.tar.gz | jdk-8u91-linux-x64.tar.gz |
(2)實驗目的
使客戶端可以成功訪問Tomcat
(3)實驗步驟
******(1)先做基礎配置 [root@Centos7 ~]# hostnamectl set-hostname rzy [root@Centos7 ~]# su [root@rzy ~]# systemctl stop firewalld [root@rzy ~]# setenforce 0 setenforce: SELinux is disabled [root@rzy ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 寫保護,將以只讀方式掛載 mount: /dev/sr0 已經掛載或 /mnt 忙/dev/sr0 已經掛載到 /mnt 上******(2)上傳Tomcat和JDK的壓縮包,先安裝JDK環境 [root@rzy ~]# ll 總用量 182152 -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 5147367 5月 7 17:49 apache-tomcat-8.5.16.tar.gz -rw-r--r-- 1 root root 181367942 5月 7 17:49 jdk-8u91-linux-x64.tar.gz [root@rzy ~]# rpm -qa | grep java #先查看本機是否有java [root@rzy ~]# tar xf jdk-8u91-linux-x64.tar.gz #解壓JDK包 [root@rzy ~]# mv jdk1.8.0_91/ /usr/local/java #移動解壓后目錄 [root@rzy ~]# ls /usr/local/java/ #確認是否移動成功 bin db javafx-src.zip lib man release THIRDPARTYLICENSEREADME-JAVAFX.txt COPYRIGHT include jre LICENSE README.html src.zip THIRDPARTYLICENSEREADME.txt [root@rzy ~]# cat <<a>> /etc/profile #往profile配置文件中修改全局變量PATH,增加JDK也就是java的根目錄和bin命令目錄 > export PATH=$PATH:/usr/local/java/bin:/usr/local/java > a [root@rzy ~]# source /etc/profile #執行腳本,使剛才操作生效 [root@rzy ~]# echo $PATH #查看是否成功添加路徑(優化執行路徑) /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java [root@rzy ~]# java -version #查看java版本,可以成功查看說明已經成功添加java環境 java version "1.8.0_91" Java(TM) SE Runtime Environment (build 1.8.0_91-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)******(3)安裝完JDK后安裝Tomcat [root@rzy ~]# tar xf apache-tomcat-8.5.16.tar.gz [root@rzy ~]# mv apache-tomcat-8.5.16 /usr/local/tomcat [root@rzy ~]# ls /usr/local/tomcat/ bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work [root@rzy ~]# /usr/local/tomcat/bin/startup.sh #啟動tomcat Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. [root@rzy ~]# netstat -anpt | grep java #查看端口,發現三個監聽端口,這個就是三個連接器 tcp6 0 0 :::8080 :::* LISTEN 1227/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1227/java tcp6 0 0 :::8009 :::* LISTEN 1227/java測試:(訪問服務器的8080端口)
(4)擴展—安裝mariadb數據庫配置Tomcat的manager管理界面
******(1)繼續上面的步驟 [root@rzy ~]# yum -y install mariadb-server mysql #使用yum安裝 。。。。。。 完畢! [root@rzy ~]# systemctl enable mariadb Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service. [root@rzy ~]# systemctl start mariadb [root@rzy ~]# mysqladmin -u root -p password Enter password: New password: Confirm new password: [root@rzy ~]# mysql -u root -p123123 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 5.5.56-MariaDB MariaDB ServerCopyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec)MariaDB [(none)]> exit Bye******(2)配置Tomcat的manager管理界面 [root@rzy ~]# vim /usr/local/tomcat/conf/tomcat-users.xml #末尾添加,要記得在</tomcat-users>項中添加,不然不會生效 。。。。。。44 <role rolename="manager-gui"/> #添加管理頁面的用戶認證45 <user username="tomcat" password="tomcat" roles="manager-gui"/> #添加用戶名和密碼46 </tomcat-users> 。。。。。。 保存退出 [root@rzy ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml 。。。。。。17 -->18 <Context antiResourceLocking="false" privileged="true" >19 <Valve className="org.apache.catalina.valves.RemoteAddrValve"20 allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" /> #添加所有網段都可用21 <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionF ilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>22 </Context> 。。。。。。 完畢!先進行訪問:
現在重啟tomcat
再次進行訪問:
成功查看狀態
(5)自定義頁面
[root@rzy webapps]# mkdir -p /web/webapp/ [root@rzy webapps]# vim /web/webapp/index.jsp <html><head><title>JSP TEST PAGE1 </title></head><body><% out.println("aaaaaaaaaaaaaaaa");%></body> </html> [root@rzy webapps]# vim /usr/local/tomcat/conf/server.xml #修改主配置文件,這里直接使用localhost,沒有修改域名 。。。。。。#這里刪除了注釋所以是33行,不刪除注釋是150行33 unpackWARs="true" autoDeploy="true">34 <Context docBase="/web/webapp" path="" reloadable="false"></Context> #修改網頁存放路徑35 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"36 。。。。。。 保存退出測試,驗證
(6)配置Tomcat虛擬主機
******(1)繼續上面的操作,先創建虛擬主機的目錄 [root@rzy ~]# mkdir -p /web2/webapp/ [root@rzy ~]# cp /web/webapp/index.jsp /web2/webapp/index.jsp [root@rzy ~]# sed -i 's/a/b/g' /web2/webapp/index.jsp [root@rzy ~]# cat /web2/webapp/index.jsp <html><hebd><title>JSP TEST PAGE1 </title></hebd><body><% out.println("bbbbbbbbbbbbbbbb");%></body> </html>******(2)修改配置文件 [root@rzy ~]# vim /usr/local/tomcat/conf/server.xml #以<!-- 開頭 -->結尾的都是注釋,可以自行刪除 。。。。。。 #復制Host區域,一個Host就是一個虛擬主機,域名不同然后把兩個虛擬主機的網頁存放路徑指向不同的路徑即可32 <Host name="www.aaa.com" appBase="webapps"33 unpackWARs="true" autoDeploy="true"> #設置自動識別war包,開啟自動部署34 <Context docBase="/web/webapp" path="" reloadable="false"></Context> #設置網頁存放路徑,tomcat把web應用程序映射為root URL路徑,reloadable選項建議為false35 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"36 prefix="localhost_access_log" suffix=".txt"37 pattern="%h %l %u %t "%r" %s %b" />38 39 </Host>40 <Host name="www.bbb.com" appBase="webapps"41 unpackWARs="true" autoDeploy="true">42 <Context docBase="/web2/webapp" path="" reloadable="false"></Context>43 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"44 prefix="localhost_access_log" suffix=".txt"45 pattern="%h %l %u %t "%r" %s %b" />46 47 </Host> 。。。。。。 #保存退出 [root@rzy ~]# /usr/local/tomcat/bin/shutdown.sh #重啟tomcat Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar [root@rzy ~]# /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/java Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started.測試,修改hosts文件
訪問不同的域名,要記得加端口號,發現出現兩個不同的網頁
(7)同一主機做兩個實例的方法
測試 (端口要注意修改)創建實例成功
(8)Tomcat主機名(域名)
Tomcat在給虛擬主機配置域名之后,客戶端只能訪問域名,訪問ip也是無法訪問,這樣可以防止惡意域名綁定,有的人會把自己的ip綁到某個服務器的域名,配置之后使用ip訪問是無法正常訪問的
總結
- 上一篇: 弹窗拦截小帮手------火绒
- 下一篇: 第131篇 ERC20 锁仓合约