Tomcat的安裝、部署和常用組件
===============================================================================
概述:
本章將主要介紹Tomcat的安裝部署和常用組件,具體內容如下:
Tomcat的安裝及程序環境
·二進制程序包(binary)安裝啓動及程序環境
·rpm包的安裝啓動及程序環境
·Tomcat的配置文件
·JSP WebAPP的組織結構:
·webapp歸檔格式:
部署(deploy)webapp的相關操作:
tomcat自帶的兩個管理應用程序;
·manager app
·host manager
Tomcat常用組件的配置
===============================================================================
Tomcat的安裝及程序環境
1.安裝Tomcat
★Tomcat binary release:
# tar xf apache-tomcat-VERSION.tar.gz -C /usr/local/
# cd /usr/local
# ln -sv apache-tomcat-VERSION tomcat
★Base Repo:
tomcat, tomcat-lib, tomcat-admin-webapps, tomcat-webapps, tomcat-docs-webapp
2.Tomcat程序環境
★二進制歸檔展開安裝的程序環境
☉tomcat的目錄結構
bin:腳本,及啓動時用到的類;
conf:配置文件;
lib:庫文件,Java類庫,jar;
logs:日誌文件目錄;
temp:臨時文件目錄;
webapps:webapp的默認目錄;
work:工作目錄;
☉catalina.sh 啓動時的腳本會調用參數(start、stop、version,configtest)
★rpm包安裝的程序環境:
☉配置文件:
/etc/tomcat
☉webapps存放位置:/var/lib/tomcat/webapps/
examples
manager
host-manager
docs
★Tomcat的配置文件
☉server.xml:
主配置文件;
☉web.xml:
每個webapp只有“部署”後才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置爲WEB-INF/目錄中;此文件(主目錄下的)爲所有的webapps提供默認配置;
☉context.xml:
每個web都可以專用的配置文件,它通常由專用的配置文件context.xml來定義,其存放位置爲WEB-INF/目錄中;此文件爲所有的webapps提供默認配置;
☉tomcat-users.xml
用戶認證的賬號和密碼文件;
☉catalina.policy
當使用-security選項啓動tomcat時,用於爲tomcat設置安全策略;
☉catalina.properties:
Java屬性的定義文件,用於設定類加載器路徑,以及一些與JVM調優相關參數;
☉logging.properties:
日誌系統相關的配置;
3.JSP WebAPP的組織結構:
★/: webapps的根目錄
☉index.jsp:主頁;
☉WEB-INF/:
當前webapp的私有資源路徑;通常用於存儲當前webapp的web.xml和context.xml配置文件;不能通過網頁進行訪問
☉META-INF/:
類似於WEB-INF/;
☉classes/:
類文件,當前webapp所提供的類;
☉lib/:
類文件,當前webapp所提供的類,被打包爲jar格式;
4.webapp歸檔格式:
.war:webapp(多數情況下的歸檔文件)
.jar:EJB的類打包文件;
.rar:資源適配器類打包文件;
.ear:企業級webapp;
二進制程序包(binary)安裝啓動演示:
1.在官方下載tomcat的二進制程序包,並解壓到/usr/local目錄下,創建軟連接
[root@centos7 tomcat]# ls apache-tomcat-8.0.23.tar.gz # 下載的二進制程序包 [root@centos7 tomcat]# tar xf apache-tomcat-8.0.23.tar.gz -C /usr/local #解壓到/usr/local目錄中 [root@centos7 tomcat]# cd /usr/local [root@centos7 local]# ll total 0 drwxr-xr-x 9 root root 149 Dec 16 15:53 apache-tomcat-8.0.23 drwxr-xr-x. 2 root root 6 Aug 12 2015 bin drwxr-xr-x. 2 root root 6 Aug 12 2015 etc drwxr-xr-x. 2 root root 6 Aug 12 2015 games drwxr-xr-x 14 root root 151 Aug 24 22:19 http2 drwxr-xr-x. 2 root root 6 Aug 12 2015 include drwxr-xr-x. 2 root root 6 Aug 12 2015 lib drwxr-xr-x. 2 root root 6 Aug 12 2015 lib64 drwxr-xr-x. 2 root root 6 Aug 12 2015 libexec drwxr-xr-x. 2 root root 6 Aug 12 2015 sbin drwxr-xr-x. 5 root root 46 Jul 25 23:57 share drwxr-xr-x. 2 root root 6 Aug 12 2015 src [root@centos7 local]# ln -sv apache-tomcat-8.0.23 tomcat # 創建軟連接 ‘tomcat’ -> ‘apache-tomcat-8.0.23’ [root@centos7 local]# ll total 0 drwxr-xr-x 2 root root 6 Dec 16 15:54 apache-tomcat-8.0.23 drwxr-xr-x. 2 root root 6 Aug 12 2015 bin drwxr-xr-x. 2 root root 6 Aug 12 2015 etc drwxr-xr-x. 2 root root 6 Aug 12 2015 games drwxr-xr-x 14 root root 151 Aug 24 22:19 http2 drwxr-xr-x. 2 root root 6 Aug 12 2015 include drwxr-xr-x. 2 root root 6 Aug 12 2015 lib drwxr-xr-x. 2 root root 6 Aug 12 2015 lib64 drwxr-xr-x. 2 root root 6 Aug 12 2015 libexec drwxr-xr-x. 2 root root 6 Aug 12 2015 sbin drwxr-xr-x. 5 root root 46 Jul 25 23:57 share drwxr-xr-x. 2 root root 6 Aug 12 2015 src lrwxrwxrwx 1 root root 20 Dec 16 15:54 tomcat -> apache-tomcat-8.0.23
2.查看Tomcat程序環境的組成結構
[root@centos7 local]# cd tomcat/ [root@centos7 tomcat]# ll total 96 drwxr-xr-x 2 root root 4096 Dec 16 16:01 bin # 二進制程序,因爲是java程序,所以主要爲腳本 drwxr-xr-x 2 root root 4096 May 19 2015 conf # 配置文件目錄 drwxr-xr-x 2 root root 4096 Dec 16 16:01 lib # 庫文件,打包爲.jar文件 -rw-r--r-- 1 root root 56977 May 19 2015 LICENSE drwxr-xr-x 2 root root 6 May 19 2015 logs # 日誌文件 -rw-r--r-- 1 root root 1397 May 19 2015 NOTICE -rw-r--r-- 1 root root 6741 May 19 2015 RELEASE-NOTES -rw-r--r-- 1 root root 16204 May 19 2015 RUNNING.txt drwxr-xr-x 2 root root 29 Dec 16 16:01 temp # 臨時文件 drwxr-xr-x 7 root root 76 May 19 2015 webapps # 應用程序的根目錄 drwxr-xr-x 2 root root 6 May 19 2015 work # 工作目錄。 [root@centos7 tomcat]# ls bin/ bootstrap.jar catalina-tasks.xml configtest.bat digest.bat setclasspath.sh startup.bat tomcat-native.tar.gz version.bat catalina.bat commons-daemon.jar configtest.sh digest.sh shutdown.bat startup.sh tool-wrapper.bat version.sh catalina.sh commons-daemon-native.tar.gz daemon.sh setclasspath.bat shutdown.sh tomcat-juli.jar tool-wrapper.sh [root@centos7 tomcat]# ls conf/ catalina.policy catalina.properties context.xml logging.properties server.xml tomcat-users.xml tomcat-users.xsd web.xml [root@centos7 tomcat]# ls lib/ annotations-api.jar catalina.jar ecj-4.4.2.jar jasper.jar tomcat-api.jar tomcat-i18n-es.jar tomcat-jdbc.jar tomcat-util-scan.jar catalina-ant.jar catalina-storeconfig.jar el-api.jar jsp-api.jar tomcat-coyote.jar tomcat-i18n-fr.jar tomcat-jni.jar tomcat-websocket.jar catalina-ha.jar catalina-tribes.jar jasper-el.jar servlet-api.jar tomcat-dbcp.jar tomcat-i18n-ja.jar tomcat-util.jar websocket-api.jar [root@centos7 tomcat]# ls webapps/ docs examples host-manager manager ROOT [root@centos7 tomcat]# ls work/ # 每一個jsp程序在運行前要先轉化爲servlet代碼,然後編譯。整個中間過程的存放位置
3.使用catalina.sh腳本調用version參數查看版本
[root@centos7 tomcat]# bin/catalina.sh version Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Server version: Apache Tomcat/8.0.23 Server built: May 19 2015 14:58:38 UTC Server number: 8.0.23.0 OS Name: Linux OS Version: 3.18.41-1.0-Taolinux Architecture: amd64 JVM Version: 1.8.0_25-b17 JVM Vendor: Oracle Corporation
4.tomcat的啓用最好用普通用戶,所以創建tomcat用戶,並修改目錄的屬主和屬組,啓動服務,如下:
[root@centos7 tomcat]# useradd -r tomcat [root@centos7 tomcat]# chown -R tomcat.tomcat /usr/local/tomcat/* [root@centos7 tomcat]# ll total 96 drwxr-xr-x 2 tomcat tomcat 4096 Dec 16 16:01 bin drwxr-xr-x 2 tomcat tomcat 4096 May 19 2015 conf drwxr-xr-x 2 tomcat tomcat 4096 Dec 16 16:01 lib -rw-r--r-- 1 tomcat tomcat 56977 May 19 2015 LICENSE drwxr-xr-x 2 tomcat tomcat 6 May 19 2015 logs -rw-r--r-- 1 tomcat tomcat 1397 May 19 2015 NOTICE -rw-r--r-- 1 tomcat tomcat 6741 May 19 2015 RELEASE-NOTES -rw-r--r-- 1 tomcat tomcat 16204 May 19 2015 RUNNING.txt drwxr-xr-x 2 tomcat tomcat 29 Dec 16 16:01 temp drwxr-xr-x 7 tomcat tomcat 76 May 19 2015 webapps drwxr-xr-x 2 tomcat tomcat 6 May 19 2015 work # 使用tomcat用戶啓動服務 [root@centos7 tomcat]# su - tomcat -c '/usr/local/tomcat/bin/catalina.sh start' su: warning: cannot change directory to /home/tomcat: No such file or directory Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. # 提示啓動成功 # 查看端口8080,8009 [root@centos7 tomcat]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 25 *:514 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 127.0.0.1:6010 *:* LISTEN 0 128 127.0.0.1:6011 *:* LISTEN 0 25 :::514 :::* LISTEN 0 100 :::8009 :::* LISTEN 0 100 :::8080 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 ::1:631 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 ::1:6010 :::* LISTEN 0 128 ::1:6011 :::*
5.瀏覽器訪問如下:
6.編輯/etc/profile.d/配置文件,輸出CATALINA_BASE環境變量
[root@centos7 ~]# vim /etc/profile.d/tomcat.sh # 添加環境變量 export CATALINA_BASE=/usr/local/tomcat export PATH=$CATALINA_BASE/bin:$PATH [root@centos7 ~]# . /etc/profile.d/tomcat.sh # 重讀配置文件生效 [root@centos7 ~]# catalina.sh version # 查看版本 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Server version: Apache Tomcat/8.0.23 Server built: May 19 2015 14:58:38 UTC Server number: 8.0.23.0 OS Name: Linux OS Version: 3.18.41-1.0-Taolinux Architecture: amd64 JVM Version: 1.8.0_25-b17 JVM Vendor: Oracle Corporation
--------------------------------------------------------------------------------
Base Repo安裝啓動演示:
1.安裝程序包
[root@centos7 ~]# yum list all tomcat* # 查看tomcat相關程序包如下: Available Packages tomcat.noarch 7.0.54-2.el7_1 CDROM tomcat-admin-webapps.noarch 7.0.54-2.el7_1 CDROM tomcat-docs-webapp.noarch 7.0.54-2.el7_1 CDROM tomcat-el-2.2-api.noarch 7.0.54-2.el7_1 CDROM tomcat-javadoc.noarch 7.0.54-2.el7_1 CDROM tomcat-jsp-2.2-api.noarch 7.0.54-2.el7_1 CDROM tomcat-jsvc.noarch 7.0.54-2.el7_1 CDROM tomcat-lib.noarch 7.0.54-2.el7_1 CDROM tomcat-native.x86_64 1.1.34-1.el7 epel tomcat-servlet-3.0-api.noarch 7.0.54-2.el7_1 CDROM tomcat-webapps.noarch 7.0.54-2.el7_1 CDROM tomcatjss.noarch 7.1.2-1.el7 CDROM # 安裝程序包,這裏會自動解決依賴關係 [root@centos7 ~]# yum install -y tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp
2.查看程序環境
[root@centos7 ~]# rpm -ql tomcat /etc/logrotate.d/tomcat /etc/sysconfig/tomcat /etc/tomcat # 配置文件目錄 /etc/tomcat/Catalina /etc/tomcat/Catalina/localhost /etc/tomcat/catalina.policy /etc/tomcat/catalina.properties /etc/tomcat/context.xml /etc/tomcat/log4j.properties /etc/tomcat/logging.properties /etc/tomcat/server.xml /etc/tomcat/tomcat-users.xml /etc/tomcat/tomcat.conf /etc/tomcat/web.xml /usr/bin/tomcat-digest /usr/bin/tomcat-tool-wrapper /usr/lib/systemd/system/tomcat.service # Until File文件 /usr/lib/systemd/system/[email protected] /usr/lib/tmpfiles.d/tomcat.conf /usr/libexec/tomcat /usr/libexec/tomcat/functions /usr/libexec/tomcat/preamble /usr/libexec/tomcat/server /usr/sbin/tomcat # 程序文件 /usr/share/doc/tomcat-7.0.54 /usr/share/doc/tomcat-7.0.54/LICENSE /usr/share/doc/tomcat-7.0.54/NOTICE /usr/share/doc/tomcat-7.0.54/RELEASE-NOTES /usr/share/tomcat /usr/share/tomcat/bin/bootstrap.jar /usr/share/tomcat/bin/catalina-tasks.xml /usr/share/tomcat/conf /usr/share/tomcat/lib /usr/share/tomcat/logs /usr/share/tomcat/temp /usr/share/tomcat/webapps /usr/share/tomcat/work /var/cache/tomcat /var/cache/tomcat/temp /var/cache/tomcat/work /var/lib/tomcat /var/lib/tomcat/webapps /var/lib/tomcats /var/log/tomcat /var/log/tomcat/catalina.out /var/run/tomcat.pid [root@centos7 ~]# ll /etc/tomcat/ # 配置文件 total 208 drwxrwxr-x 3 root tomcat 22 Dec 16 16:27 Catalina -rw-rw-r-- 1 tomcat tomcat 12257 May 13 2015 catalina.policy -rw-rw-r-- 1 tomcat tomcat 6294 May 13 2015 catalina.properties -rw-rw-r-- 1 tomcat tomcat 1394 May 13 2015 context.xml -rw-rw-r-- 1 tomcat tomcat 547 May 13 2015 log4j.properties -rw-rw-r-- 1 tomcat tomcat 3288 May 13 2015 logging.properties -rw-rw-r-- 1 tomcat tomcat 6536 May 13 2015 server.xml -rw-rw-r-- 1 tomcat tomcat 1568 May 13 2015 tomcat.conf -rw-rw---- 1 tomcat tomcat 1998 May 13 2015 tomcat-users.xml -rw-rw-r-- 1 tomcat tomcat 163385 May 13 2015 web.xml [root@centos7 ~]# ll /var/lib/tomcat # 查看webapps文件 total 0 drwxrwxr-x 8 root tomcat 89 Dec 16 16:27 webapps [root@centos7 ~]# ll /var/lib/tomcat/webapps/ total 8 drwxr-xr-x 14 root root 4096 Dec 16 16:27 docs drwxr-xr-x 8 tomcat tomcat 120 Dec 16 16:27 examples drwxr-xr-x 5 root tomcat 82 Dec 16 16:27 host-manager drwxr-xr-x 5 root tomcat 97 Dec 16 16:27 manager drwxr-xr-x 3 tomcat tomcat 4096 Dec 16 16:27 ROOT drwxr-xr-x 5 tomcat tomcat 81 Dec 16 16:27 sample
3.啓動tomcat並查看端口8080
[root@centos7 ~]# systemctl start tomcat.service # 直接啓動tomcat服務 [root@centos7 ~]# ss -tnl # 查看監聽端口8080,8009 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 127.0.0.1:6010 *:* LISTEN 0 100 :::8009 :::* LISTEN 0 100 :::8080 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 ::1:631 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 ::1:6010 :::*
4.在瀏覽器中訪問如下:
Tomcat部署(deploy)
1.部署(deploy)webapp的相關操作:
★deploy:
將webapp的源文件放置於目標目錄(網頁程序文件存放位置的目錄),配置tomcat服務器能夠基於web.xml和context.xml文件中定義的路徑來訪問此webapp;
將其特有的類和依賴的類通過class loader裝載至JVM;
部署有兩種方式:
☉自動部署:auto deploy
☉手動部署:
冷部署:停止Tomcat,把webapp複製到指定的位置,而後才啓動tomcat;
熱部署:在不停止tomcat的前提下進行部署;
部署工具:manager、ant腳本、tcd(tomcat client deployer)等;
★undeploy:反部署,
停止webapp,並從tomcat實例上卸載webapp;
★start:啓動處於停止狀態的webapp;
★stop:停止webapp,不再向用戶提供服務;其類依然在jvm上;
★redeploy:重新部署;
演示:手動提供一測試類應用,並冷部署:
1.首先停止tomcat服務,實施冷部署
[root@centos7 ~]# su - tomcat -c '/usr/local/tomcat/bin/catalina.sh stop' su: warning: cannot change directory to /home/tomcat: No such file or directory Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
2.在webapps的源文件中創建存放網頁程序文件的目錄test(創建webapp特有的目錄結構),並提供jsp格式的測試頁面文件,如下:
[root@centos7 ~]# mkdir -pv /usr/local/tomcat/webapps/test/{classes,lib,WEB-INF} mkdir: created directory ‘/usr/local/tomcat/webapps/test’ mkdir: created directory ‘/usr/local/tomcat/webapps/test/classes’ mkdir: created directory ‘/usr/local/tomcat/webapps/test/lib’ mkdir: created directory ‘/usr/local/tomcat/webapps/test/WEB-INF’
[root@centos7 ~]# vim /usr/local/tomcat/webapps/test/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>Test Page</title> </head> <body> <% out.println("hello world"); # 測試頁面 %> </body> </html>
3.部署完畢,重新啓動tomcat服務,瀏覽器訪問如下:
4.查看工作過程可以通過查看work目錄,如下:
[root@centos7 tomcat]# tree work/ work/ └── Catalina └── localhost ├── docs ├── examples ├── host-manager ├── manager ├── ROOT │ └── org │ └── apache │ └── jsp │ ├── index_jsp.class │ └── index_jsp.java └── test └── org └── apache └── jsp ├── index_jsp.class # 源程序編譯後的字節碼文件 └── index_jsp.java # 通過jasper將jsp代碼翻譯爲servlet代碼(源程序文件) 14 directories, 4 files
2.tomcat自帶的兩個管理應用程序:
★manager app
webapp管理工具
★host-manager
Vhosts(虛擬主機)管理工具
1.在Tomcat訪問頁面中,點擊manager App,提示登錄信息;點擊取消登錄後,會提示未經認證不允許登錄,並提供登錄方法,如下:
2.根據提示,要想使用manager app管理部署,就需要在/conf/tomcat-user.xml文件中添加一個manager-gui的角色,並創建用戶和密碼,且要求用戶屬於manager-gui的角色,如下:
[root@centos7 ~]# cd /usr/local/tomcat [root@centos7 tomcat]# ls bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work [root@centos7 tomcat]# cd conf [root@centos7 conf]# ls Catalina catalina.policy catalina.properties context.xml logging.properties server.xml tomcat- [root@centos7 conf]# vim tomcat-users.xml
3.重啓tomcat服務
[root@centos7 conf]# su - tomcat -c 'catalina.sh stop' su: warning: cannot change directory to /home/tomcat: No such file or directory Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar [root@centos7 conf]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 127.0.0.1:6011 *:* LISTEN 0 25 *:514 *:* LISTEN 0 128 :::22 :::* LISTEN 0 128 ::1:631 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 ::1:6011 :::* LISTEN 0 25 :::514 :::* [root@centos7 conf]# su - tomcat -c 'catalina.sh start' su: warning: cannot change directory to /home/tomcat: No such file or directory Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. [root@centos7 conf]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 127.0.0.1:6011 *:* LISTEN 0 25 *:514 *:* LISTEN 0 100 :::8009 :::* LISTEN 0 100 :::8080 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 ::1:631 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 ::1:6011 :::* LISTEN 0 25 :::514 :::*
4.在瀏覽器中再次請求訪問manager App輸入用戶名tomcat,密碼tomcat登錄後就可以進行部署了,如下:
5.我們也可以點擊Server Statua查案當前服務器狀態,如下:
Tomcat的常用組件配置:(conf/server.xml)
每個組件幾乎都是通過特有的類來實現,而且有的組件還不止一種實現方式
1.Server:
★代表tomcat instance(實例),即表現出的一個jvm進程;監聽在8005端口,只接收“SHUTDOWN”。各server監聽的端口不能相同,因此,在同一物理主機啓動多個實例時,需要修改其監聽端口爲不同的端口;
2.Service:
★用於實現將一個或多個connector組件關聯至一個engine組件;
3.Connector(連接器)組件:接入前端用戶請求
★進入tomcat的請求可分爲兩類:
☉standalone:
Tomcat作爲獨立的應用程序服務器,請求來自於客戶端瀏覽器;
◆可用的連接器:
httpd,https
☉由其它的web server反代:
Tomcat作爲應用程序服務器,請求將來自於前端的反代服務器;
◆可用的連接器:
nginx --> http/https connector --> tomcat
httpd --> http/https/ajp connector --> tomcat
★屬性:
address: 監聽的IP地址;默認爲本機所有可用地址;
maxThreads: 最大併發連接數,默認爲150;
port: 監聽的端口;
protocol: 連接器使用的協議,一般爲HTTP/1.1或AJP/1.3;
redirecport: 重定向到的端口;
connectionTimeout: 連接的超時時長,單位爲毫秒,默認爲60000;
enableLookups: 是否啓用DNS查詢功能;
acceptCount: 定義等待隊列的最大長度;
scheme: 客戶端請求時對應映射的協議的類型;
debug: 連接器的調試功能
secure: 安全模式(ssl)
clientAuth: 是否驗證客戶端證書;
sslProtocol: 安全證書的協議版本,建議使用TLS;
4.Engine組件:
★作用:
Servlet實例,即servlet引擎,其內部可以有一個或多個host組件來定義站點; 通常需要通過defaultHost來定義默認的虛擬主機;
★屬性:
name=
defaultHost="localhost"
jvmRoute=
5.Host組件:
★作用:
位於engine內部用於接收請求並進行相應處理的主機或虛擬主機;
★屬性:
◆appBase:
此Host的webapps的默認存放目錄,指存放非歸檔的web應用程序的目錄或歸檔的WAR文件目錄路徑;可以使用基於$CATALINA_BASE變量所定義的路徑的相對路徑;
◆ autoDeploy:
在Tomcat處於運行狀態時,將某webapp放置於appBase所定義的目錄中時,是否自動將其部署至tomcat;
◆unpackWARs:
在啓用webapps時,是否對WAR格式的歸檔文件先進行展開,默認爲ture;
演示:定義虛擬主機
1.編輯/usr/local/tomcat/conf/server.xml再添加一個主機名爲node1.taotao.com的虛擬主機,如下:
2.創建相應的目錄,並提供測試頁面要放在ROOT目錄之下,如下:
[root@centos7 tomcat]# mkdir -pv /data/webapps/ROOT/{classes,lib,WEB-INF,META-INF} mkdir: created directory ‘/data/webapps’ mkdir: created directory ‘/data/webapps/ROOT’ mkdir: created directory ‘/data/webapps/ROOT/classes’ mkdir: created directory ‘/data/webapps/ROOT/lib’ mkdir: created directory ‘/data/webapps/ROOT/WEB-INF’ mkdir: created directory ‘/data/webapps/ROOT/META-INF’ [root@centos7 tomcat]# vim /data/webapps/ROOT/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>Test Page</title> </head> <body> <% out.println("hello world from node1"); %> </body> </html>
3.停止tomcat服務,檢測語法,沒問題然後重啓tomcat服務,如下:
[root@centos7 tomcat]# su - tomcat -c 'catalina.sh stop' su: warning: cannot change directory to /home/tomcat: No such file or directory Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar [root@centos7 tomcat]# catalina.sh configtest # 語法檢測 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log INFO: Server version: Apache Tomcat/8.0.23 Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log INFO: Server built: May 19 2015 14:58:38 UTC Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log INFO: Server number: 8.0.23.0 Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log INFO: CATALINA_BASE: /usr/local/apache-tomcat-8.0.23 Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log INFO: CATALINA_HOME: /usr/local/apache-tomcat-8.0.23 Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log INFO: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log INFO: Command line argument: -Djava.endorsed.dirs=/usr/local/tomcat/endorsed Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log INFO: Command line argument: -Dcatalina.base=/usr/local/tomcat Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log INFO: Command line argument: -Dcatalina.home=/usr/local/tomcat Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log INFO: Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp Dec 30, 2016 11:30:38 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib Dec 30, 2016 11:30:38 AM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["http-nio-8080"] Dec 30, 2016 11:30:38 AM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector INFO: Using a shared selector for servlet write/read Dec 30, 2016 11:30:38 AM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["ajp-nio-8009"] Dec 30, 2016 11:30:38 AM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector INFO: Using a shared selector for servlet write/read Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.Catalina load INFO: Initialization processed in 1408 ms [root@centos7 tomcat]# su - tomcat -c 'catalina.sh start' # 啓動服務 su: warning: cannot change directory to /home/tomcat: No such file or directory Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started.
4.找一臺能夠解析node1的主機測試,發現可以正常訪問定義的虛擬主機,如下:
[root@centos7 ~]# curl http://node1.taotao.com:8080 <html> <head> <title>Test Page</title> </head> <body> hello world from node1 </body> </html>
5.除此之外,我們也可以在tomcat的頁面中通過Host Manager進行管理,管理之前同Manager App一樣需要首先添加角色,並使用戶屬於此角色,如下,編輯/usr/local/tomcat/conf/tomcat/users.xml
重啓tomcat服務,然後再次訪問就可以看到虛擬主機的管理界面額了,如下:
6.Context組件:
★作用:
Context在某些意義上類似於apache中的路徑別名,一個Context定義用於標識tomcat實例中一個Web應用程序;
★屬性:
◆docBase:
相應web應用程序的存放位置;也可以使用相對路徑,起始路徑爲此Contaxt所屬Host中appBase定義的路徑;切記,docBase的路徑名不能與相應的Host中appBase中定義的路徑名有包含關係,比如:appBase爲deploy,而docBase絕不能爲deploy-bb類的名字;
◆path:
相對於web服務器根路徑而言的URI;如果爲空"",則表示爲此webapp的根路徑;如果context定義在一個單獨的xml文件中,此屬性不需要定義;
◆reloadable:
是否允許重新加載此context相關的Wen應用程序的類;默認爲false;
示例:
演示:定義Context標識tomcat實例中一個web應用程序
1.編輯配置文件conf/server.xml在上例中定義個Host中定義Context如下:
2.爲testapp提供相關目錄及測試頁面,如下:
[root@centos7 tomcat]# cp -r /data/webapps/ROOT/ /data/webapps/testapp [root@centos7 tomcat]# vim /data/webapps/testapp/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>Test Page for Context</title> </head> <body> <% out.println("hello world from /data/webapps/testapp"); %> </body> </html>
3.重啓tomcat服務,在能夠解析node1的主機上使用curl請求,可以正常訪問web資源,如下:
[root@centos7 ~]# curl http://node1.taotao.com:8080/test/ <html> <head> <title>Test Page for Context</title> </head> <body> hello world from /data/webapps/testapp </body> </html>
7.Valve組件:
★作用:
Value組件類似於過濾器,它可以工作於Engine和Host/Context之間、Host和Context之間以及Context和Web應用程序的某資源之間。一個容器可以建多個Value,而且Value定義的次序也決定了他們生效的次序。
★Valve存在多種類型:
定義訪問日誌:org.apache.catalina.valves.AccessLogValve
定義基於遠程地址的訪問控制:org.apache.catalina.valves.RemoteAddrValve
定義基於主機名的訪問控制:org.apache.catalina.valves.RemoteHostValve
☉RemoteHostValve 和RemoteAddrValve
可以分別用來實現基於主機名稱和ip地址的訪問控制,控制本身可通過allow或deny來進行定義,這點類似於Apache的訪問控制功能;
☉相關屬性定義:
◆className:
相關的java實現的類名,相應於分別應該爲org.apache.catalina.valves.RemoteHostValve 或org.apache.catalina.valves.RemoteHostValve ;
◆allow:
以逗號分開的允許訪問的IP地址列表,支持正則表達式,因此,點號“.”用於IP地址時需要轉義;僅定義allow項時,非明確allow的地址均被deny;
◆deny:
以逗號分開的禁止訪問的IP地址列表,支持正字表達式,使用方式同allow
演示1:定義訪問日誌
1.編輯conf/server.xml在之前定義的虛擬主機node1.taotao.com上定義訪問日誌,如下:
2.重啓tomcat服務,訪問虛擬主機,並查看在/usr/local/tomcat/logs中查看定義的訪問日誌,如下:
# 重啓tomcat服務 [root@centos7 conf]# su - tomcat -c 'catalina.sh stop' [root@centos7 conf]# su - tomcat -c 'catalina.sh configtest' [root@centos7 conf]# su - tomcat -c 'catalina.sh start' # 訪問此虛擬主機的web資源 [root@centos7 ~]# curl http://node1.taotao.com:8080 <html> <head> <title>Test Page</title> </head> <body> hello world from /data/webapps </body> </html> [root@centos7 ~]# curl http://node1.taotao.com:8080/test/ <html> <head> <title>Test Page for Context</title> </head> <body> hello world from /data/webapps/testapp </body> </html> # 查看訪問日誌 [root@centos7 logs]# cat node1_access_log.2016-12-30.log 192.168.1.113 - - [30/Dec/2016:16:58:54 +0800] "GET / HTTP/1.1" 200 130 192.168.1.113 - - [30/Dec/2016:16:59:40 +0800] "GET /test/ HTTP/1.1" 200 151 192.168.1.113 - - [30/Dec/2016:16:59:45 +0800] "GET / HTTP/1.1" 200 130
演示2:定義基於遠程IP的訪問控制
1.編輯conf/server.xml在之前定義的虛擬主機node1.taotao.com的Context中定義禁止192.168.1.112主機訪問,如下:
2.重啓tomcat服務,訪問虛擬主機node1.taotao.com下的test資源,可以發現禁止訪問,可見這裏定義的訪問控制生效
# 沒有定義訪問控制的可以繼續訪問 [root@centos7 ~]# curl http://node1.taotao.com:8080/ <html> <head> <title>Test Page</title> </head> <body> hello world from /data/webapps </body> </html> # 定義訪問控制的/test 被被禁止 [root@centos7 ~]# curl http://node1.taotao.com:8080/test/ <!DOCTYPE html><html><head><title>Apache Tomcat/8.0.23 - Error report</title><style type="text/css">H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {color : black;}A.name {color : black;}.line {height: 1px; background-color: #525D76; border: none;}</style> </head><body><h1>HTTP Status 403 - </h1><div class="line"></div><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>Access to the specified resource has been forbidden.</u></p><hr class="line"><h3>Apache Tomcat/8.0.23</h3></body></html>