前言
通常情況下,一個(gè)完整的web應(yīng)用需要瀏覽器、web服務(wù)器、服務(wù)端程序、數(shù)據(jù)庫四大組件的相互配合協(xié)作來完成一個(gè)請(qǐng)求處理與返回結(jié)果的過程。服務(wù)端程序,比如Java中的Servlet,會(huì)完成對(duì)特定請(qǐng)求的處理過程。如何把請(qǐng)求分配給對(duì)應(yīng)的Servlet,如何管理這些Servlet以及靜態(tài)資源,便是web服務(wù)器的職責(zé)了,Tomcat是一個(gè)開源的由Java語言實(shí)現(xiàn)的web服務(wù)器、支持Servlet與Jsp(Jsp本質(zhì)上也是Servlet)。

下載與安裝
以下操作場景均在MacOS系統(tǒng)下完成,選擇安裝的tomcat版本為tomcat 9
-
tomcat官網(wǎng)下載
- 解壓
tar -zxvf apache-tomcat-9.0.34.tar.gz
- 解壓后
tomcat9中的文件目錄結(jié)構(gòu)
BUILDING.txt LICENSE README.md RUNNING.txt conf logs webapps
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib temp work
- 其中4個(gè)重要的目錄
| 目錄名 | 目錄內(nèi)容 |
|---|---|
bin |
一些工具腳本,開啟關(guān)閉tomcat的腳本都在這里 |
conf |
配置文件,其中server.xml是tomcat的主要配置文件 |
logs |
存放日志文件 |
webapps |
存放你web應(yīng)用的目錄 |
- 配置
JAVA_HOME
tomcat需要指定JDK或JRE,使用echo $JAVA_HOME查看是否有設(shè)置環(huán)境變量。
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
如果沒有設(shè)置、可以手動(dòng)設(shè)置、MacOS中jdk所在位置一般如上、設(shè)置過程如下。
vi .bash_profile
在 .bash_profile中輸入以下配置并保存
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
export JAVA_HOME
source使其生效
source .bash_profile
啟動(dòng)與關(guān)閉
在tomcat的bin目錄下有2個(gè)腳本。startup.sh表示啟動(dòng)tomcat,shutdown.sh表示關(guān)閉tomcat。執(zhí)行./startup.sh后會(huì)有如下提示
Using CATALINA_BASE: /Users/xxx/tomcat/apache-tomcat-9.0.34
Using CATALINA_HOME: /Users/xxx/tomcat/apache-tomcat-9.0.34
Using CATALINA_TMPDIR: /Users/xxx/tomcat/apache-tomcat-9.0.34/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
Using CLASSPATH: /Users/LENN/tomcat/apache-tomcat-9.0.34/bin/bootstrap.jar:/Users/LENN/tomcat/apache-tomcat-9.0.34/bin/tomcat-juli.jar
Tomcat started.
tomcat默認(rèn)監(jiān)聽在主機(jī)上的 8080端口,讓我們用瀏覽器訪問這個(gè)端口,若出現(xiàn)如下默認(rèn)頁面則說明tomcat啟動(dòng)成功。

若啟動(dòng)失敗,則可能是默認(rèn)的
8080端口被別的進(jìn)程占用了,讓我們?nèi)ブ疤岬降?code>server.xml修改默認(rèn)端口配置,再重新啟動(dòng)。
- 修改
xml中的默認(rèn)端口至8090
<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
webapp目錄結(jié)構(gòu)
上面我們提到了webapps用來存放我們的web應(yīng)用,讓我們看下這個(gè)目錄下有什么
-
weapps目錄
.
├── ROOT
├── docs
├── examples
├── host-manager
├── manager
其中examples目錄是官方提供給我們的一個(gè)示例,提供了一個(gè)標(biāo)準(zhǔn)的web應(yīng)用的文件目錄的組織結(jié)構(gòu)信息讓我們參考。
-
examples目錄結(jié)構(gòu)
.
├── WEB-INF
├── index.html
├── jsp
├── servlets
└── websocket
Tips:查看一個(gè)目錄層級(jí)結(jié)構(gòu)可以使用tree -L [層數(shù)]命令來完成,MacOS下可以使用brew intstall tree來下載安裝該工具。
examples中,最頂層目錄就是我們web應(yīng)用的document root,在部署的時(shí)候管理員會(huì)把它映射到一個(gè)訪問路徑下, 假設(shè)映射到localhost:8080/test這個(gè)訪問路徑,我們想查看index.html文件,只要在瀏覽器輸入localhost:8080/test/index.html就可以了。
我們可以把一個(gè)webapp根目錄下的文件分為兩類,
- 一類是瀏覽器用戶可見的文件,比如各種
html、jsp、css、img等(當(dāng)然對(duì)于這些文件我們也可以在當(dāng)前根目錄下設(shè)置對(duì)應(yīng)的文件夾對(duì)其進(jìn)行管理,比如examples中的jsp、servlets,打開看一下其中均是html文件)。- 另一類則是瀏覽器用戶不可見的資源,位于
WEB-INF目錄下,包含我們的服務(wù)端小程序(servlet)位于WEB-INF/classes下和用到的依賴庫位于WEB-INF/lib
在WEB-INF下還有一個(gè)至關(guān)重要的配置文件web.xml,它用來告訴tomcat容器構(gòu)成你web應(yīng)用的servlet等其他組件信息、初始化參數(shù)等等。
部署webapp
讓我們也模仿examples的組織結(jié)構(gòu),創(chuàng)建一個(gè)myweb文件夾,將其放置于webapps目錄下。
-
myweb目錄結(jié)構(gòu)
.
├── WEB-INF
└── hello.html
-
hello.html中的內(nèi)容
Hello World!
現(xiàn)在通過訪問localhost:8090/myweb/hello.html就可以查看這個(gè)頁面

之前我們說過web.xml這個(gè)配置文件會(huì)告訴tomcat關(guān)于這個(gè)web應(yīng)用的詳細(xì)信息,現(xiàn)在我們通過配置web.xml告訴tomcat我們的應(yīng)用myweb的首頁為hello.html。
- 通過
web.xml配置首頁
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<welcome-file-list>
<welcome-file>hello.html</welcome-file>
</welcome-file-list>
</web-app>
只要簡單的在<welcome-file-list>設(shè)置歡迎文件即可?,F(xiàn)在通過訪問http://localhost:8090/myweb/則會(huì)默認(rèn)返回hello.html這個(gè)歡迎界面了。