1. 初識Tomcat
此處以 Tomcat 7.0.88
版本為例。
1.1 啟動
進入bin
目錄,在點擊startup.bat
啟動時,如果窗口一閃而過,啟動失敗,一般是因為環境變量沒有設置好。
設置:
JAVA_HOME 為 JDK安裝路徑。 Tomcat就可以根據JAVA_HOME找到JDK,然后啟動了。(Tomcat依賴於java)
- 1
- 2
- 3
- 4
1.2 關閉
同樣的,bin
目錄中可以點擊shutdown.bat
將其關閉,如果關閉失敗,一般是因為環境變量沒有設置好。
設置:
CATALINA_HOME 為 Tomcat安裝路徑。 這個環境變量能夠讓Tomcat在該變量所配置的目錄來啟動。 注意!如果本機安裝了多個Tomcat,不論點擊誰的startup.bat,啟動的都是CATALINA_HOME變量所指向的Tomcat。因為該原因,一般也不推薦配置這個環境變量。
- 1
- 2
- 3
- 4
- 5
- 6
1.3 配置端口
進入conf目錄,編輯server.xml配置文件。
- 1
找到下面這段配置:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
- 1
- 2
- 3
可以將port
的值修改為80
,這樣下次啟動就訪問瀏覽器localhost
即可,因為瀏覽器的默認端口就是80
。
1.4 關於端口占用問題
使用命令:
netstat -ano 可以找到占用端口的進程pid,再進入任務管理器,將對應pid的進程關閉。 如果沒有找到pid,在屬性顯示欄右鍵勾選pid,即可看到。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2. Tomcat目錄結構
bin —— 存放啟動和關閉Tomcat的腳本文件。
conf —— 存放Tomcat服務器的各種配置文件。
lib —— 存放Tomcat服務器的支撐jar包。 logs —— 存放Tomcat的日志文件。 temp —— 存放運行時產生的臨時文件。 webapps —— web應用所在目錄,供外界訪問的web資源的存放目錄。 work —— Tomcat的工作目錄。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
3. 虛擬主機配置
3.1 什么是虛擬主機
虛擬主機:
由於在Tomcat中可以運行多個站點,用戶用瀏覽器訪問Tomcat服務器中的每個站點的時候,就像在訪問各自獨立的服務器一樣。
所以我們可以說,各個站點是分別運行在Tomcat這個真實服務器上的一台虛擬主機上。
簡而言之:
一個Tomcat中可以配置多台虛擬主機,一個虛擬主機上可以運行一個網站。
一個網站就可以認為是一台虛擬主機。
3.2 什么是web應用
一個虛擬主機上的很多web資源,按照功能類別組織成一個個的web應用,再交給虛擬主機管理,並提供給用戶訪問。
3.3 如何配置web應用
當我們完成了一個web應用后,所有的該應用資源全部放在一個文件夾中,比如news,如何讓虛擬主機去識別這個文件夾,並管理呢?
我們進入到conf
目錄的server.xml
中,可以看到有這么一段配置:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
- 1
- 2
這就是Tomcat
初始自帶的一個虛擬主機localhost
,並且外部訪問所有應用資源所在的根目錄是webapps
。
Host
元素中的Context
元素,代表web應用。
關於context元素的屬性:
- docBase: 指定web應用程序的文檔基目錄或者WAR文件的路徑名。可以是絕對路徑也可以是相對於appBase的路徑名。 - path: 指定web應用程序的上下文路徑。 - unpackWAR: 如果為true,Tomcat在運行web程序前將展開所有壓縮的web應用程序,默認值是true。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
配置web應用給虛擬主機:
方法一:
在Server.xml的<Host>
標簽中,添加<Context/>
標簽,就可以為該虛擬主機配置一個web應用了。
<Context path="/news" docBase="E:\news" />
- 1
虛擬路徑映射:
path是虛擬路徑,docBase是真實路徑。
當URL中輸入localhost/news,實際上是去系統的E:\news下尋找資源。
- 1
- 2
- 3
缺省web應用的配置:
即默認的web應用,當不寫web應用路徑時,默認訪問的就是這個應用。
<Context path="" docBase="E:\news" />
- 1
- 2
- 3
注意,修改完這些配置后,服務器都需要重啟,這種方式不是很好。
方法二:
在 Tomcat/conf/Catalina/[Host]
目錄下寫一個xml文件,其中,xml文件的名字就是虛擬路徑,在這個xml中可以添加標簽,再在其中配置真實路徑。
如:conf/Catalina/localhost/news.xml
的配置:
<?xml version="1.0" encoding="utf-8"?> <Context docBase="E:\news" />
- 1
- 2
然后就可以在瀏覽器中通過localhost/news/...
來訪問news
應用里的資源了。
這種修改方式不需要重啟服務器,稍微等待即可看到效果。
注意,如果虛擬路徑中有”/”,由於文件名不允許包含”/”,需要用”#”代替。
如果需要設置為缺省應用,該如何操作?
只需要將 conf/Catalina/localhost/news.xml
中的news.xml
名稱修改為ROOT.xml
,即可通過localhost/...
直接訪問應用資源了。
方法三:
這是最為簡單的一種方式。
直接將web應用放置到虛擬主機管理的目錄下,虛擬主機就可以找到這個web應用,從而對其進行管理。
以news
為例:
直接將
news
文件夾放到Tomcat/webapps
下,即可通過localhost/news/...
訪問該應用資源。
如何設置缺省應用?
只要將web應用文件夾的名稱改為ROOT,這個web應用就是缺省應用。
3.4 web應用目錄結構
如果web應用的目錄結構不合法,可能會出現各種問題。
news |-- ① |-- WEB-INF ② |-- classes ③ |-- lib ④ |-- web.xml ⑤
- 1
- 2
- 3
- 4
- 5
- 6
①:靜態資源和JSP文件都可以直接放置在web應用的目錄下,瀏覽器可以直接訪問到。
②:這個文件夾可以沒有,但最好有,如果有則一定要保證其目錄結構完整。放置在WEB-INF
目錄下的所有資源瀏覽器沒有辦法直接進行訪問。
③:動態web資源運行時的java類class
文件要放在這個目錄下。
④:動態web資源運行時所依賴的jar
包要放在這個目錄下。
⑤:整個web應用的配置文件,配置主頁/Servlet的映射/過濾監聽器的配置都需要依賴這個文件進行。
當直接訪問localhost
時,默認是獲取缺省web應用目錄下的index.html
文件。
可以在WEB-INF
的web.xml
中設置主頁的指向:
<?xml version="1.0" encoding="utf-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <welcome-file-list> <welcome-file> hello.html </welcome-file> </welcome-file-list> </web-app>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
這樣當訪問localhost
時,會自動獲取hello.html
內容。
3.5 配置虛擬主機
在conf/server.xml中<Engine>標簽下添加一個<Host>標簽,就可以新增一台虛擬主機了。 name —— 指定虛擬主機的名稱,瀏覽器通過這個名稱訪問虛擬主機。 appBase —— 虛擬主機管理的目錄,放置在這個目錄下的web應用,虛擬主機可以自動加載。
- 1
- 2
- 3
- 4
- 5
由於瀏覽器訪問地址時,需要將地址翻譯成對應的ip才能找到服務器,這其中翻譯的過程是由dns服務器來實現的,我們沒辦法修改dns服務器,此時可以修改hosts
文件來模擬DNS功能。
缺省虛擬主機
如果來訪者通過ip地址來訪問,這個時候服務器無法辨別當前要訪問的是哪台虛擬主機中的資源,會默認訪問缺省虛擬主機。
缺省虛擬主機可以通過在server.xml
中engine
標簽上的defaultHost
屬性進行配置。
<Engine name="Catalina" defaultHost="localhost">
- 1
4. 一些其他的配置說明
4.1 war包
通常我們可以把一個web應用的文件夾經過命令:
jar -cvf my.war news 將news應用的資源文件壓縮打包成 my.war,然后發送到webapps下,war文件會自動解壓,可以直接被訪問。 其實war就是zip,將zip文件后綴名改一下也能達到效果。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4.2 通用的配置
在conf
文件夾中,有context.xml
和web.xml
,這相當於一個頂級的,父級的配置文件,在webapps
中的應用配置默認也是“繼承”於這些配置文件。
比如說,就算不給應用的web.xml
中設置主頁,Tomcat
也會基於頂級的配置文件,將應用目錄中的index.html
指定為主頁。
4.3 自動加載更新
給context
元素設置reloadable
屬性為true,可以讓Tomcat
自動加載更新后的web應用,當java程序修改后可以不用重啟,服務器自動重新加載。但會降低性能。
4.4 后台管理界面
和大多數服務器一樣,Tomcat
也有一個后台管理的界面,我們可以通過授權進入這個GUI界面,然后方便地操作管理web應用。
通過localhost/manager/html
,可以進入主機內web應用的管理界面,在這之前需要在conf
下的tomcat-users.xml
添加管理用戶:
<role rolename="manager-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui"/>
- 1
- 2
然后用該用戶進入,管理主機上的所有web應用。