1、Tomcat 介紹
自從 JSP 發佈之後,推出了各式各樣的 JSP 引擎。Apache Group 在完成 GNUJSP1.0 的開發以後,開始考慮在 SUN 的 JSWDK 基礎上開發一個可以直接提供 Web 服務的 JSP 服務器,當然同時也支持 Servlet, 這樣 Tomcat 就誕生了。
Tomcat 是 Apache 軟件基金會(Apache Software Foundation)的 Jakarta 項目中的一個核心項目,由 Apache、Sun 和其他一些公司及個人共同開發而成。其被 JavaWorld 雜誌的編輯選爲 2001 年度最具創新的 Java 產品,同時它又是 sun 公司官方推薦的 Servlet和 JSP 容器,因此其越來越多的受到軟件公司和開發人員的喜愛。由於有了 Sun 的參與和支持,最新的 Servlet 和 JSP 規範總是能在 Tomcat 中得到體現,Tomcat 5 支持最新的Servlet 2.4 和 JSP 2.0 規範。因爲 Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛並得到了部分軟件開發商的認可,成爲目前比較流行的 Web 應用服務器。
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 服務器。
2、Tomcat 核心組件
通常意義上的 Web 服務器接受請求後,只是單純地響應靜態資源,如 HTML 文件,圖片文件等,不能在後端進行一定的處理操作。Tomcat 是 Apache 下的一個子項目,它具備 Web服務器的所有功能,不僅可以監聽接受請求並響應靜態資源,而且可以在後端運行特定規範的 Java 代碼 Servlet,同時將執行的結果以 HTML 代碼的形式寫回客戶端。
Tomcat 由一系列的組件構成,其中核心的組件有三個:
1)Web 容器:完成 Web 服務器的功能。
2)Servlet 容器:名字爲 catalina,用於處理 Servlet 代碼。
3)JSP 容器:用於將 JSP 動態網頁翻譯成 Servlet 代碼。
3、Tomcat處理請求過程
1.用戶在瀏覽器中輸入網址localhost:8080/test/index.jsp,請求被髮送到本機端口8080,被在那裏監聽的Coyote HTTP/1.1 Connector獲得;
2.Connector把該請求交給它所在的Service的Engine(Container)來處理,並等待Engine的迴應;
3.Engine獲得請求localhost/test/index.jsp,匹配所有的虛擬主機Host;
4.Engine匹配到名爲localhost的Host(即使匹配不到也把請求交給該Host處理,因爲該Host被定義爲該Engine的默認主機),名爲localhost的Host獲得請求/test/index.jsp,匹配它所擁有的所有Context。Host匹配到路徑爲/test的Context(如果匹配不到就把該請求交給路徑名爲“ ”的Context去處理);
5.path=“/test”的Context獲得請求/index.jsp,在它的mapping table中尋找出對應的Servlet。Context匹配到URL Pattern爲*.jsp的Servlet,對應於JspServlet類;
6.構造HttpServletRequest對象和HttpServletResponse對象,作爲參數調用JspServlet的doGet()或doPost(),執行業務邏輯、數據存儲等;
7.Context把執行完之後的HttpServletResponse對象返回給Host;
8.Host把HttpServletResponse對象返回給Engine;
9.Engine把HttpServletResponse對象返回Connector;
10.Connector把HttpServletResponse對象返回給客戶Browser。
4、Tomcat目錄結構
[root@localhost ~]# ll /usr/local/tomcat/
總用量 124
drwxr-x--- 2 root root 4096 3月 7 22:34 bin
-rw-r----- 1 root root 19203 2月 5 00:32 BUILDING.txt
drwx------ 3 root root 254 3月 7 22:36 conf
-rw-r----- 1 root root 6095 2月 5 00:32 CONTRIBUTING.md
drwxr-x--- 2 root root 4096 3月 7 22:34 lib
-rw-r----- 1 root root 57092 2月 5 00:32 LICENSE
drwxr-x--- 2 root root 197 3月 7 22:36 logs
-rw-r----- 1 root root 2333 2月 5 00:32 NOTICE
-rw-r----- 1 root root 3255 2月 5 00:32 README.md
-rw-r----- 1 root root 6854 2月 5 00:32 RELEASE-NOTES
-rw-r----- 1 root root 16262 2月 5 00:32 RUNNING.txt
drwxr-x--- 2 root root 30 3月 7 22:34 temp
drwxr-x--- 7 root root 81 2月 5 00:31 webapps
drwxr-x--- 3 root root 22 3月 7 22:36 work
----------------------------------------------------------
●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 日誌
●temp
存放 Tomcat 運行時產生的文件
●webapps
存放項目資源的目錄
●work
Tomcat 工作目錄,一般清除 Tomcat 緩存的時候會使用到
5、Tomcat部署步驟
(1)宿主機將所需工具包共享出去
(2)掛載工具包並安裝JDK
在部署 Tomcat 之前必須安裝好 jdk,因爲 jdk 是 Tomcat 運行的必要環境。
[root@localhost ~]# mkdir /mnt/tools
[root@localhost ~]# mount.cifs //192.168.100.50/tools /mnt/tools #掛載共享文件到Linux本地目錄中
Password for root@//192.168.100.50/tools:
[root@localhost ~]# cd /mnt/tools/tomcat/ #進入本地目錄查看
[root@localhost tomcat]# ls
12D18CFCD6599AFF0445766ACC4CA231C5025773.torrent apache-jmeter-5.1.zip jdk-8u201-linux-x64.rpm
apache-jmeter-5.1 apache-tomcat-9.0.16.tar.gz tomcat優化壓測.jmx
[root@localhost tomcat]# rpm -ivh jdk-8u201-linux-x64.rpm #安裝JDK
(3)設置環境變量/etc/profile文件
[root@localhost tomcat]# cd /usr/java/jdk1.8.0_201-amd64/
[root@localhost jdk1.8.0_201-amd64]# pwd
/usr/java/jdk1.8.0_201-amd64 #確認JDK安裝的目錄路徑
[root@localhost jdk1.8.0_201-amd64]# vim /etc/profile
#在文件的末行追加一下三條申明條目
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
#申明java的工作目錄
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
#申明java類文件的位置
export PATH=$JAVA_HOME/bin:$PATH
#申明java環境變量
[root@localhost jdk1.8.0_201-amd64]# source /etc/profile #生效環境變量
[root@localhost jdk1.8.0_201-amd64]#
[root@localhost jdk1.8.0_201-amd64]# java -version #查看版本
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
[root@localhost jdk1.8.0_201-amd64]#
(4)安裝並啓動Tomcat服務
[root@localhost jdk1.8.0_201-amd64]# cd /mnt/tools/tomcat/
[root@localhost tomcat]# tar zxvf apache-tomcat-9.0.16.tar.gz -C /usr/local/
#解壓tomcat包到/usr/local/目錄中
[root@localhost tomcat]# cd /usr/local/
[root@localhost local]# mv apache-tomcat-9.0.16/ tomcat #改名apache-tomcat-9.0.16文件爲tomcat
[root@localhost local]# ls
bin etc games include lib lib64 libexec sbin share src tomcat
[root@localhost local]#
[root@localhost local]# cd tomcat/bin/ #切換到tomcat目錄下的bin目錄,這裏有控制tomcat服務的腳本
[root@localhost bin]# ls
bootstrap.jar ciphers.bat configtest.bat digest.sh setclasspath.sh startup.sh tool-wrapper.sh
catalina.bat ciphers.sh configtest.sh makebase.bat shutdown.bat tomcat-juli.jar version.bat
catalina.sh commons-daemon.jar daemon.sh makebase.sh shutdown.sh tomcat-native.tar.gz version.sh
catalina-tasks.xml commons-daemon-native.tar.gz digest.bat setclasspath.bat startup.bat tool-wrapper.bat
[root@localhost bin]# ln -s /usr/local/tomcat/bin/startup.sh /usr/bin/
#創建tomcat啓動腳本的軟鏈接到系統目錄中,方便系統識別
[root@localhost bin]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/bin/
#創建tomcat關閉腳本的軟鏈接到系統目錄中,方便系統識別
[root@localhost 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/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# systemctl stop firewalld.service #關閉防火牆
[root@localhost bin]# setenforce 0 #關閉增強型安全功能
[root@localhost bin]# netstat -ntap | grep 8080 #查看tomcat服務的8080端口狀態
tcp6 0 0 :::8080 :::* LISTEN 52230/java
[root@localhost bin]#
(5)瀏覽Tomcat的默認主頁
在瀏覽器中輸入http://192.168.52.132:8080即可訪問到網頁
(6)優化Tomcat啓動時間
[root@localhost bin]# cd /usr/java/jdk1.8.0_201-amd64/jre/lib/security/
[root@localhost security]# ls
blacklist blacklisted.certs cacerts java.policy java.security javaws.policy policy trusted.libraries
[root@localhost security]# vim java.security #修改java.security參數
securerandom.source=file:/dev/urandom
#檢索到random參數條目,將random修改爲urandom,以縮短啓動時間
[root@localhost security]# 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/java/jdk1.8.0_201-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.