詳解Tomcat配置及使用
1. 初識Tomcat
此處以 Tomcat 7.0.88
版本為例。
1.1 啟動
進入bin
目錄,在點選startup.bat
啟動時,如果視窗一閃而過,啟動失敗,一般是因為環境變數沒有設定好。
設定:
JAVA_HOME 為 JDK安裝路徑。
Tomcat就可以根據JAVA_HOME找到JDK,然後啟動了。(Tomcat依賴於java)
1.2 關閉
同樣的,bin
目錄中可以點選shutdown.bat
將其關閉,如果關閉失敗,一般是因為環境變數沒有設定好。
設定:
CATALINA_HOME 為 Tomcat安裝路徑。
這個環境變數能夠讓Tomcat在該變數所配置的目錄來啟動。
注意!如果本機安裝了多個Tomcat,不論點選誰的startup.bat,啟動的都是CATALINA_HOME 變數所指向的Tomcat。因為該原因,一般也不推薦配置這個環境變數。
1.3 配置埠
進入conf目錄,編輯server.xml配置檔案。
找到下面這段配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
可以將port
的值修改為80
,這樣下次啟動就訪問瀏覽器localhost
即可,因為瀏覽器的預設埠就是80
。
1.4 關於端口占用問題
使用命令:
netstat -ano
可以找到佔用埠的程序pid,再進入工作管理員,將對應pid的程序關閉。
如果沒有找到pid,在屬性顯示欄右鍵勾選pid,即可看到。
2. Tomcat目錄結構
bin —— 存放啟動和關閉Tomcat的指令碼檔案。
conf —— 存放Tomcat伺服器的各種配置檔案。
lib —— 存放Tomcat伺服器的支撐jar包。
logs —— 存放Tomcat的日誌檔案。
temp —— 存放執行時產生的臨時檔案。
webapps —— web應用所在目錄,供外界訪問的web資源的存放目錄。
work —— Tomcat的工作目錄。
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">
這就是Tomcat
初始自帶的一個虛擬主機localhost
,並且外部訪問所有應用資源所在的根目錄是webapps
。
Host
元素中的Context
元素,代表web應用。
關於context元素的屬性:
- docBase:
指定web應用程式的文件基目錄或者WAR檔案的路徑名。可以是絕對路徑也可以是相對於appBase的路徑名。
- path:
指定web應用程式的上下文路徑。
- unpackWAR:
如果為true,Tomcat在執行web程式前將展開所有壓縮的web應用程式,預設值是true。
配置web應用給虛擬主機:
方法一:
在Server.xml的<Host>
標籤中,新增<Context/>
標籤,就可以為該虛擬主機配置一個web應用了。
<Context path="/news" docBase="E:\news" />
虛擬路徑對映:
path是虛擬路徑,docBase是真實路徑。
當URL中輸入localhost/news,實際上是去系統的E:\news下尋找資源。
預設web應用的配置:
即預設的web應用,當不寫web應用路徑時,預設訪問的就是這個應用。
<Context path="" docBase="E:\news" />
注意,修改完這些配置後,伺服器都需要重啟,這種方式不是很好。
方法二:
在 Tomcat/conf/Catalina/[Host]
目錄下寫一個xml檔案,其中,xml檔案的名字就是虛擬路徑,在這個xml中可以新增標籤,再在其中配置真實路徑。
如:conf/Catalina/localhost/news.xml
的配置:
<?xml version="1.0" encoding="utf-8"?>
<Context docBase="E:\news" />
然後就可以在瀏覽器中通過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 ⑤
①:靜態資源和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>
這樣當訪問localhost
時,會自動獲取hello.html
內容。
3.5 配置虛擬主機
在conf/server.xml中<Engine>標籤下新增一個<Host>標籤,就可以新增一臺虛擬主機了。
name —— 指定虛擬主機的名稱,瀏覽器通過這個名稱訪問虛擬主機。
appBase —— 虛擬主機管理的目錄,放置在這個目錄下的web應用,虛擬主機可以自動載入。
由於瀏覽器訪問地址時,需要將地址翻譯成對應的ip才能找到伺服器,這其中翻譯的過程是由dns伺服器來實現的,我們沒辦法修改dns伺服器,此時可以修改hosts
檔案來模擬DNS功能。
預設虛擬主機
如果來訪者通過ip地址來訪問,這個時候伺服器無法辨別當前要訪問的是哪臺虛擬主機中的資源,會預設訪問預設虛擬主機。
預設虛擬主機可以通過在server.xml
中engine
標籤上的defaultHost
屬性進行配置。
<Engine name="Catalina" defaultHost="localhost">
4. 一些其他的配置說明
4.1 war包
通常我們可以把一個web應用的資料夾經過命令:
jar -cvf my.war news
將news應用的資原始檔壓縮打包成 my.war,然後傳送到webapps下,war檔案會自動解壓,可以直接被訪問。
其實war就是zip,將zip檔案字尾名改一下也能達到效果。
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"/>
然後用該使用者進入,管理主機上的所有web應用。