一、初識Tomcat; 二、Tomcat與jdk的關系; 三、Tomcat內部工作原理; 四、Tomcat配置文件詳解; 五、案例:搭建Tomcat案例; 一、初識tomcat; 概述:Tomcat是由Apache軟件基金會下屬的Jakarta項目開發(fā)的一個Servlet容器,按照Sun Microsystems提供的技術規(guī)范,實現(xiàn)了對Servlet和JavaServer Page(JSP)的支持,并提供了作為Web服務器的一些特有功能,如Tomcat管理和控制平臺、安全域管理和Tomcat閥等。由于Tomcat本身也內含了一個HTTP服務器,它也可以被視作一個單獨的Web服務器。 便于理解:Apache與Tomcat的比較 相同點: 1.兩者都是Apache組織開發(fā)的 2.兩者都有HTTP服務的功能 3.兩者都是免費的 不同點: 1.Apache是專門用了提供HTTP服務的,以及相關配置的(例如虛擬主機、URL轉發(fā)等等),而Tomcat是Apache組織在符合Java EE的JSP、Servlet標準下開發(fā)的一個JSP服務器. 2.Apache是一個Web服務器環(huán)境程序,啟用他可以作為Web服務器使用,不過只支持靜態(tài)網(wǎng)頁。如果要在Apache環(huán)境下運行JSP的話就需要一個解釋器來執(zhí)行JSP網(wǎng)頁,而這個JSP解釋器就是Tomcat。 3.Apache側重于HTTPServer ,Tomcat側重于Servlet引擎,如果以Standalone方式運行,功能上與Apache等效,支持JSP,但對靜態(tài)網(wǎng)頁不太理想; 4.Apache是Web服務器,Tomcat是應用(Java)服務器,它只是一個Servlet(JSP也翻譯成Servlet)容器,可以認為是Apache的擴展,但是可以獨立于Apache運行。 Tomcat同類產品: 1.Resin 服務器: Resin是Caucho公司的產品,是一個非常流行的支持Servlet和JSP的服務器,速度非???。Resin本身包含了一個支持HTML的Web服務器,這使它不僅可以顯示動態(tài)內容,而且顯示靜態(tài)內容的能力也毫不遜色,因此許多網(wǎng)站都是使用Resin服務器構建。 2.Jetty 服務器: Jetty是一個純粹的基于Java的網(wǎng)頁服務器和Java Servlet容器。盡管網(wǎng)頁服務器通常用來為人們呈現(xiàn)文檔,但是Jetty通常在較大的軟件框架中用于計算機與計算機之間的通信。Jetty作為Eclipse基金會的一部分,是一個自由和開源項目。 3.JBoss服務器: JBoss是一個種遵從JavaEE規(guī)范的、開放源代碼的、純Java的EJB服務器,對于J2EE有很好的支持。JBoss采用JML API實現(xiàn)軟件模塊的集成與管理,其核心服務又是提供EJB服務器,不包含Servlet和JSP的Web容器,不過它可以和Tomcat完美結合。 4.WebSphere 服務器: WebSphere是IBM公司的產品,可進一步細分為 WebSphere Performance Pack、Cache Manager 和WebSphere Application Server等系列,其中WebSphere Application Server 是基于Java 的應用環(huán)境,可以運行于 Sun Solaris、Windows NT 等多種操作系統(tǒng)平臺,用于建立、部署和管理Internet和Intranet Web應用程序。 5.WebLogic 服務器: WebLogic 是ORACLE公司的產品,可進一步細分為 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,其中 WebLogic Server 的功能特別強大。WebLogic 支持企業(yè)級的、多層次的和完全分布式的Web應用,并且服務器的配置簡單、界面友好。對于那些正在尋求能夠提供Java平臺所擁有的一切應用服務器的用戶來說,WebLogic是一個十分理想的選擇。 二、Tomcat與jdk的關系; 圖解: 解析: JDK是開發(fā)人員開發(fā)使用,jre是用來運行java程序,就是java程序的運行環(huán)境,jvm是整個java實現(xiàn)跨平臺的最核心的部分,所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執(zhí)行; JDK中包含JRE,在JDK的安裝目錄下有一個名為jre的目錄,里面有兩個文件夾bin和lib,在這里可以認為bin里的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和 lib和起來就稱為jre。jdk是java語言編寫的,用來給java程序調用的,jvm因為與平臺進行交互,是用c/c++和匯編語言編寫的; jdk是java運行和編譯的,tomcat是web項目的運行容器,java沒有jdk沒辦法編譯運行,java運行必須依賴jdk的環(huán)境,所以安裝tomcat前必須要安裝jdk環(huán)境; 下載位置: tomcat下載地址:https://tomcat./download-90.cgi jdk下載地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 注解: 1. Java SE(Java Platform,Standard Edition):Java SE 是做電腦上運行的軟件; 2. Java EE(Java Platform,Enterprise Edition):Java EE 是用來做網(wǎng)站的(我們常見的JSP技術); 3. Java ME(Java Platform,Micro Edition):Java ME 是做手機軟件的; 對應關系: 三、Tomcat內部工作原理; tomcat整體架構: 組件關聯(lián): 1、Tomcat 的心臟是兩個組件:Connector 和 Container,Connector 組件是可以被替換,這樣顯得更加靈活,一個 Container 可以選擇對應多個 Connector。多個 Connector 和一個 Container 就形成了一個 Service,有了 Service 就可以對外提供服務了,但是 Service 還要一個生存的環(huán)境,必須要有人能夠給她生命、掌握其生死大權,那就非 Server 莫屬了。所以整個 Tomcat 的生命周期由 Server 控制。 2、我們將 Tomcat 中 Connector、Container 作為一個整體比作一對情侶的話,Connector 主要負責對外交流,可以比作為 Boy,Container 主要處理 Connector 接受的請求,主要是處理內部事務,可以比作為 Girl。那么這個 Service 就是連接這對男女的結婚證了。是Service 將它們連接在一起,共同組成一個家庭。當然要組成一個家庭還要很多其它的元素說白了,Service 只是在 Connector 和 Container 外面多包一層,把它們組裝在一起,向外面提供服務,一個 Service 可以設置多個 Connector,但是只能有一個 Container 容器。 Container組件詳解: ?Engine:負責處理所有請求,處理后,將結果返回給service,而connector是作為service與engine的中間媒介出現(xiàn)的。 作為交流者;一個engine下可以配置一個默認主機,每個虛擬主機都有一個域名。當engine獲得一個請求時,它把該請求匹配到虛擬主機host上,然后把請求交給該主機來處理。 Engine有一個默認主機,當請求無法匹配到任何一個虛擬主機時,將交給默認host來處理。Engine以線程的方式啟動Host。 ?Host:代表一個虛擬主機,每個虛擬主機和某個網(wǎng)絡域名(Domain Name)相匹配。 每個虛擬主機下都可以部署一個或多個web應用,每個web應用對應于一個context,有一個context path。 當Host獲得一個請求時,將把該請求匹配到某個Context上; ?Wrapper: 代表一個 Servlet,它負責管理一個 Servlet,包括的 Servlet 的裝載、初始化、執(zhí)行以及資源回收。Wrapper 是最底層的容器,它沒有子容器了; 四、Tomcat配置文件詳解; tomcat中支持兩種協(xié)議的連接器:HTTP/1.1與AJP/1.3 HTTP/1.1協(xié)議負責建立HTTP連接,web應用通過瀏覽器訪問tomcat服務器用的就是這個連接器,默認監(jiān)聽的是8080端口; AJP/1.3協(xié)議負責和其他HTTP服務器建立連接,監(jiān)聽的是8009端口,比如tomcat和apache或者iis集成時需要用到這個連接器。 五、案例:搭建Tomcat案例; 案例環(huán)境:
案例步驟: ?安裝jdk,部署java環(huán)境; ?安裝tomact軟件程序; ?客戶端訪問測試初始頁面; ?Tomcat服務配置目錄講解,配置文件講解,主配置文件講解; ?配置Tomcat得manager管理界面; ?自定義jsp頁面,并測試訪問; ?安裝jdk,部署java環(huán)境; [root@www ~]# ls apache-tomcat-9.0.10.tar.gz jdk-8u171-linux-x64.tar.gz [root@www~]# rpm -qa |grep java [root@www ~]# tar zxvf jdk-8u171-linux-x64.tar.gz [root@www ~]# mv jdk1.8.0_171/ /usr/local/java [root@www ~]# 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@www ~]# cat < export JAVA_HOME=/usr/local/java export PATH=$PATH:/usr/local/java/bin END [root@www~]# source /etc/profile [root@www ~]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode) ?安裝tomact軟件程序; [root@www ~]# tar zxvf apache-tomcat-9.0.10.tar.gz [root@www ~]# mv apache-tomcat-9.0.10 /usr/local/tomcat [root@www ~]# ls /usr/local/tomcat bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work [root@www ~]# /usr/local/tomcat/bin/startup.sh ##啟動apache-tomcat [root@www ~]# netstat -utpln |grep 8080 tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 14758/java ?客戶端訪問測試初始頁面; ?Tomcat服務配置目錄講解,配置文件講解,主配置文件講解; ?安裝mariadb數(shù)據(jù)庫,提供數(shù)據(jù)庫服務; [root@www ~]# yum -y install mariadb-server mysql [root@www ~]# systemctl start mariadb [root@www ~]# systemctl enable mariadb [root@www ~]# mysqladmin -uroot password 123123 [root@www ~]# mysql -uroot -p123123 MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) MariaDB [(none)]> exit ?創(chuàng)建項目中的數(shù)據(jù)庫或者導入數(shù)據(jù)庫文件,并且進行授權; [root@www ~]# ls igcrms_xn.sql [root@www ~]# mysql -uroot -p123123<igcrms_xn.sql< span=""></igcrms_xn.sql<> MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | igcrms_xn | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec) MariaDB [(none)]> use igcrms_xn Database changed MariaDB [igcrms_xn]> show tables; +-----------------------------+ | Tables_in_igcrms_xn | +-----------------------------+ | col_recycle_daysum | | col_recycle_detail | | col_recycle_info | ... MariaDB [igcrms_xn]> grant all on igcrms_xn.* to 'linuxfan'@'192.168.100.101' identified by '123123'; MariaDB [igcrms_xn]> flush privileges; MariaDB [(none)]> exit ?項目上線; [root@www ~]# ls XNMS.war [root@www ~]# unzip -oq XNMS.war -d ./linuxfan [root@www ~]# ls linuxfan/ common jsp META-INF static WEB-INF [root@www ~]# cp -rf ./linuxfan/ /usr/local/tomcat/webapps/ [root@www ~]# ls /usr/local/tomcat/webapps/linuxfan/ common jsp META-INF static WEB-INF [root@www ~]# vi /usr/local/tomcat/webapps/linuxfan/WEB-INF/classes/jdbc.properties 6 url=jdbc:mysql://192.168.100.101:3306/igcrms_xn?useUnicode=true&characterEncoding=utf-8& allowMultiQueries=true 7 username=linuxfan 8 password=123123 :wq ?客戶端訪問測試項目; ?配置Tomcat得manager管理界面; [root@www ~]# vi /usr/local/tomcat/conf/tomcat-users.xml 44 45 [root@www ~]# vi /usr/local/tomcat/webapps/manager/META-INF/context.xml 20 allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" /> [root@www ~]# /usr/local/tomcat/bin/shutdown.sh [root@www ~]# /usr/local/tomcat/bin/startup.sh 客戶端訪問測試: ?自定義jsp頁面,并測試訪問; [root@www ~]# mkdir -p /web/webapp/ [root@www ~]# vi /web/webapp/index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% out.println("Welcome to test site;http://www.linuxfan.cn");%> :wq [root@www ~]# vi /usr/local/tomcat/conf/server.xml 148 <host </hostname="www.linuxfan.cn" appBase="webapps" 149 unpackWARs="true" autoDeploy="true"> 150 <context </contextdocBase="/web/webapp" path="" reloadable="false"> 注解: unpackWARs="true" ##設置自動識別war包 autoDeploy="true" ##開啟自動部署 Context docBase="/web/webapp" ##設置項目存放位置 path="" ## tomcat把web應用程序映射為root URI路徑reloadable="true" ## tomcat服務器在運行狀態(tài)下會監(jiān)視在WEB-INF/classes和WEB-INF/lib目錄下class文件的改動,如果監(jiān)測到有class文件被更新的,服務器會自動重新加載Web應用,但是開啟會加重服務器負荷,false選項為關閉; [root@www ~]# /usr/local/tomcat/bin/shutdown.sh [root@www ~]# /usr/local/tomcat/bin/startup.sh 客戶端訪問測試: |
|