一、初識(shí)Tomcat;
二、Tomcat與jdk的關(guān)系;
三、Tomcat內(nèi)部工作原理;
四、Tomcat配置文件詳解;
五、案例:搭建Tomcat案例;
一、初識(shí)tomcat;
概述:Tomcat是由Apache軟件基金會(huì)下屬的Jakarta項(xiàng)目開發(fā)的一個(gè)Servlet容器,按照Sun Microsystems提供的技術(shù)規(guī)范,實(shí)現(xiàn)了對(duì)Servlet和JavaServer Page(JSP)的支持,并提供了作為Web服務(wù)器的一些特有功能,如Tomcat管理和控制平臺(tái)、安全域管理和Tomcat閥等。由于Tomcat本身也內(nèi)含了一個(gè)HTTP服務(wù)器,它也可以被視作一個(gè)單獨(dú)的Web服務(wù)器。
便于理解:Apache與Tomcat的比較
相同點(diǎn):
1.兩者都是Apache組織開發(fā)的
2.兩者都有HTTP服務(wù)的功能
3.兩者都是免費(fèi)的
不同點(diǎn):
1.Apache是專門用了提供HTTP服務(wù)的,以及相關(guān)配置的(例如虛擬主機(jī)、URL轉(zhuǎn)發(fā)等等),而Tomcat是Apache組織在符合Java EE的JSP、Servlet標(biāo)準(zhǔn)下開發(fā)的一個(gè)JSP服務(wù)器.
2.Apache是一個(gè)Web服務(wù)器環(huán)境程序,啟用他可以作為Web服務(wù)器使用,不過(guò)只支持靜態(tài)網(wǎng)頁(yè)。如果要在Apache環(huán)境下運(yùn)行JSP的話就需要一個(gè)解釋器來(lái)執(zhí)行JSP網(wǎng)頁(yè),而這個(gè)JSP解釋器就是Tomcat。
3.Apache側(cè)重于HTTPServer ,Tomcat側(cè)重于Servlet引擎,如果以Standalone方式運(yùn)行,功能上與Apache等效,支持JSP,但對(duì)靜態(tài)網(wǎng)頁(yè)不太理想;
4.Apache是Web服務(wù)器,Tomcat是應(yīng)用(Java)服務(wù)器,它只是一個(gè)Servlet(JSP也翻譯成Servlet)容器,可以認(rèn)為是Apache的擴(kuò)展,但是可以獨(dú)立于Apache運(yùn)行。
Tomcat同類產(chǎn)品:
1.Resin 服務(wù)器:
Resin是Caucho公司的產(chǎn)品,是一個(gè)非常流行的支持Servlet和JSP的服務(wù)器,速度非???。Resin本身包含了一個(gè)支持HTML的Web服務(wù)器,這使它不僅可以顯示動(dòng)態(tài)內(nèi)容,而且顯示靜態(tài)內(nèi)容的能力也毫不遜色,因此許多網(wǎng)站都是使用Resin服務(wù)器構(gòu)建。
2.Jetty 服務(wù)器:
Jetty是一個(gè)純粹的基于Java的網(wǎng)頁(yè)服務(wù)器和Java Servlet容器。盡管網(wǎng)頁(yè)服務(wù)器通常用來(lái)為人們呈現(xiàn)文檔,但是Jetty通常在較大的軟件框架中用于計(jì)算機(jī)與計(jì)算機(jī)之間的通信。Jetty作為Eclipse基金會(huì)的一部分,是一個(gè)自由和開源項(xiàng)目。
3.JBoss服務(wù)器:
JBoss是一個(gè)種遵從JavaEE規(guī)范的、開放源代碼的、純Java的EJB服務(wù)器,對(duì)于J2EE有很好的支持。JBoss采用JML API實(shí)現(xiàn)軟件模塊的集成與管理,其核心服務(wù)又是提供EJB服務(wù)器,不包含Servlet和JSP的Web容器,不過(guò)它可以和Tomcat完美結(jié)合。
4.WebSphere 服務(wù)器:
WebSphere是IBM公司的產(chǎn)品,可進(jìn)一步細(xì)分為 WebSphere Performance Pack、Cache Manager 和WebSphere Application Server等系列,其中WebSphere Application Server 是基于Java 的應(yīng)用環(huán)境,可以運(yùn)行于 Sun Solaris、Windows NT 等多種操作系統(tǒng)平臺(tái),用于建立、部署和管理Internet和Intranet Web應(yīng)用程序。
5.WebLogic 服務(wù)器:
WebLogic 是ORACLE公司的產(chǎn)品,可進(jìn)一步細(xì)分為 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,其中 WebLogic Server 的功能特別強(qiáng)大。WebLogic 支持企業(yè)級(jí)的、多層次的和完全分布式的Web應(yīng)用,并且服務(wù)器的配置簡(jiǎn)單、界面友好。對(duì)于那些正在尋求能夠提供Java平臺(tái)所擁有的一切應(yīng)用服務(wù)器的用戶來(lái)說(shuō),WebLogic是一個(gè)十分理想的選擇。
二、Tomcat與jdk的關(guān)系;
圖解:
解析:
JDK是開發(fā)人員開發(fā)使用,jre是用來(lái)運(yùn)行java程序,就是java程序的運(yùn)行環(huán)境,jvm是整個(gè)java實(shí)現(xiàn)跨平臺(tái)的最核心的部分,所有的java程序會(huì)首先被編譯為.class的類文件,這種類文件可以在虛擬機(jī)上執(zhí)行;
JDK中包含JRE,在JDK的安裝目錄下有一個(gè)名為jre的目錄,里面有兩個(gè)文件夾bin和lib,在這里可以認(rèn)為bin里的就是jvm,lib中則是jvm工作所需要的類庫(kù),而jvm和 lib和起來(lái)就稱為jre。jdk是java語(yǔ)言編寫的,用來(lái)給java程序調(diào)用的,jvm因?yàn)榕c平臺(tái)進(jìn)行交互,是用c/c++和匯編語(yǔ)言編寫的;
jdk是java運(yùn)行和編譯的,tomcat是web項(xiàng)目的運(yùn)行容器,java沒有jdk沒辦法編譯運(yùn)行,java運(yùn)行必須依賴jdk的環(huán)境,所以安裝tomcat前必須要安裝jdk環(huán)境;
下載位置:
tomcat下載地址:https://tomcat.apache.org/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 是做電腦上運(yùn)行的軟件;
2. Java EE(Java Platform,Enterprise Edition):Java EE 是用來(lái)做網(wǎng)站的(我們常見的JSP技術(shù));
3. Java ME(Java Platform,Micro Edition):Java ME 是做手機(jī)軟件的;
對(duì)應(yīng)關(guān)系:
三、Tomcat內(nèi)部工作原理;
tomcat整體架構(gòu):
組件關(guān)聯(lián):
1、Tomcat 的心臟是兩個(gè)組件:Connector 和 Container,Connector 組件是可以被替換,這樣顯得更加靈活,一個(gè) Container 可以選擇對(duì)應(yīng)多個(gè) Connector。多個(gè) Connector 和一個(gè) Container 就形成了一個(gè) Service,有了 Service 就可以對(duì)外提供服務(wù)了,但是 Service 還要一個(gè)生存的環(huán)境,必須要有人能夠給她生命、掌握其生死大權(quán),那就非 Server 莫屬了。所以整個(gè) Tomcat 的生命周期由 Server 控制。
2、我們將 Tomcat 中 Connector、Container 作為一個(gè)整體比作一對(duì)情侶的話,Connector 主要負(fù)責(zé)對(duì)外交流,可以比作為 Boy,Container 主要處理 Connector 接受的請(qǐng)求,主要是處理內(nèi)部事務(wù),可以比作為 Girl。那么這個(gè) Service 就是連接這對(duì)男女的結(jié)婚證了。是Service 將它們連接在一起,共同組成一個(gè)家庭。當(dāng)然要組成一個(gè)家庭還要很多其它的元素說(shuō)白了,Service 只是在 Connector 和 Container 外面多包一層,把它們組裝在一起,向外面提供服務(wù),一個(gè) Service 可以設(shè)置多個(gè) Connector,但是只能有一個(gè) Container 容器。
Container組件詳解:
?Engine:負(fù)責(zé)處理所有請(qǐng)求,處理后,將結(jié)果返回給service,而connector是作為service與engine的中間媒介出現(xiàn)的。 作為交流者;一個(gè)engine下可以配置一個(gè)默認(rèn)主機(jī),每個(gè)虛擬主機(jī)都有一個(gè)域名。當(dāng)engine獲得一個(gè)請(qǐng)求時(shí),它把該請(qǐng)求匹配到虛擬主機(jī)host上,然后把請(qǐng)求交給該主機(jī)來(lái)處理。 Engine有一個(gè)默認(rèn)主機(jī),當(dāng)請(qǐng)求無(wú)法匹配到任何一個(gè)虛擬主機(jī)時(shí),將交給默認(rèn)host來(lái)處理。Engine以線程的方式啟動(dòng)Host。
?Host:代表一個(gè)虛擬主機(jī),每個(gè)虛擬主機(jī)和某個(gè)網(wǎng)絡(luò)域名(Domain Name)相匹配。 每個(gè)虛擬主機(jī)下都可以部署一個(gè)或多個(gè)web應(yīng)用,每個(gè)web應(yīng)用對(duì)應(yīng)于一個(gè)context,有一個(gè)context path。 當(dāng)Host獲得一個(gè)請(qǐng)求時(shí),將把該請(qǐng)求匹配到某個(gè)Context上;
?Wrapper: 代表一個(gè) Servlet,它負(fù)責(zé)管理一個(gè) Servlet,包括的 Servlet 的裝載、初始化、執(zhí)行以及資源回收。Wrapper 是最底層的容器,它沒有子容器了;
四、Tomcat配置文件詳解;
tomcat中支持兩種協(xié)議的連接器:HTTP/1.1與AJP/1.3
HTTP/1.1協(xié)議負(fù)責(zé)建立HTTP連接,web應(yīng)用通過(guò)瀏覽器訪問(wèn)tomcat服務(wù)器用的就是這個(gè)連接器,默認(rèn)監(jiān)聽的是8080端口;
AJP/1.3協(xié)議負(fù)責(zé)和其他HTTP服務(wù)器建立連接,監(jiān)聽的是8009端口,比如tomcat和apache或者iis集成時(shí)需要用到這個(gè)連接器。
五、案例:搭建Tomcat案例;
案例環(huán)境:
系統(tǒng)類型 | IP地址 | 主機(jī)名 | 所需軟件 |
Centos 7.4 1708 64bit | 192.168.100.101 | www.linuxfan.cn | apache-tomcat-9.0.10.tar.gz、 jdk-8u171-linux-x64.tar.gz |
案例步驟:
?安裝jdk,部署java環(huán)境;
?安裝tomact軟件程序;
?客戶端訪問(wèn)測(cè)試初始頁(yè)面;
?Tomcat服務(wù)配置目錄講解,配置文件講解,主配置文件講解;
?配置Tomcat得manager管理界面;
?自定義jsp頁(yè)面,并測(cè)試訪問(wèn);
?安裝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 ##啟動(dòng)apache-tomcat
[root@www ~]# netstat -utpln |grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 14758/java
?客戶端訪問(wèn)測(cè)試初始頁(yè)面;
?Tomcat服務(wù)配置目錄講解,配置文件講解,主配置文件講解;
?安裝mariadb數(shù)據(jù)庫(kù),提供數(shù)據(jù)庫(kù)服務(wù);
[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)建項(xiàng)目中的數(shù)據(jù)庫(kù)或者導(dǎo)入數(shù)據(jù)庫(kù)文件,并且進(jìn)行授權(quán);
[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
?項(xiàng)目上線;
[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
?客戶端訪問(wèn)測(cè)試項(xiàng)目;
?配置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
客戶端訪問(wèn)測(cè)試:
?自定義jsp頁(yè)面,并測(cè)試訪問(wèn);
[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" ##設(shè)置自動(dòng)識(shí)別war包
autoDeploy="true" ##開啟自動(dòng)部署
Context docBase="/web/webapp" ##設(shè)置項(xiàng)目存放位置
path="" ## tomcat把web應(yīng)用程序映射為root URI路徑reloadable="true" ## tomcat服務(wù)器在運(yùn)行狀態(tài)下會(huì)監(jiān)視在WEB-INF/classes和WEB-INF/lib目錄下class文件的改動(dòng),如果監(jiān)測(cè)到有class文件被更新的,服務(wù)器會(huì)自動(dòng)重新加載Web應(yīng)用,但是開啟會(huì)加重服務(wù)器負(fù)荷,false選項(xiàng)為關(guān)閉;
[root@www ~]# /usr/local/tomcat/bin/shutdown.sh
[root@www ~]# /usr/local/tomcat/bin/startup.sh
客戶端訪問(wèn)測(cè)試:
聯(lián)系客服